Allow specifying custom timestamps in performance logger spans

Summary: Changelog: [internal] Allow specifying custom timestamps in {start/stop}Timestamp in performance loggers

Reviewed By: lunaleaps

Differential Revision: D24474631

fbshipit-source-id: 48d8e69af8ba79ef1638cd5d03bac33af84f7881
This commit is contained in:
Rubén Norte 2020-10-23 07:12:13 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 5c498e3d6b
Коммит 74fc285c58
2 изменённых файлов: 36 добавлений и 10 удалений

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

@ -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,
);

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

@ -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);