Files
orca/tests/tools/benchmarks/spinner-rendering/sample-cpu.mjs
aeddfa463d perf(renderer): avoid per-second spinner animation events (#19407)
* perf(renderer): avoid per-second spinner animation events

* fix(bench): ensure the Electron runtime before bench:spinners

The script launches Electron via Playwright but skipped ensure:electron-runtime,
which every other Electron-launching bench script runs first.

* docs(renderer): scope spinner pixel-tolerance claim to paused-animation checks

---------

Co-authored-by: m4air <m4air@m4airs-MacBook-Air.local>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
2026-09-07 19:29:53 -07:00

46 lines
1.6 KiB
JavaScript

export async function sampleCpu(app, cdp, sampleMs) {
const rendererMetrics = async () =>
Object.fromEntries(
(await cdp.send('Performance.getMetrics')).metrics.map(({ name, value }) => [name, value])
)
const processMetrics = () =>
app.evaluate(({ app }) =>
app
.getAppMetrics()
.map(({ pid, type, cpu }) => ({ pid, type, seconds: cpu.cumulativeCPUUsage }))
)
const beforeRenderer = await rendererMetrics()
const before = await processMetrics()
const started = performance.now()
await new Promise((resolve) => setTimeout(resolve, sampleMs))
const after = await processMetrics()
const elapsedMs = performance.now() - started
const afterRenderer = await rendererMetrics()
return {
elapsedMs,
cpuMsPerSecond: after.map((process) => {
const previous = before.find((row) => row.pid === process.pid)?.seconds
return {
pid: process.pid,
type: process.type,
value:
typeof previous === 'number' && typeof process.seconds === 'number'
? ((process.seconds - previous) * 1e6) / elapsedMs
: null
}
}),
rendererMsPerSecond: Object.fromEntries(
['TaskDuration', 'ScriptDuration', 'RecalcStyleDuration', 'LayoutDuration'].map((name) => [
name,
((afterRenderer[name] - beforeRenderer[name]) * 1e6) / elapsedMs
])
),
rendererCountsPerSecond: Object.fromEntries(
['RecalcStyleCount', 'LayoutCount'].map((name) => [
name,
((afterRenderer[name] - beforeRenderer[name]) * 1000) / elapsedMs
])
)
}
}