UNPKG

@zendesk/react-measure-timing-hooks

Version:

react hooks for measuring time to interactive and time to render of components

229 lines 12.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("./testUtility/asciiTimelineSerializer"); const vitest_1 = require("vitest"); const firstCPUIdle_1 = require("./firstCPUIdle"); const makeTimeline_1 = require("./testUtility/makeTimeline"); function getFirstCPUIdleEntry({ fmpTime, entries, }) { const processor = (0, firstCPUIdle_1.createCPUIdleProcessor)(fmpTime ?? 0); let firstCPUIdle; for (const entry of entries) { const result = processor.processPerformanceEntry(entry); if (result !== undefined) { firstCPUIdle = result; } } return firstCPUIdle; } (0, vitest_1.describe)('createCPUIdleProcessor', () => { (0, vitest_1.it)('No long tasks after FMP, FirstCPUIdle immediately after FMP + quiet window', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(4_000), (0, makeTimeline_1.LongTask)(400), ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp task(400) timeline | |-<⋯ +4000 ⋯>-[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++] time (ms) | 200 4200 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: 200 }); }); (0, vitest_1.it)('One light cluster after FMP, FirstCPUIdle at FMP', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(100), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(2_550), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp task(50) task(50) task(50) check timeline | |-------------------[++++++++]----------[++++++++]-[++++++++]-<⋯ +2550 ⋯>-| time (ms) | 200 300 400 450 3050 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: 200 }); }); (0, vitest_1.it)('One heavy cluster after FMP, FirstCPUIdle after the cluster', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(100), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(2_500), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp task(50) task(200) task(50) check timeline | |-----------[++++]------[+++++++++++++++++++++++]------[++++]-<⋯ +2500 ⋯>--| time (ms) | 200 300 400 650 3200 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: 700 }); }); (0, vitest_1.it)('Multiple heavy clusters, FirstCPUIdle updated to end of last cluster', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(100), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(400), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(400), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(2_100), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp task(200) task(200) task(200) check timeline | |---[+++++++]------------------[+++++++]------------------[+++++++]-<⋯ +2100 ⋯>--| time (ms) | 200 300 900 1500 3800 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); const lastLongTask = entries.at(-2); const expectedResult = lastLongTask.startTime + lastLongTask.duration; (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: expectedResult }); }); (0, vitest_1.it)('Checking before the quiet window has passed - no long tasks processed, FirstCPUIdle not found', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([(0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(200), makeTimeline_1.Check]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp check timeline | |-<⋯ +200 ⋯>-| time (ms) | 200 400 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); (0, vitest_1.expect)(firstCPUIdle).toEqual({ nextCheck: 2_400 }); }); (0, vitest_1.it)('One heavy cluster, followed by two light, value is after 1st heavy cluster', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(100), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(100), (0, makeTimeline_1.LongTask)(100), (0, makeTimeline_1.Idle)(1_000), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(1_000), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(1_550), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | fmp task(200) task(100) task(200) task(200) check timeline | |----[+++++++++]-----[+++]-<⋯ +1000 ⋯>--[+++++++++]-<⋯ +1000 ⋯>-[+++++++++]-<⋯ +1550 ⋯>-| time (ms) | 200 300 600 1700 2900 4650 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); const lastHeavyClusterLongTask = entries.at(2); const expectedResult = lastHeavyClusterLongTask.startTime + lastHeavyClusterLongTask.duration; (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: expectedResult }); }); (0, vitest_1.it)('Continuous heavy clusters', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ makeTimeline_1.FMP, (0, makeTimeline_1.Idle)(200), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(300), (0, makeTimeline_1.Idle)(50), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | task(300) task(300) task(300) task(300) task(300) task(300) task(300) task(300) events | fmp task(300) task(300) task(300) task(300) task(300) task(300) task(300) check timeline | |-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-[++]-|- time (ms) | 0 200 550 900 1250 1600 1950 2300 2650 3000 3350 3700 4050 4400 4750 5100 5450 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); (0, vitest_1.expect)(firstCPUIdle).toEqual({ nextCheck: 7_450 }); }); (0, vitest_1.it)('Light cluster followed by a heavy cluster a second later, FirstCPUIdle updated', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(1_050), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(50), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(50), (0, makeTimeline_1.LongTask)(200), (0, makeTimeline_1.Idle)(2_050), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | task(50) task(50) task(50) events | fmp task(50) task(50) task(200) task(200) check timeline | [+]--[+]--[+]-<⋯ +1050 ⋯>[+]--[+]---[+++++++++++]---[+++++++++++]-<⋯ +2050 ⋯>--| time (ms) | 200 300 350 1450 1550 1650 1900 4150 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); const lastLongTask = entries.at(-2); const expectedResult = lastLongTask.startTime + lastLongTask.duration; (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: expectedResult }); }); (0, vitest_1.it)('A long task overlaps FMP, we consider FirstCPUIdle after the long task', () => { const { entries, fmpTime } = (0, makeTimeline_1.makeEntries)([ (0, makeTimeline_1.Idle)(200), makeTimeline_1.FMP, (0, makeTimeline_1.LongTask)(110, { start: 150 }), // Overlaps with FMP (0, makeTimeline_1.Idle)(2_300), makeTimeline_1.Check, ]); (0, vitest_1.expect)(entries).toMatchInlineSnapshot(` events | events | task(110) fmp check timeline | [+++++++++++++++++++++++++++++++++++++++++++++++++++++]-<⋯ +2240 ⋯>-| timeline | -------------------------|-<⋯ +2300 ⋯>------------------------------- time (ms) | 150 200 2500 `); const firstCPUIdle = getFirstCPUIdleEntry({ fmpTime, entries }); const lastLongTask = entries.at(-2); const expectedResult = lastLongTask.startTime + lastLongTask.duration; (0, vitest_1.expect)(firstCPUIdle).toEqual({ firstCpuIdle: expectedResult }); }); }); //# sourceMappingURL=firstCPUIdle.test.js.map