|
1 |
| -const path = require('path'); |
2 |
| -const puppeteer = require('puppeteer'); |
| 1 | +const path = require("path"); |
| 2 | +const puppeteer = require("puppeteer"); |
3 | 3 |
|
4 |
| -const tests = ['Mount deep tree', 'Mount wide tree', 'Update dynamic styles']; |
5 |
| -const tracing = process.argv.some(arg => arg.indexOf('tracing') > -1); |
| 4 | +const implementations = ["use-styles", "emotion-v11", "styled-components"]; |
| 5 | + |
| 6 | +const tests = ["Mount deep tree", "Mount wide tree", "Update dynamic styles"]; |
| 7 | +const tracing = process.argv.some(arg => arg.indexOf("tracing") > -1); |
6 | 8 |
|
7 | 9 | if (tracing) {
|
8 | 10 | console.log(
|
9 |
| - '\nTracing enabled. (note that this might impact benchmark results, we recommend leaving this turned off unless you need a trace)' |
| 11 | + "\nTracing enabled. (note that this might impact benchmark results, we recommend leaving this turned off unless you need a trace)" |
10 | 12 | );
|
11 | 13 | }
|
12 | 14 |
|
13 | 15 | (async () => {
|
14 |
| - console.log('\nStarting headless browser...'); |
15 |
| - const browser = await puppeteer.launch(); |
| 16 | + console.log("\nStarting headless browser..."); |
| 17 | + const browser = await puppeteer.launch({ headless: false }); |
16 | 18 | const page = await browser.newPage();
|
17 |
| - console.log('Opening benchmark app...'); |
18 |
| - await page.goto(`file://${path.join(__dirname, './index.html')}`); |
| 19 | + console.log("Opening benchmark app..."); |
| 20 | + await page.goto(`file://${path.resolve(__dirname, "./dist/index.html")}`); |
19 | 21 |
|
20 | 22 | console.log(
|
21 |
| - 'Running benchmarks... (this may take a minute or two; do not use your machine while these are running!)' |
| 23 | + "Running benchmarks... (this may take a minute or two; do not use your machine while these are running!)" |
22 | 24 | );
|
23 |
| - for (let i = 0; i < tests.length; i++) { |
24 |
| - const test = tests[i]; |
25 |
| - const traceFile = `${test.toLowerCase().replace(/\s/g, '-')}-trace.json`; |
26 |
| - // styled-components is auto-selected, so all we gotta do is select the benchmark and press "Run" |
27 |
| - await page.select('[data-testid="benchmark-picker"]', test); |
28 |
| - await page.waitForSelector('[data-testid="run-button"]'); |
29 |
| - if (tracing) await page.tracing.start({ path: traceFile }); |
30 |
| - await page.click('[data-testid="run-button"]'); |
31 |
| - await page.waitForSelector(`[data-testid="${test} results"]`); |
32 |
| - if (tracing) await page.tracing.stop(); |
33 |
| - const result = await page.$eval(`[data-testid="${test} results"]`, node => node.innerText); |
34 |
| - console.log(`\n---${test}---`); |
35 |
| - console.log(result); |
36 |
| - console.log('Trace written to', traceFile); |
37 |
| - } |
38 |
| - |
39 |
| - console.log('Done!'); |
| 25 | + |
| 26 | + await implementations.reduce( |
| 27 | + async (previousImplementation, implementation) => { |
| 28 | + await previousImplementation; |
| 29 | + |
| 30 | + await page.select('[data-testid="library-picker"]', implementation); |
| 31 | + await new Promise(resolve => setTimeout(resolve, 3000)); |
| 32 | + |
| 33 | + await tests.reduce(async (previousTest, test) => { |
| 34 | + await previousTest; |
| 35 | + const traceFile = `${implementation}_${test |
| 36 | + .toLowerCase() |
| 37 | + .replace(/\s/g, "-")}_trace.json`; |
| 38 | + await page.select('[data-testid="benchmark-picker"]', test); |
| 39 | + await page.waitForSelector('[data-testid="run-button"]'); |
| 40 | + if (tracing) await page.tracing.start({ path: traceFile }); |
| 41 | + await page.click('[data-testid="run-button"]'); |
| 42 | + await page.waitForSelector(`[data-testid="${test} results"]`); |
| 43 | + if (tracing) await page.tracing.stop(); |
| 44 | + const result = await page.$eval( |
| 45 | + `[data-testid="${test} results"]`, |
| 46 | + node => node.innerText |
| 47 | + ); |
| 48 | + console.log(`\n---${implementation}---${test}---`); |
| 49 | + console.log(result); |
| 50 | + if (tracing) { |
| 51 | + console.log("Trace written to", traceFile); |
| 52 | + } |
| 53 | + }, Promise.resolve()); |
| 54 | + |
| 55 | + await page.reload(); |
| 56 | + }, |
| 57 | + Promise.resolve() |
| 58 | + ); |
| 59 | + |
| 60 | + console.log("Done!"); |
40 | 61 | await browser.close();
|
41 | 62 | })();
|
0 commit comments