diff --git a/.github/scripts/chrome.mts b/.github/scripts/chrome.mts index 29647723a2..2c14b11a19 100644 --- a/.github/scripts/chrome.mts +++ b/.github/scripts/chrome.mts @@ -152,7 +152,7 @@ type PlaywrightBrowserOptions = { baseUrl: string; }; -export class PlaywrightBrowser { +export class HeadlessChromeController { public networkRequests: NetworkRequest[] = []; public webSocketConnections: WebSocketConnection[] = []; private readonly browser: Browser; @@ -176,7 +176,7 @@ export class PlaywrightBrowser { this.page.setDefaultNavigationTimeout(options.scenarioTimeoutMs); } - static async create(label: string, options: PlaywrightBrowserOptions): Promise { + static async create(label: string, options: PlaywrightBrowserOptions): Promise { process.stderr.write(`[${label}] Launching Playwright Chromium\n`); const { chromium } = loadPlaywright(); const browser = await chromium.launch({ @@ -207,15 +207,15 @@ export class PlaywrightBrowser { const page = await context.newPage(); const cdp = await context.newCDPSession(page); - return new PlaywrightBrowser(browser, context, page, cdp, options); + return new HeadlessChromeController(browser, context, page, cdp, options); } catch (error) { await browser.close().catch(() => undefined); throw error; } } - static async with(label: string, options: PlaywrightBrowserOptions, callback: (browser: PlaywrightBrowser) => T | Promise): Promise { - const browser = await PlaywrightBrowser.create(label, options); + static async with(label: string, options: PlaywrightBrowserOptions, callback: (browser: HeadlessChromeController) => T | Promise): Promise { + const browser = await HeadlessChromeController.create(label, options); try { return await callback(browser); } finally { diff --git a/.github/scripts/measure-frontend-browser-comparison.mts b/.github/scripts/measure-frontend-browser-comparison.mts index e272a1cdd9..0af440a984 100644 --- a/.github/scripts/measure-frontend-browser-comparison.mts +++ b/.github/scripts/measure-frontend-browser-comparison.mts @@ -8,7 +8,7 @@ import { copyFile, mkdir, rm, writeFile } from 'node:fs/promises'; import { join, resolve } from 'node:path'; import * as util from './utility.mts'; import * as heapSnapshotUtil from './heap-snapshot-util.mts'; -import { maybeClick, PlaywrightBrowser, summarizeNetwork, waitForAnyLocator, waitForReady } from './chrome.mts'; +import { maybeClick, HeadlessChromeController, summarizeNetwork, waitForAnyLocator, waitForReady } from './chrome.mts'; import type { BrowserMeasurement, NetworkRequest, NetworkSummary } from './chrome.mts'; const [baseDirArg, headDirArg, baseOutputArg, headOutputArg, headHeapSnapshotOutputArg] = process.argv.slice(2); @@ -36,8 +36,8 @@ type BrowserMetricsReport = { samples: BrowserMeasurementSample[]; }; -async function runSignupAndPostScenario(browser: PlaywrightBrowser) { - const page = browser.page; +async function runSignupAndPostScenario(chrome: HeadlessChromeController) { + const page = chrome.page; const noteText = `Frontend browser metrics ${Date.now()}`; await page.goto(`${baseUrl}/`, { waitUntil: 'domcontentloaded', timeout: scenarioTimeoutMs }); @@ -56,13 +56,13 @@ async function runSignupAndPostScenario(browser: PlaywrightBrowser) { await page.getByTestId('signup-rules-continue').click(); } - await browser.mkInput('signup-username').fill('alice'); - await browser.mkInput('signup-password').fill('alice1234'); - await browser.mkInput('signup-password-retype').fill('alice1234'); - if (await waitForReady(browser.mkInput('signup-invitation-code'), { visible: true, enabled: true, timeoutMs: 2_000 })) { - await browser.mkInput('signup-invitation-code').fill('test-invitation-code'); + await chrome.mkInput('signup-username').fill('alice'); + await chrome.mkInput('signup-password').fill('alice1234'); + await chrome.mkInput('signup-password-retype').fill('alice1234'); + if (await waitForReady(chrome.mkInput('signup-invitation-code'), { visible: true, enabled: true, timeoutMs: 2_000 })) { + await chrome.mkInput('signup-invitation-code').fill('test-invitation-code'); } - const signupResponse = browser.waitApiResponse('/api/signup'); + const signupResponse = chrome.waitApiResponse('/api/signup'); await page.getByTestId('signup-submit').click(); await signupResponse; } @@ -235,7 +235,7 @@ function summarizeSamples(label: 'base' | 'head', samples: BrowserMeasurementSam async function measureSample(label: 'base' | 'head', round: number, heapSnapshotSavePath?: string) { await util.prepareInstance(baseUrl); - return await PlaywrightBrowser.with(label, { scenarioTimeoutMs, baseUrl }, async chrome => { + return await HeadlessChromeController.with(label, { scenarioTimeoutMs, baseUrl }, async chrome => { await chrome.enableNetworkTracking(); const startedAt = Date.now();