Change signature for addTimestamp for performance logger

Summary:
Changelog:
[Internal][Added] - Change signature of `addTimestamp` for IPerformanceLogger and rename old implementation to addTimeAnnotation

Adding this because there is no current ability to add a timespan to our perf logging with pre-defined start and end timestamps. The naming is a bit confusing because the current implementation of `addTimespan` in FB doesn't add a timespan, it adds an annotation of duration. We rename the old implementation to `addTimeAnnotation/s` and update `addTimespan` to suit our needs.

Reviewed By: rubennorte

Differential Revision: D22633202

fbshipit-source-id: 0e32099241f1f3835257cbb4ad108a4f437869e6
This commit is contained in:
Luna Wei 2020-07-27 14:26:56 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 9edfc43aad
Коммит 509e9dbd5f
2 изменённых файлов: 61 добавлений и 9 удалений

Просмотреть файл

@ -32,7 +32,7 @@ describe('PerformanceLogger', () => {
let perfLogger = createPerformanceLogger();
perfLogger.startTimespan(TIMESPAN_1);
perfLogger.stopTimespan(TIMESPAN_1);
perfLogger.addTimespan(TIMESPAN_2, TIMESPAN_2_DURATION);
perfLogger.addTimeAnnotation(TIMESPAN_2, TIMESPAN_2_DURATION);
expect(perfLogger.hasTimespan(TIMESPAN_1)).toBe(true);
expect(perfLogger.hasTimespan(TIMESPAN_2)).toBe(true);
expect(perfLogger.getTimespans()[TIMESPAN_2].totalTime).toBe(
@ -46,10 +46,33 @@ describe('PerformanceLogger', () => {
let old = perfLogger.getTimespans()[TIMESPAN_1];
perfLogger.startTimespan(TIMESPAN_1);
expect(perfLogger.getTimespans()[TIMESPAN_1]).toBe(old);
perfLogger.addTimespan(TIMESPAN_1, 1);
perfLogger.addTimeAnnotation(TIMESPAN_1, 1);
expect(perfLogger.getTimespans()[TIMESPAN_1]).toBe(old);
});
it('adds a timespan with start and end timestamps', () => {
let perfLogger = createPerformanceLogger();
const startTime = 0;
const endTime = 100;
const description = 'description';
perfLogger.addTimespan(TIMESPAN_1, startTime, endTime, description);
expect(perfLogger.getTimespans()[TIMESPAN_1]).toEqual({
description,
startTime,
endTime,
totalTime: endTime - startTime,
});
});
it('adds a timespan with same key will not override existing', () => {
let perfLogger = createPerformanceLogger();
perfLogger.startTimespan(TIMESPAN_1);
perfLogger.stopTimespan(TIMESPAN_1);
const existing = perfLogger.getTimespans()[TIMESPAN_1];
perfLogger.addTimespan(TIMESPAN_1, 0, 100, 'overriding');
expect(perfLogger.getTimespans()[TIMESPAN_1]).toEqual(existing);
});
it('logs an extra', () => {
let perfLogger = createPerformanceLogger();
perfLogger.setExtra(EXTRA_KEY, EXTRA_VALUE);

Просмотреть файл

@ -24,7 +24,8 @@ type Timespan = {
};
export type IPerformanceLogger = {
addTimespan(string, number, string | void): void,
addTimeAnnotation(string, number, string | void): void,
addTimespan(string, number, number, string | void): void,
startTimespan(string, string | void): void,
stopTimespan(string, options?: {update?: boolean}): void,
clear(): void,
@ -34,7 +35,7 @@ export type IPerformanceLogger = {
getTimespans(): {[key: string]: Timespan, ...},
hasTimespan(string): boolean,
logTimespans(): void,
addTimespans(Array<number>, Array<string>): void,
addTimeAnnotations(Array<number>, Array<string>): void,
setExtra(string, mixed): void,
getExtras(): {[key: string]: mixed, ...},
removeExtra(string): ?mixed,
@ -66,7 +67,7 @@ function createPerformanceLogger(): IPerformanceLogger {
_extras: {},
_points: {},
addTimespan(key: string, lengthInMs: number, description?: string) {
addTimeAnnotation(key: string, durationInMs: number, description?: string) {
if (this._timespans[key]) {
if (PRINT_TO_CONSOLE && __DEV__) {
infoLog(
@ -79,7 +80,31 @@ function createPerformanceLogger(): IPerformanceLogger {
this._timespans[key] = {
description: description,
totalTime: lengthInMs,
totalTime: durationInMs,
};
},
addTimespan(
key: string,
startTime: number,
endTime: number,
description?: string,
) {
if (this._timespans[key]) {
if (PRINT_TO_CONSOLE && __DEV__) {
infoLog(
'PerformanceLogger: Attempting to add a timespan that already exists ',
key,
);
}
return;
}
this._timespans[key] = {
description,
startTime,
endTime,
totalTime: endTime - (startTime || 0),
};
},
@ -199,10 +224,14 @@ function createPerformanceLogger(): IPerformanceLogger {
}
},
addTimespans(newTimespans: Array<number>, labels: Array<string>) {
for (let ii = 0, l = newTimespans.length; ii < l; ii += 2) {
addTimeAnnotations(durationsInMs: Array<number>, labels: Array<string>) {
for (let ii = 0, l = durationsInMs.length; ii < l; ii += 2) {
const label = labels[ii / 2];
this.addTimespan(label, newTimespans[ii + 1] - newTimespans[ii], label);
this.addTimespan(
label,
durationsInMs[ii + 1] - durationsInMs[ii],
label,
);
}
},