| 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; |
| 3 | import { analyseProfile } from "./profileAnalysis.js"; |
| 4 | import type { CpuProfile } from "./rendererDiagnostics.js"; |
| 5 | |
| 6 | test("profiles produce bounded app-only self-time summaries without source paths", () => { |
| 7 | const profile: CpuProfile = { |
| 8 | startTime: 0, endTime: 30_000, |
| 9 | nodes: [ |
| 10 | { id: 1, callFrame: { functionName: "render", url: "reasonix://app/assets/main-abc.js", lineNumber: 12 } }, |
| 11 | { id: 2, callFrame: { functionName: "secret", url: "file:///private/user.js", lineNumber: 0 } }, |
| 12 | { id: 3, callFrame: { functionName: "remote", url: "https://example.com/app.js", lineNumber: 0 } }, |
| 13 | ], samples: [1, 2, 1, 3], timeDeltas: [5000, 10000, 5000, 10000], |
| 14 | }; |
| 15 | assert.deepEqual(analyseProfile(profile), [{ label: "render (main-abc.js:13)", selfMs: 10, samples: 2 }]); |
| 16 | assert.throws(() => analyseProfile({ ...profile, samples: Array(100_001).fill(1) }), /budget/); |
| 17 | }); |
| 18 |