mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 00:02:31 +00:00
* 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>
46 lines
1.6 KiB
JavaScript
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
|
|
])
|
|
)
|
|
}
|
|
}
|