@jupyterlab/galata 4.3.0-alpha.10 → 4.3.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -379,7 +379,7 @@ test.describe.serial('Table of Contents', () => {
379
379
 
380
380
  ## Benchmark
381
381
 
382
- Benchmark of JupyterLab is done automatically using Playwright. The actions measured are:
382
+ Benchmark of JupyterLab is done using Playwright. The actions measured are:
383
383
 
384
384
  - Opening a file
385
385
  - Switching from the file to a simple text file
@@ -388,6 +388,13 @@ Benchmark of JupyterLab is done automatically using Playwright. The actions meas
388
388
 
389
389
  Two files are tested: a notebook with many code cells and another with many markdown cells.
390
390
 
391
+ The test is run on the CI by comparing the result in the commit at which a PR branch started and the PR branch head on
392
+ the same CI job to ensure using the same hardware.
393
+ The benchmark job is triggered on:
394
+
395
+ - Approved PR review
396
+ - PR review that contains the sentence `please run benchmark`
397
+
391
398
  The tests are located in the subfolder [test/benchmark](./test/benchmark). And they can be
392
399
  executed with the following command:
393
400
 
@@ -402,8 +409,8 @@ A special report will be generated in the folder `benchmark-results` that will c
402
409
  - `lab-benchmark.png`: A comparison of execution time distribution
403
410
  - `lab-benchmark.vl.json`: The [_Vega-Lite_](https://vega.github.io/vega-lite) description used to produce the PNG file.
404
411
 
405
- The reference, tagged _expected_, is stored in [`lab-benchmark-expected.json`](lab-benchmark-expected.json). It can be
406
- updated using the `-u` option of Playwright; i.e. `jlpm run test:benchmark -u`.
412
+ The reference, tagged _expected_, is stored in `lab-benchmark-expected.json`. It can be
413
+ created using the `-u` option of Playwright; i.e. `jlpm run test:benchmark -u`.
407
414
 
408
415
  ### Benchmark parameters
409
416
 
@@ -442,6 +449,41 @@ By default, both projects will be executed when running `jlpm run test`. But you
442
449
 
443
450
  Galata can be configured by using [command line arguments](https://playwright.dev/docs/cli) or using [`playwright.config.js` file](https://playwright.dev/docs/test-configuration). Full list of config options can be accessed using `jlpm playwright test --help`.
444
451
 
452
+ ### Custom benchmark report
453
+
454
+ By default, Galata will generate a text report in the form of `markdown` table and a [_Vega-Lite_](https://vega.github.io/vega-lite) graph of execution time distribution. Users can customize these reports in two ways:
455
+
456
+ - Using `playwright.config.js` file: in `reporter` section, users can supply two functions `vegaLiteConfigFactory` and `textReportFactory` to the reporter's constructor options. These functions will be used to create [Vega-Lite configuration](https://vega.github.io/vega-lite/docs/) (`vegaLiteConfigFactory`) or to create a text report (`textReportFactory`) from test records.
457
+
458
+ ```javascript
459
+ // An example of `playwright.config.js` with customized builder
460
+ reporter: [
461
+ ...,
462
+ [
463
+ '@jupyterlab/galata/lib/benchmarkReporter',
464
+ { outputFile: 'lab-benchmark.json',
465
+ vegaLiteConfigFactory: (
466
+ allData: Array<IReportRecord>, // All test records
467
+ comparison?: 'snapshot' | 'project'// Logic of test comparisons:'snapshot' or 'project' - default 'snapshot'.
468
+ ) => {
469
+ // Return a Vega-Lite graph configuration object
470
+ return {};
471
+ }
472
+ textReportFactory: (
473
+ allData: Array<IReportRecord>, // All test records
474
+ comparison?: 'snapshot' | 'project'// Logic of test comparisons:'snapshot' or 'project' - default 'snapshot'.
475
+ ) => {
476
+ // Return a promise of with the tuple [report content, file extension]
477
+ return Promise.resolve(['My report content', 'md']);
478
+ }
479
+ }
480
+ ],
481
+ ...
482
+ ]
483
+ ```
484
+
485
+ - The second way to customize the reports is to override the default text report factory (`defaultTextReportFactory`) and Vega-Lite graph config factory (`defaultVegaLiteConfigFactory`) of `BenchmarkReporter` class in a sub-class and then use it as a reporter in `playwright.config.js` file.
486
+
445
487
  ## Reference Image Captures
446
488
 
447
489
  Reference image are saved next to test files in `<test-file-name>-snapshots` folders. If a reference screenshots does not exist, it will be generated at the first execution
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ import { JSONObject } from '@lumino/coreutils';
2
3
  import { FullConfig, FullResult, Reporter, Suite, TestCase, TestResult } from '@playwright/test/reporter';
3
4
  /**
4
5
  * Benchmark namespace
@@ -89,11 +90,51 @@ export declare namespace benchmark {
89
90
  * @returns The attachment
90
91
  */
91
92
  function addAttachment<IRecord>(data: IRecord): IAttachment;
93
+ /**
94
+ * Change between two distributions
95
+ */
96
+ interface IDistributionChange {
97
+ /**
98
+ * Mean value
99
+ */
100
+ mean: number;
101
+ /**
102
+ * Spread around the mean value
103
+ */
104
+ confidenceInterval: number;
105
+ }
106
+ /**
107
+ * Compute the performance change based on a number of old and new measurements.
108
+ *
109
+ * Based on the work by Tomas Kalibera and Richard Jones. See their paper
110
+ * "Quantifying Performance Changes with Effect Size Confidence Intervals", section 6.2,
111
+ * formula "Quantifying Performance Change".
112
+ *
113
+ * However, it simplifies it to only assume one level of benchmarks, not multiple levels.
114
+ * If you do have multiple levels, simply use the mean of the lower levels as your data,
115
+ * like they do in the paper.
116
+ *
117
+ * Note: The measurements must have the same length. As fallback, you could use the minimum
118
+ * size of the two measurement sets.
119
+ *
120
+ * @param oldMeasures The old measurements
121
+ * @param newMeasures The new measurements
122
+ * @param confidenceInterval The confidence interval for the results.
123
+ * @param minLength Fall back to the minimum length of the two arrays
124
+ */
125
+ function distributionChange(oldMeasures: number[], newMeasures: number[], confidenceInterval?: number, minLength?: boolean): IDistributionChange;
126
+ /**
127
+ * Format a performance changes like `between 20.1% slower and 30.3% faster`.
128
+ *
129
+ * @param distribution The distribution change
130
+ * @returns The formatted distribution change
131
+ */
132
+ function formatChange(distribution: IDistributionChange): string;
92
133
  }
93
134
  /**
94
135
  * Report record interface
95
136
  */
96
- interface IReportRecord extends benchmark.IRecord {
137
+ export interface IReportRecord extends benchmark.IRecord {
97
138
  /**
98
139
  * Test suite reference
99
140
  */
@@ -144,14 +185,19 @@ interface IReport {
144
185
  declare class BenchmarkReporter implements Reporter {
145
186
  /**
146
187
  * @param options
147
- * outputFile: Name of the output file (default to env BENCHMARK_OUTPUTFILE)
148
- * comparison: Logic of test comparisons: 'snapshot' or 'project'
149
- * - 'snapshot': (default) This will compare the 'actual' result with the 'expected' one
150
- * - 'project': This will compare the different project
188
+ * - outputFile: Name of the output file (default to env BENCHMARK_OUTPUTFILE)
189
+ * - comparison: Logic of test comparisons: 'snapshot' or 'project'
190
+ * * 'snapshot': (default) This will compare the 'actual' result with the 'expected' one
191
+ * * 'project': This will compare the different project
192
+ * - vegaLiteConfigFactory: Function to create VegaLite configuration from test records; see https://vega.github.io/vega-lite/docs/.
193
+ * - textReportFactory: Function to create text report from test records, this function
194
+ * should return the content and extension of report file.
151
195
  */
152
196
  constructor(options?: {
153
197
  outputFile?: string;
154
198
  comparison?: 'snapshot' | 'project';
199
+ vegaLiteConfigFactory?: (allData: Array<IReportRecord>, comparison?: 'snapshot' | 'project') => JSONObject;
200
+ textReportFactory?: (allData: Array<IReportRecord>, comparison?: 'snapshot' | 'project') => Promise<[string, string]>;
155
201
  });
156
202
  /**
157
203
  * Called once before running tests. All tests have been already discovered and put into a hierarchy of [Suite]s.
@@ -176,6 +222,31 @@ declare class BenchmarkReporter implements Reporter {
176
222
  * - `'interrupted'` - Interrupted by the user.
177
223
  */
178
224
  onEnd(result: FullResult): Promise<void>;
225
+ /**
226
+ * Default text report factory of `BenchmarkReporter`, this method will
227
+ * be used by to generate markdown report. Users can customize the builder
228
+ * by supplying another builder to constructor's option or override this
229
+ * method on a sub-class.
230
+ *
231
+ * @param allData all test records.
232
+ * @param comparison logic of test comparisons:
233
+ * 'snapshot' or 'project'; default 'snapshot'.
234
+ * @return A list of two strings, the first one
235
+ * is the content of report, the second one is the extension of report file.
236
+ */
237
+ protected defaultTextReportFactory(allData: Array<IReportRecord>, comparison?: 'snapshot' | 'project'): Promise<[string, string]>;
238
+ /**
239
+ * Default Vega Lite config factory of `BenchmarkReporter`, this method will
240
+ * be used by to generate VegaLite configuration. Users can customize
241
+ * the builder by supplying another builder to constructor's option or
242
+ * override this method on a sub-class.
243
+ *
244
+ * @param allData all test records.
245
+ * @param comparison logic of test comparisons:
246
+ * 'snapshot' or 'project'; default 'snapshot'.
247
+ * @return VegaLite configuration
248
+ */
249
+ protected defaultVegaLiteConfigFactory(allData: Array<IReportRecord>, comparison?: 'snapshot' | 'project'): Record<string, any>;
179
250
  protected getMetadata(browser?: string): Promise<any>;
180
251
  protected buildReport(): Promise<IReport>;
181
252
  protected config: FullConfig;
@@ -184,5 +255,7 @@ declare class BenchmarkReporter implements Reporter {
184
255
  private _outputFile;
185
256
  private _reference;
186
257
  private _report;
258
+ private _buildVegaLiteGraph;
259
+ private _buildTextReport;
187
260
  }
188
261
  export default BenchmarkReporter;
@@ -35,6 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.benchmark = void 0;
37
37
  const test_1 = require("@playwright/test");
38
+ const base_1 = require("@stdlib/stats/base");
38
39
  const fs_1 = __importDefault(require("fs"));
39
40
  const path_1 = __importDefault(require("path"));
40
41
  const systeminformation_1 = __importDefault(require("systeminformation"));
@@ -91,6 +92,92 @@ var benchmark;
91
92
  };
92
93
  }
93
94
  benchmark.addAttachment = addAttachment;
95
+ /**
96
+ * Quantifies the performance changes between two measures systems. Assumes we gathered
97
+ * n independent measurement from each, and calculated their means and variance.
98
+ *
99
+ * Based on the work by Tomas Kalibera and Richard Jones. See their paper
100
+ * "Quantifying Performance Changes with Effect Size Confidence Intervals", section 6.2,
101
+ * formula "Quantifying Performance Change".
102
+ *
103
+ * However, it simplifies it to only assume one level of benchmarks, not multiple levels.
104
+ * If you do have multiple levels, simply use the mean of the lower levels as your data,
105
+ * like they do in the paper.
106
+ *
107
+ * @param oldDistribution The old distribution description
108
+ * @param newDistribution The new distribution description
109
+ * @param n The number of samples from each system (must be equal)
110
+ * @param confidenceInterval The confidence interval for the results.
111
+ * The default is a 95% confidence interval (95% of the time the true mean will be
112
+ * between the resulting mean +- the resulting CI)
113
+ */
114
+ function performanceChange(oldDistribution, newDistribution, n, confidenceInterval = 0.95) {
115
+ const { mean: yO, variance: sO } = oldDistribution;
116
+ const { mean: yN, variance: sN } = newDistribution;
117
+ const dof = n - 1;
118
+ const t = base_1.dists.t.quantile(1 - (1 - confidenceInterval) / 2, dof);
119
+ const oldFactor = sq(yO) - (sq(t) * sO) / n;
120
+ const newFactor = sq(yN) - (sq(t) * sN) / n;
121
+ const meanNum = yO * yN;
122
+ const ciNum = Math.sqrt(sq(yO * yN) - newFactor * oldFactor);
123
+ return {
124
+ mean: meanNum / oldFactor,
125
+ confidenceInterval: ciNum / oldFactor
126
+ };
127
+ }
128
+ /**
129
+ * Compute the performance change based on a number of old and new measurements.
130
+ *
131
+ * Based on the work by Tomas Kalibera and Richard Jones. See their paper
132
+ * "Quantifying Performance Changes with Effect Size Confidence Intervals", section 6.2,
133
+ * formula "Quantifying Performance Change".
134
+ *
135
+ * However, it simplifies it to only assume one level of benchmarks, not multiple levels.
136
+ * If you do have multiple levels, simply use the mean of the lower levels as your data,
137
+ * like they do in the paper.
138
+ *
139
+ * Note: The measurements must have the same length. As fallback, you could use the minimum
140
+ * size of the two measurement sets.
141
+ *
142
+ * @param oldMeasures The old measurements
143
+ * @param newMeasures The new measurements
144
+ * @param confidenceInterval The confidence interval for the results.
145
+ * @param minLength Fall back to the minimum length of the two arrays
146
+ */
147
+ function distributionChange(oldMeasures, newMeasures, confidenceInterval = 0.95, minLength = false) {
148
+ const n = oldMeasures.length;
149
+ if (!minLength && n !== newMeasures.length) {
150
+ throw new Error('Data have different length');
151
+ }
152
+ return performanceChange({ mean: mean(...oldMeasures), variance: variance(...oldMeasures) }, { mean: mean(...newMeasures), variance: variance(...newMeasures) }, minLength ? Math.min(n, newMeasures.length) : n, confidenceInterval);
153
+ }
154
+ benchmark.distributionChange = distributionChange;
155
+ /**
156
+ * Format a performance changes like `between 20.1% slower and 30.3% faster`.
157
+ *
158
+ * @param distribution The distribution change
159
+ * @returns The formatted distribution change
160
+ */
161
+ function formatChange(distribution) {
162
+ const { mean, confidenceInterval } = distribution;
163
+ return `between ${formatPercent(mean + confidenceInterval)} and ${formatPercent(mean - confidenceInterval)}`;
164
+ }
165
+ benchmark.formatChange = formatChange;
166
+ function formatPercent(percent) {
167
+ if (percent < 1) {
168
+ return `${((1 - percent) * 100).toFixed(1)}% faster`;
169
+ }
170
+ return `${((percent - 1) * 100).toFixed(1)}% slower`;
171
+ }
172
+ function sq(x) {
173
+ return Math.pow(x, 2);
174
+ }
175
+ function mean(...x) {
176
+ return base_1.meanpw(x.length, x, 1);
177
+ }
178
+ function variance(...x) {
179
+ return base_1.variancepn(x.length, 1, x, 1);
180
+ }
94
181
  })(benchmark = exports.benchmark || (exports.benchmark = {}));
95
182
  /**
96
183
  * Custom Playwright reporter for benchmark tests
@@ -98,16 +185,21 @@ var benchmark;
98
185
  class BenchmarkReporter {
99
186
  /**
100
187
  * @param options
101
- * outputFile: Name of the output file (default to env BENCHMARK_OUTPUTFILE)
102
- * comparison: Logic of test comparisons: 'snapshot' or 'project'
103
- * - 'snapshot': (default) This will compare the 'actual' result with the 'expected' one
104
- * - 'project': This will compare the different project
188
+ * - outputFile: Name of the output file (default to env BENCHMARK_OUTPUTFILE)
189
+ * - comparison: Logic of test comparisons: 'snapshot' or 'project'
190
+ * * 'snapshot': (default) This will compare the 'actual' result with the 'expected' one
191
+ * * 'project': This will compare the different project
192
+ * - vegaLiteConfigFactory: Function to create VegaLite configuration from test records; see https://vega.github.io/vega-lite/docs/.
193
+ * - textReportFactory: Function to create text report from test records, this function
194
+ * should return the content and extension of report file.
105
195
  */
106
196
  constructor(options = {}) {
107
- var _a, _b, _c, _d;
197
+ var _a, _b, _c, _d, _e, _f;
108
198
  this._outputFile = (_b = (_a = options.outputFile) !== null && _a !== void 0 ? _a : process.env['BENCHMARK_OUTPUTFILE']) !== null && _b !== void 0 ? _b : benchmark.DEFAULT_OUTPUT;
109
199
  this._comparison = (_c = options.comparison) !== null && _c !== void 0 ? _c : 'snapshot';
110
200
  this._reference = (_d = process.env['BENCHMARK_REFERENCE']) !== null && _d !== void 0 ? _d : benchmark.DEFAULT_REFERENCE;
201
+ this._buildVegaLiteGraph = (_e = options.vegaLiteConfigFactory) !== null && _e !== void 0 ? _e : this.defaultVegaLiteConfigFactory;
202
+ this._buildTextReport = (_f = options.textReportFactory) !== null && _f !== void 0 ? _f : this.defaultTextReportFactory;
111
203
  }
112
204
  /**
113
205
  * Called once before running tests. All tests have been already discovered and put into a hierarchy of [Suite]s.
@@ -183,63 +275,14 @@ class BenchmarkReporter {
183
275
  }
184
276
  allData.push(...expectations.values);
185
277
  }
186
- // Create graph file
278
+ // - Create report
279
+ const [reportContentString, reportExtension] = await this._buildTextReport(allData);
280
+ const reportFile = path_1.default.resolve(outputDir, `${baseName}.${reportExtension}`);
281
+ fs_1.default.writeFileSync(reportFile, reportContentString, 'utf-8');
282
+ // Generate graph file and image
187
283
  const graphConfigFile = path_1.default.resolve(outputDir, `${baseName}.vl.json`);
188
- const config = benchmarkVLTpl_1.default([...new Set(allData.map(d => d.test))], this._comparison == 'snapshot' ? 'reference' : 'project', [...new Set(allData.map(d => d.file))]);
189
- config.data.values = allData;
284
+ const config = this._buildVegaLiteGraph(allData, this._comparison);
190
285
  fs_1.default.writeFileSync(graphConfigFile, JSON.stringify(config), 'utf-8');
191
- // Compute statistics
192
- // - Groupby (test, browser, reference, file)
193
- const groups = new Map();
194
- allData.forEach(d => {
195
- var _a;
196
- if (!groups.has(d.test)) {
197
- groups.set(d.test, new Map());
198
- }
199
- const testGroup = groups.get(d.test);
200
- if (!testGroup.has(d.browser)) {
201
- testGroup.set(d.browser, new Map());
202
- }
203
- const browserGroup = testGroup.get(d.browser);
204
- if (!browserGroup.has(d.reference)) {
205
- browserGroup.set(d.reference, new Map());
206
- }
207
- const fileGroup = browserGroup.get(d.reference);
208
- if (!fileGroup.has(d.file)) {
209
- fileGroup.set(d.file, new Array());
210
- }
211
- (_a = fileGroup.get(d.file)) === null || _a === void 0 ? void 0 : _a.push(d.time);
212
- });
213
- // - Create report
214
- const reportContent = new Array('## Benchmark report', '', 'The execution time (in milliseconds) are grouped by test file, test type and browser.', 'For each case, the following values are computed: _min_ <- [_1st quartile_ - _median_ - _3rd quartile_] -> _max_.', '', '<details><summary>Results table</summary>', '');
215
- let header = '| Test file |';
216
- let nFiles = 0;
217
- for (const [file] of groups.values().next().value.values().next().value.values().next()
218
- .value) {
219
- header += ` ${file} |`;
220
- nFiles++;
221
- }
222
- reportContent.push(header);
223
- reportContent.push(new Array(nFiles + 2).fill('|').join(' --- '));
224
- const filler = new Array(nFiles).fill('|').join(' ');
225
- for (const [test, testGroup] of groups) {
226
- reportContent.push(`| **${test}** | ` + filler);
227
- for (const [browser, browserGroup] of testGroup) {
228
- reportContent.push(`| \`${browser}\` | ` + filler);
229
- for (const [reference, fileGroup] of browserGroup) {
230
- let line = `| ${reference} |`;
231
- for (const [_, dataGroup] of fileGroup) {
232
- const [q1, median, q3] = vs.quartiles(dataGroup);
233
- line += ` ${Math.min(...dataGroup).toFixed()} <- [${q1.toFixed()} - ${median.toFixed()} - ${q3.toFixed()}] -> ${Math.max(...dataGroup).toFixed()} |`;
234
- }
235
- reportContent.push(line);
236
- }
237
- }
238
- }
239
- reportContent.push('', '</details>', '');
240
- const reportFile = path_1.default.resolve(outputDir, `${baseName}.md`);
241
- fs_1.default.writeFileSync(reportFile, reportContent.join('\n'), 'utf-8');
242
- // Generate image
243
286
  const vegaSpec = vl.compile(config).spec;
244
287
  const view = new vega.View(vega.parse(vegaSpec), {
245
288
  renderer: 'canvas'
@@ -263,6 +306,130 @@ class BenchmarkReporter {
263
306
  console.log(reportString);
264
307
  }
265
308
  }
309
+ /**
310
+ * Default text report factory of `BenchmarkReporter`, this method will
311
+ * be used by to generate markdown report. Users can customize the builder
312
+ * by supplying another builder to constructor's option or override this
313
+ * method on a sub-class.
314
+ *
315
+ * @param allData all test records.
316
+ * @param comparison logic of test comparisons:
317
+ * 'snapshot' or 'project'; default 'snapshot'.
318
+ * @return A list of two strings, the first one
319
+ * is the content of report, the second one is the extension of report file.
320
+ */
321
+ async defaultTextReportFactory(allData, comparison = 'snapshot') {
322
+ // Compute statistics
323
+ // - Groupby (test, browser, reference | project, file)
324
+ const groups = new Map();
325
+ allData.forEach(d => {
326
+ var _a;
327
+ if (!groups.has(d.test)) {
328
+ groups.set(d.test, new Map());
329
+ }
330
+ const testGroup = groups.get(d.test);
331
+ if (!testGroup.has(d.browser)) {
332
+ testGroup.set(d.browser, new Map());
333
+ }
334
+ const browserGroup = testGroup.get(d.browser);
335
+ const lastLevel = comparison === 'snapshot' ? d.reference : d.project;
336
+ if (!browserGroup.has(lastLevel)) {
337
+ browserGroup.set(lastLevel, new Map());
338
+ }
339
+ const fileGroup = browserGroup.get(lastLevel);
340
+ if (!fileGroup.has(d.file)) {
341
+ fileGroup.set(d.file, new Array());
342
+ }
343
+ (_a = fileGroup.get(d.file)) === null || _a === void 0 ? void 0 : _a.push(d.time);
344
+ });
345
+ // If the reference | project lists has two items, the intervals will be compared.
346
+ const compare = groups.values().next().value.values().next().value.size === 2;
347
+ // - Create report
348
+ const reportContent = new Array('## Benchmark report', '', 'The execution time (in milliseconds) are grouped by test file, test type and browser.', 'For each case, the following values are computed: _min_ <- [_1st quartile_ - _median_ - _3rd quartile_] -> _max_.');
349
+ if (compare) {
350
+ reportContent.push('', 'The mean relative comparison is computed with 95% confidence.');
351
+ }
352
+ reportContent.push('', '<details><summary>Results table</summary>', '');
353
+ let header = '| Test file |';
354
+ let nFiles = 0;
355
+ for (const [file] of groups.values().next().value.values().next().value.values().next()
356
+ .value) {
357
+ header += ` ${file} |`;
358
+ nFiles++;
359
+ }
360
+ reportContent.push(header);
361
+ reportContent.push(new Array(nFiles + 2).fill('|').join(' --- '));
362
+ const filler = new Array(nFiles).fill('|').join(' ');
363
+ let changeReference = benchmark.DEFAULT_EXPECTED_REFERENCE;
364
+ for (const [test, testGroup] of groups) {
365
+ reportContent.push(`| **${test}** | ` + filler);
366
+ for (const [browser, browserGroup] of testGroup) {
367
+ reportContent.push(`| \`${browser}\` | ` + filler);
368
+ const actual = new Map();
369
+ const expected = new Map();
370
+ for (const [reference, fileGroup] of browserGroup) {
371
+ let line = `| ${reference} |`;
372
+ for (const [filename, dataGroup] of fileGroup) {
373
+ const [q1, median, q3] = vs.quartiles(dataGroup);
374
+ if (compare) {
375
+ if (reference === benchmark.DEFAULT_REFERENCE ||
376
+ !actual.has(filename)) {
377
+ actual.set(filename, dataGroup);
378
+ }
379
+ else {
380
+ changeReference = reference;
381
+ expected.set(filename, dataGroup);
382
+ }
383
+ }
384
+ line += ` ${Math.min(...dataGroup).toFixed()} <- [${q1.toFixed()} - ${median.toFixed()} - ${q3.toFixed()}] -> ${Math.max(...dataGroup).toFixed()} |`;
385
+ }
386
+ reportContent.push(line);
387
+ }
388
+ if (compare) {
389
+ let line = `| Mean relative change |`;
390
+ for (const [filename, oldDistribution] of expected) {
391
+ const newDistribution = actual.get(filename);
392
+ try {
393
+ const delta = benchmark.distributionChange(oldDistribution, newDistribution, 0.95, true);
394
+ let unmatchWarning = '';
395
+ if (oldDistribution.length != newDistribution.length) {
396
+ unmatchWarning = `[:warning:](# "Reference size ${oldDistribution.length} != Actual size ${newDistribution.length}") `;
397
+ }
398
+ line += ` ${unmatchWarning}${((delta.mean - 1) * 100).toFixed(1)}% ± ${(delta.confidenceInterval * 100).toFixed(1)}% |`;
399
+ }
400
+ catch (error) {
401
+ console.error(`Reference has length ${oldDistribution.length} and new has ${newDistribution.length}.`);
402
+ line += ` ${error} |`;
403
+ }
404
+ }
405
+ reportContent.push(line);
406
+ }
407
+ }
408
+ }
409
+ if (compare) {
410
+ reportContent.push('', `Changes are computed with _${changeReference}_ as reference.`);
411
+ }
412
+ reportContent.push('', '</details>', '');
413
+ const reportExtension = 'md';
414
+ const reportContentString = reportContent.join('\n');
415
+ return [reportContentString, reportExtension];
416
+ }
417
+ /**
418
+ * Default Vega Lite config factory of `BenchmarkReporter`, this method will
419
+ * be used by to generate VegaLite configuration. Users can customize
420
+ * the builder by supplying another builder to constructor's option or
421
+ * override this method on a sub-class.
422
+ *
423
+ * @param allData all test records.
424
+ * @param comparison logic of test comparisons:
425
+ * 'snapshot' or 'project'; default 'snapshot'.
426
+ * @return VegaLite configuration
427
+ */
428
+ defaultVegaLiteConfigFactory(allData, comparison = 'snapshot') {
429
+ const config = benchmarkVLTpl_1.default([...new Set(allData.map(d => d.test))], comparison == 'snapshot' ? 'reference' : 'project', [...new Set(allData.map(d => d.file))]);
430
+ config.data.values = allData;
431
+ return config;
432
+ }
266
433
  async getMetadata(browser) {
267
434
  const cpu = await systeminformation_1.default.cpu();
268
435
  // Keep only non-variable value
@@ -1 +1 @@
1
- {"version":3,"file":"benchmarkReporter.js","sourceRoot":"","sources":["../src/benchmarkReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"benchmarkReporter.js","sourceRoot":"","sources":["../src/benchmarkReporter.ts"],"names":[],"mappings":"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"}
@@ -26,13 +26,11 @@ function configPerFile(tests, comparison) {
26
26
  transform: [{ filter: `datum.test === '${t}'` }],
27
27
  facet: {
28
28
  column: { field: 'browser', type: 'nominal' }
29
- // row: { field: 'test', type: 'nominal' }
30
29
  },
31
30
  spec: {
32
31
  mark: { type: 'boxplot', extent: 'min-max' },
33
32
  encoding: {
34
33
  y: { field: comparison, type: 'nominal' },
35
- // color: { field: 'file', type: 'nominal', legend: null },
36
34
  x: {
37
35
  field: 'time',
38
36
  title: 'Time (ms)',
@@ -1 +1 @@
1
- {"version":3,"file":"benchmarkVLTpl.js","sourceRoot":"","sources":["../src/benchmarkVLTpl.ts"],"names":[],"mappings":";AAAA,0BAA0B;;AAE1B;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,iDAAiD;IAC1D,WAAW,EAAE,gCAAgC;IAC7C,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,EAAyB;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,KAAe,EACf,UAAkB;IAElB,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC;gBAChD,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC7C,0CAA0C;iBAC3C;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;oBAC5C,QAAQ,EAAE;wBACR,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;wBACzC,2DAA2D;wBAC3D,CAAC,EAAE;4BACD,KAAK,EAAE,MAAM;4BACb,KAAK,EAAE,WAAW;4BAClB,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;yBACvB;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAC3B,KAAe,EACf,UAAkB,EAClB,SAAoB;IAEpB,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,uCACK,cAAc,GACd,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EACnC;KACH;SAAM;QACL,uCACK,cAAc,KACjB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACrB,uBACE,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAC7C,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EACnC;YACJ,CAAC,CAAC,IACF;KACH;AACH,CAAC;AAED,kBAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"benchmarkVLTpl.js","sourceRoot":"","sources":["../src/benchmarkVLTpl.ts"],"names":[],"mappings":";AAAA,0BAA0B;;AAE1B;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,iDAAiD;IAC1D,WAAW,EAAE,gCAAgC;IAC7C,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,EAAyB;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,KAAe,EACf,UAAkB;IAElB,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC;gBAChD,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC9C;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;oBAC5C,QAAQ,EAAE;wBACR,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;wBACzC,CAAC,EAAE;4BACD,KAAK,EAAE,MAAM;4BACb,KAAK,EAAE,WAAW;4BAClB,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;yBACvB;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAC3B,KAAe,EACf,UAAkB,EAClB,SAAoB;IAEpB,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,uCACK,cAAc,GACd,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EACnC;KACH;SAAM;QACL,uCACK,cAAc,KACjB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACrB,uBACE,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAC7C,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EACnC;YACJ,CAAC,CAAC,IACF;KACH;AACH,CAAC;AAED,kBAAe,oBAAoB,CAAC"}