diff --git a/Libraries/Utilities/__tests__/PerformanceLogger-test.js b/Libraries/Utilities/__tests__/PerformanceLogger-test.js index 8026eb1d299..79981ad2671 100644 --- a/Libraries/Utilities/__tests__/PerformanceLogger-test.js +++ b/Libraries/Utilities/__tests__/PerformanceLogger-test.js @@ -75,6 +75,20 @@ describe('PerformanceLogger', () => { }); }); + it('starts & stops a timespan with custom timestamps', () => { + let perfLogger = createPerformanceLogger(); + const startTime = 25; + const endTime = 35; + perfLogger.startTimespan(TIMESPAN_1, startTime); + perfLogger.stopTimespan(TIMESPAN_1, endTime); + expect(perfLogger.hasTimespan(TIMESPAN_1)).toBe(true); + expect(perfLogger.getTimespans()[TIMESPAN_1]).toEqual({ + startTime, + endTime, + totalTime: expect.any(Number), + }); + }); + it('does not override a timespan', () => { let perfLogger = createPerformanceLogger(); perfLogger.startTimespan(TIMESPAN_1); @@ -206,8 +220,8 @@ describe('PerformanceLogger', () => { it('records extras for a timespan', () => { let perfLogger = createPerformanceLogger(); - perfLogger.startTimespan(TIMESPAN_1, POINT_ANNOTATION_1); - perfLogger.stopTimespan(TIMESPAN_1, POINT_ANNOTATION_2); + perfLogger.startTimespan(TIMESPAN_1, undefined, POINT_ANNOTATION_1); + perfLogger.stopTimespan(TIMESPAN_1, undefined, POINT_ANNOTATION_2); expect(perfLogger.getTimespans()[TIMESPAN_1]?.startExtras).toEqual( POINT_ANNOTATION_1, ); diff --git a/Libraries/Utilities/createPerformanceLogger.js b/Libraries/Utilities/createPerformanceLogger.js index a7f3c84f19a..66c2183186c 100644 --- a/Libraries/Utilities/createPerformanceLogger.js +++ b/Libraries/Utilities/createPerformanceLogger.js @@ -50,8 +50,8 @@ export interface IPerformanceLogger { markPoint(key: string, timestamp?: number, extras?: Extras): void; removeExtra(key: string): ?ExtraValue; setExtra(key: string, value: ExtraValue): void; - startTimespan(key: string, extras?: Extras): void; - stopTimespan(key: string, extras?: Extras): void; + startTimespan(key: string, timestamp?: number, extras?: Extras): void; + stopTimespan(key: string, timestamp?: number, extras?: Extras): void; } const _cookies: {[key: string]: number, ...} = {}; @@ -188,7 +188,11 @@ class PerformanceLogger implements IPerformanceLogger { } } - markPoint(key: string, timestamp?: number, extras?: Extras) { + markPoint( + key: string, + timestamp?: number = getCurrentTimestamp(), + extras?: Extras, + ) { if (this._closed) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog('PerformanceLogger: markPoint - has closed ignoring: ', key); @@ -204,7 +208,7 @@ class PerformanceLogger implements IPerformanceLogger { } return; } - this._points[key] = timestamp ?? getCurrentTimestamp(); + this._points[key] = timestamp; if (extras) { this._pointExtras[key] = extras; } @@ -236,7 +240,11 @@ class PerformanceLogger implements IPerformanceLogger { this._extras[key] = value; } - startTimespan(key: string, extras?: Extras) { + startTimespan( + key: string, + timestamp?: number = getCurrentTimestamp(), + extras?: Extras, + ) { if (this._closed) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog( @@ -258,7 +266,7 @@ class PerformanceLogger implements IPerformanceLogger { } this._timespans[key] = { - startTime: getCurrentTimestamp(), + startTime: timestamp, startExtras: extras, }; _cookies[key] = Systrace.beginAsyncEvent(key); @@ -267,7 +275,11 @@ class PerformanceLogger implements IPerformanceLogger { } } - stopTimespan(key: string, extras?: Extras) { + stopTimespan( + key: string, + timestamp?: number = getCurrentTimestamp(), + extras?: Extras, + ) { if (this._closed) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog('PerformanceLogger: stopTimespan - has closed ignoring: ', key); @@ -296,7 +308,7 @@ class PerformanceLogger implements IPerformanceLogger { } timespan.endExtras = extras; - timespan.endTime = getCurrentTimestamp(); + timespan.endTime = timestamp; timespan.totalTime = timespan.endTime - (timespan.startTime || 0); if (PRINT_TO_CONSOLE) { infoLog('PerformanceLogger.js', 'end: ' + key);