From 391715c33c5c3a3f10e18309103d769ff7312480 Mon Sep 17 00:00:00 2001 From: Yuna Seol Date: Thu, 12 Mar 2026 15:06:12 -0400 Subject: [PATCH] fix(core): fix startup stats to use int values for timestamps and durations (#22201) Co-authored-by: Yuna Seol --- .../src/telemetry/startupProfiler.test.ts | 27 +++++++++++++++++++ .../core/src/telemetry/startupProfiler.ts | 11 +++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/core/src/telemetry/startupProfiler.test.ts b/packages/core/src/telemetry/startupProfiler.test.ts index 2898cf4cce..973806b271 100644 --- a/packages/core/src/telemetry/startupProfiler.test.ts +++ b/packages/core/src/telemetry/startupProfiler.test.ts @@ -388,5 +388,32 @@ describe('StartupProfiler', () => { }), ); }); + + it('should log startup stats timestamps as rounded integers', () => { + const handle = profiler.start('test_phase'); + handle?.end(); + + profiler.flush(mockConfig); + + const statsEvent = logStartupStats.mock.calls[0][1]; + const phase = statsEvent.phases[0]; + + // Verify they are integers + expect(Number.isInteger(phase.start_time_usec)).toBe(true); + expect(Number.isInteger(phase.end_time_usec)).toBe(true); + }); + + it('should log startup stats duration as rounded integers', () => { + const handle = profiler.start('test_phase'); + handle?.end(); + + profiler.flush(mockConfig); + + const statsEvent = logStartupStats.mock.calls[0][1]; + const phase = statsEvent.phases[0]; + + // Verify they are integers + expect(Number.isInteger(phase.duration_ms)).toBe(true); + }); }); }); diff --git a/packages/core/src/telemetry/startupProfiler.ts b/packages/core/src/telemetry/startupProfiler.ts index 89421380b7..260952eb03 100644 --- a/packages/core/src/telemetry/startupProfiler.ts +++ b/packages/core/src/telemetry/startupProfiler.ts @@ -207,13 +207,16 @@ export class StartupProfiler { if (measure && phase.cpuUsage) { startupPhases.push({ name: phase.name, - duration_ms: measure.duration, + duration_ms: Math.round(measure.duration), cpu_usage_user_usec: phase.cpuUsage.user, cpu_usage_system_usec: phase.cpuUsage.system, - start_time_usec: (performance.timeOrigin + measure.startTime) * 1000, - end_time_usec: + start_time_usec: Math.round( + (performance.timeOrigin + measure.startTime) * 1000, + ), + end_time_usec: Math.round( (performance.timeOrigin + measure.startTime + measure.duration) * - 1000, + 1000, + ), }); } }