feat: adopt 1920x1080 baseline
This commit is contained in:
@@ -5,6 +5,8 @@ import { chromium } from 'playwright';
|
||||
|
||||
const targetUrl = withDebugParam(process.env.MEASURE_URL ?? 'http://127.0.0.1:4173/');
|
||||
const outputPath = process.env.MEASURE_OUT ?? 'dist/performance-report.json';
|
||||
const baselineViewport = { width: 1920, height: 1080 };
|
||||
const legacyUiScale = 1.5;
|
||||
const budgets = {
|
||||
titleReadyMs: readBudget('PERF_BUDGET_TITLE_READY_MS', 30000),
|
||||
storyReadyFromNewGameMs: readBudget('PERF_BUDGET_STORY_READY_MS', 30000),
|
||||
@@ -16,13 +18,39 @@ const budgets = {
|
||||
largestJsKB: readBudget('PERF_BUDGET_LARGEST_JS_KB', 2500)
|
||||
};
|
||||
|
||||
async function clickLegacyUi(page, x, y, options) {
|
||||
await page.mouse.click(x * legacyUiScale, y * legacyUiScale, options);
|
||||
}
|
||||
|
||||
async function clickBattleDeploymentStart(page) {
|
||||
const point = await page.evaluate(() => {
|
||||
const scene = window.__HEROS_GAME__?.scene.getScene('BattleScene');
|
||||
const layout = scene?.layout;
|
||||
const canvas = document.querySelector('canvas');
|
||||
const bounds = canvas?.getBoundingClientRect();
|
||||
if (!scene || !layout || !canvas || !bounds) {
|
||||
return null;
|
||||
}
|
||||
const logicalX = layout.panelX + 24 + (layout.panelWidth - 48) / 2;
|
||||
const logicalY = layout.panelY + layout.panelHeight - 76 + 17;
|
||||
return {
|
||||
x: bounds.left + logicalX * bounds.width / scene.scale.width,
|
||||
y: bounds.top + logicalY * bounds.height / scene.scale.height
|
||||
};
|
||||
});
|
||||
if (!point || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {
|
||||
throw new Error(`Expected a runtime deployment start point: ${JSON.stringify(point)}`);
|
||||
}
|
||||
await page.mouse.click(point.x, point.y);
|
||||
}
|
||||
|
||||
let serverProcess;
|
||||
let browser;
|
||||
|
||||
try {
|
||||
serverProcess = await ensurePreviewServer(targetUrl);
|
||||
browser = await chromium.launch({ headless: true });
|
||||
const context = await browser.newContext({ viewport: { width: 1280, height: 720 } });
|
||||
const context = await browser.newContext({ viewport: baselineViewport });
|
||||
await context.addInitScript(() => window.localStorage.clear());
|
||||
const page = await context.newPage();
|
||||
|
||||
@@ -34,7 +62,7 @@ try {
|
||||
const titleEntries = await resourceEntries(page);
|
||||
|
||||
const storyStartedAt = Date.now();
|
||||
await page.mouse.click(962, 240);
|
||||
await clickLegacyUi(page, 962, 240);
|
||||
await waitForStoryReady(page);
|
||||
await page.waitForLoadState('networkidle', { timeout: 120000 });
|
||||
const storyMs = Date.now() - storyStartedAt;
|
||||
@@ -50,7 +78,7 @@ try {
|
||||
let firstBattlePlayableMs = battleMs;
|
||||
if (battleReadyState.phase === 'deployment') {
|
||||
const playableStartedAt = Date.now();
|
||||
await page.mouse.click(1085, 637);
|
||||
await clickBattleDeploymentStart(page);
|
||||
await waitForBattlePlayable(page, 'first-battle-zhuo-commandery');
|
||||
firstBattlePlayableMs += Date.now() - playableStartedAt;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user