- perf/run-all.sh: масштабы 1 и 2, шаги reset -> gen -> verify -> stand -> preflight -> scroll -> coauthor -> grow -> modals -> modals_profiling -> memory -> memtrend -> [control4x] -> bench -> aggregate; лог и run-all.status.json, возобновление (PERF_STEPS, PERF_SKIP_RESET), сухой режим с оценкой длительности, PERF_S2_REPEATS/PERF_S2_TARGETS, контроль CPU 4x (PERF_CONTROL_TARGETS). - Основная метрика: main_thread_ms и main_thread_ms_per_step в скролле (CDP TaskDuration), frame_excess_ms; в summary.md первыми строками. - SQL-статистика по шагам: PERF_SQLSTATS_TAG -> sql/<шаг>/ (sqlstats --out). - netlog: тела /auth/ не пишутся, поля password/token/secret вырезаются. - scroll.spec: уникальные имена целей (лист ССП с суффиксом /ssp, год в отчёте проекта) - иначе Playwright не запускал файл из-за дублей. - PERF_TRACE=0 для прогонов с одним повтором. - README: scroll-coauthor, run-all, возобновление, без CPU 4/6 в матрицах. - design.md: уточнена формулировка R-2, решения Task 10a. Refs #202 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
1.0 KiB
TypeScript
22 lines
1.0 KiB
TypeScript
/**
|
||
* Playwright globalTeardown: sql_top.json + explain/*.json. Только если был сетевой лог (т.е. гонялись сценарии).
|
||
* PERF_SQLSTATS_TAG=<tag> - писать в <run_dir>/sql/<tag>/ (run-all.sh: несколько вызовов Playwright в одном run_id,
|
||
* у каждого свой reset/dump pg_stat_statements; без тега каждый вызов перезатирал бы <run_dir>/sql_top.json).
|
||
*/
|
||
import { existsSync } from 'node:fs';
|
||
import path from 'node:path';
|
||
import { sqlstats } from './global-setup';
|
||
import { runDir } from './results';
|
||
import { netlogFile } from './netlog';
|
||
|
||
export function dumpArgs(): string[] {
|
||
const tag = process.env.PERF_SQLSTATS_TAG?.replace(/[^\w.-]+/g, '_');
|
||
return ['dump', runDir(), ...(tag ? ['--out', path.join(runDir(), 'sql', tag)] : [])];
|
||
}
|
||
|
||
export default async function globalTeardown(): Promise<void> {
|
||
if (process.env.PERF_SQLSTATS === '0') return;
|
||
if (!existsSync(netlogFile())) return;
|
||
sqlstats(dumpArgs());
|
||
}
|