Skip to content

Commit b396932

Browse files
Merge pull request #3024 from preactjs/log-dir-per-bench
Create separate trace log directories per benchmark
2 parents 5c594fd + 0f88fac commit b396932

File tree

6 files changed

+97
-20
lines changed

6 files changed

+97
-20
lines changed

benches/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
dist/
22
results/
33
logs/
4+
logs-saved/
45
node_modules/
56
proxy-packages/*/package-lock.json

benches/package-lock.json

Lines changed: 51 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

benches/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"escalade": "^3.0.2",
2222
"escape-string-regexp": "^4.0.0",
2323
"globby": "^11.0.0",
24+
"prompts": "^2.4.0",
2425
"sade": "^1.7.3",
2526
"strip-ansi": "^6.0.0",
2627
"tachometer": "^0.5.7",

benches/scripts/analyze.js

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { existsSync } from 'fs';
12
import { readFile, readdir } from 'fs/promises';
2-
import { frameworks } from './config.js';
3-
import { benchesRoot } from './utils.js';
3+
import prompts from 'prompts';
4+
import { baseTraceLogDir, frameworks } from './config.js';
45

56
// @ts-ignore
67
import tachometerStats from 'tachometer/lib/stats.js';
@@ -290,15 +291,43 @@ export async function analyze() {
290291
'duration'
291292
];
292293

294+
if (!existsSync(baseTraceLogDir())) {
295+
console.log(
296+
`Could not find log directory: "${baseTraceLogDir()}". Did you run the benchmarks?`
297+
);
298+
return;
299+
}
300+
301+
const benchmarkNames = await readdir(baseTraceLogDir());
302+
let selectedBench;
303+
if (benchmarkNames.length == 0) {
304+
console.log(`No benchmarks or results found in "${baseTraceLogDir()}".`);
305+
return;
306+
} else if (benchmarkNames.length == 1) {
307+
selectedBench = benchmarkNames[0];
308+
} else {
309+
selectedBench = (
310+
await prompts({
311+
type: 'select',
312+
name: 'value',
313+
message: "Which benchmark's results would you like to analyze?",
314+
choices: benchmarkNames.map(name => ({
315+
title: name,
316+
value: name
317+
}))
318+
})
319+
).value;
320+
}
321+
293322
/** @type {Map<string, ResultStats[]>} */
294323
const resultStatsMap = new Map();
295324
for (let framework of frameworkNames) {
296-
const logDir = benchesRoot('logs', framework);
325+
const logDir = baseTraceLogDir(selectedBench, framework);
297326

298327
let logFilePaths;
299328
try {
300329
logFilePaths = (await readdir(logDir)).map(fn =>
301-
benchesRoot('logs', framework, fn)
330+
baseTraceLogDir(selectedBench, framework, fn)
302331
);
303332
} catch (e) {
304333
// If directory doesn't exist or we fail to read it, just skip

benches/scripts/bench.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ export const defaultBenchOptions = {
3232
export async function runBenches(bench1 = 'all', opts) {
3333
const globs = bench1 === 'all' ? allBenches : [bench1].concat(opts._);
3434
const benchesToRun = await globSrc(globs);
35+
36+
if (benchesToRun.length == 0) {
37+
console.log('No benchmarks found matching patterns:', globs);
38+
} else {
39+
console.log('Running benchmarks:', benchesToRun.join(', '));
40+
console.log();
41+
}
42+
3543
const configFileTasks = benchesToRun.map(async (benchPath, i) => {
3644
return generateConfig(benchesRoot('src', benchPath), {
3745
...opts,

benches/scripts/config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const warnings = new Set([]);
1010
const TACH_SCHEMA =
1111
'https://raw.githubusercontent.com/Polymer/tachometer/master/config.schema.json';
1212

13-
const traceLogDir = benchesRoot('logs');
13+
export const baseTraceLogDir = (...args) =>
14+
path.join(benchesRoot('logs'), ...args);
1415

1516
/**
1617
* @param {ConfigFileBenchmark["packageVersions"]["dependencies"]["framework"]} framework
@@ -171,6 +172,7 @@ export async function generateConfig(benchPath, options) {
171172
}
172173

173174
if (browser.name == 'chrome' && options.trace) {
175+
const traceLogDir = baseTraceLogDir(baseBenchConfig.name);
174176
await del('**/*', { cwd: traceLogDir });
175177
await mkdir(traceLogDir, { recursive: true });
176178

0 commit comments

Comments
 (0)