diff --git a/Libraries/Utilities/__tests__/PerformanceLogger-test.js b/Libraries/Utilities/__tests__/PerformanceLogger-test.js index a762157a165..45837855b6b 100644 --- a/Libraries/Utilities/__tests__/PerformanceLogger-test.js +++ b/Libraries/Utilities/__tests__/PerformanceLogger-test.js @@ -28,6 +28,40 @@ describe('PerformanceLogger', () => { beforeEach(() => { GlobalPerformanceLogger.clear(); }); + describe('close() ', () => { + let perfLogger; + beforeEach(() => { + perfLogger = createPerformanceLogger(); + }); + + it('does not markPoint', () => { + perfLogger.close(); + perfLogger.markPoint(POINT, POINT_TIMESTAMP); + expect(perfLogger.getPoints()).toEqual({}); + }); + it('does not startTimespan', () => { + perfLogger.close(); + perfLogger.startTimespan(TIMESPAN_1); + expect(perfLogger.getTimespans()).toEqual({}); + }); + it('does not setExtra', () => { + perfLogger.close(); + perfLogger.setExtra('extra', 'an extra value'); + expect(perfLogger.getTimespans()).toEqual({}); + }); + + it('does not stopTimespan', () => { + perfLogger.startTimespan(TIMESPAN_1); + perfLogger.close(); + let timespan = perfLogger.getTimespans()[TIMESPAN_1]; + expect(timespan.endTime).toBeUndefined(); + expect(timespan.totalTime).toBeUndefined(); + perfLogger.stopTimespan(TIMESPAN_1); + timespan = perfLogger.getTimespans()[TIMESPAN_1]; + expect(timespan.endTime).toBeUndefined(); + expect(timespan.totalTime).toBeUndefined(); + }); + }); it('starts & stops a timespan', () => { let perfLogger = createPerformanceLogger(); diff --git a/Libraries/Utilities/createPerformanceLogger.js b/Libraries/Utilities/createPerformanceLogger.js index 28e0c5ab149..e94b8bd3a00 100644 --- a/Libraries/Utilities/createPerformanceLogger.js +++ b/Libraries/Utilities/createPerformanceLogger.js @@ -39,12 +39,14 @@ export interface IPerformanceLogger { ): void; clear(): void; clearCompleted(): void; + close(): void; currentTimestamp(): number; getExtras(): {[key: string]: ExtraValue, ...}; getPoints(): {[key: string]: number, ...}; getPointExtras(): {[key: string]: Extras, ...}; getTimespans(): {[key: string]: Timespan, ...}; hasTimespan(key: string): boolean; + isClosed(): boolean; logEverything(): void; markPoint(key: string, timestamp?: number, extras?: Extras): void; removeExtra(key: string): ExtraValue | void; @@ -62,6 +64,7 @@ class PerformanceLogger implements IPerformanceLogger { _extras: {[key: string]: ExtraValue} = {}; _points: {[key: string]: number} = {}; _pointExtras: {[key: string]: Extras, ...} = {}; + _closed: boolean = false; addTimespan( key: string, @@ -70,6 +73,12 @@ class PerformanceLogger implements IPerformanceLogger { startExtras?: Extras, endExtras?: Extras, ) { + if (this._closed) { + if (PRINT_TO_CONSOLE && __DEV__) { + infoLog('PerformanceLogger: addTimespan - has closed ignoring: ', key); + } + return; + } if (this._timespans[key]) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog( @@ -111,6 +120,10 @@ class PerformanceLogger implements IPerformanceLogger { } } + close() { + this._closed = true; + } + currentTimestamp() { return performanceNow(); } @@ -135,6 +148,10 @@ class PerformanceLogger implements IPerformanceLogger { return !!this._timespans[key]; } + isClosed() { + return this._closed; + } + logEverything() { if (PRINT_TO_CONSOLE) { // log timespans @@ -155,6 +172,12 @@ class PerformanceLogger implements IPerformanceLogger { } markPoint(key: string, timestamp?: number, extras?: Extras) { + if (this._closed) { + if (PRINT_TO_CONSOLE && __DEV__) { + infoLog('PerformanceLogger: markPoint - has closed ignoring: ', key); + } + return; + } if (this._points[key]) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog( @@ -177,6 +200,13 @@ class PerformanceLogger implements IPerformanceLogger { } setExtra(key: string, value: ExtraValue) { + if (this._closed) { + if (PRINT_TO_CONSOLE && __DEV__) { + infoLog('PerformanceLogger: setExtra - has closed ignoring: ', key); + } + return; + } + if (this._extras.hasOwnProperty(key)) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog( @@ -190,6 +220,16 @@ class PerformanceLogger implements IPerformanceLogger { } startTimespan(key: string, extras?: Extras) { + if (this._closed) { + if (PRINT_TO_CONSOLE && __DEV__) { + infoLog( + 'PerformanceLogger: startTimespan - has closed ignoring: ', + key, + ); + } + return; + } + if (this._timespans[key]) { if (PRINT_TO_CONSOLE && __DEV__) { infoLog( @@ -211,6 +251,13 @@ class PerformanceLogger implements IPerformanceLogger { } stopTimespan(key: string, extras?: Extras) { + if (this._closed) { + if (PRINT_TO_CONSOLE && __DEV__) { + infoLog('PerformanceLogger: stopTimespan - has closed ignoring: ', key); + } + return; + } + const timespan = this._timespans[key]; if (!timespan || timespan.startTime == null) { if (PRINT_TO_CONSOLE && __DEV__) {