mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-07-25 19:05:03 +02:00
refactor
This commit is contained in:
10
.github/scripts/chrome.mts
vendored
10
.github/scripts/chrome.mts
vendored
@@ -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<PlaywrightBrowser> {
|
||||
static async create(label: string, options: PlaywrightBrowserOptions): Promise<HeadlessChromeController> {
|
||||
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<T>(label: string, options: PlaywrightBrowserOptions, callback: (browser: PlaywrightBrowser) => T | Promise<T>): Promise<T> {
|
||||
const browser = await PlaywrightBrowser.create(label, options);
|
||||
static async with<T>(label: string, options: PlaywrightBrowserOptions, callback: (browser: HeadlessChromeController) => T | Promise<T>): Promise<T> {
|
||||
const browser = await HeadlessChromeController.create(label, options);
|
||||
try {
|
||||
return await callback(browser);
|
||||
} finally {
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user