mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add extras to timespan and points in performance logger
Summary: Changelog: [Internal][Added] Added point-level extras to performance logger Reviewed By: lunaleaps, rubennorte Differential Revision: D23730275 fbshipit-source-id: 285c5d7ac769bd109df7ce0294da024401edf7d3
This commit is contained in:
committed by
Facebook GitHub Bot
parent
3f85b83653
commit
22b5f32f74
@@ -21,6 +21,8 @@ const EXTRA_VALUE_2 = '<extra_value_2>';
|
||||
const POINT = '<point>';
|
||||
const POINT_TIMESTAMP = 99;
|
||||
const POINT_TIMESTAMP_2 = 999;
|
||||
const POINT_ANNOTATION_1 = {extra: 'value1'};
|
||||
const POINT_ANNOTATION_2 = {extra: 'value2'};
|
||||
|
||||
describe('PerformanceLogger', () => {
|
||||
beforeEach(() => {
|
||||
@@ -167,4 +169,24 @@ describe('PerformanceLogger', () => {
|
||||
checkLogger(localPerformanceLogger2, true);
|
||||
checkLogger(GlobalPerformanceLogger, true);
|
||||
});
|
||||
|
||||
it('records extras for a timespan', () => {
|
||||
let perfLogger = createPerformanceLogger();
|
||||
perfLogger.startTimespan(TIMESPAN_1, POINT_ANNOTATION_1);
|
||||
perfLogger.stopTimespan(TIMESPAN_1, POINT_ANNOTATION_2);
|
||||
expect(perfLogger.getTimespans()[TIMESPAN_1].startExtras).toEqual(
|
||||
POINT_ANNOTATION_1,
|
||||
);
|
||||
expect(perfLogger.getTimespans()[TIMESPAN_1].endExtras).toEqual(
|
||||
POINT_ANNOTATION_2,
|
||||
);
|
||||
});
|
||||
|
||||
it('records extras for a point', () => {
|
||||
let perfLogger = createPerformanceLogger();
|
||||
perfLogger.markPoint(POINT, POINT_TIMESTAMP, POINT_ANNOTATION_1);
|
||||
|
||||
expect(Object.keys(perfLogger.getPointExtras())).toEqual([POINT]);
|
||||
expect(perfLogger.getPointExtras()[POINT]).toEqual(POINT_ANNOTATION_1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,15 +20,25 @@ type Timespan = {
|
||||
startTime: number,
|
||||
endTime?: number,
|
||||
totalTime?: number,
|
||||
startExtras?: Extras,
|
||||
endExtras?: Extras,
|
||||
};
|
||||
|
||||
// Extra values should be serializable primitives
|
||||
type ExtraValue = number | string | boolean;
|
||||
|
||||
type Extras = {[key: string]: ExtraValue};
|
||||
|
||||
export interface IPerformanceLogger {
|
||||
addTimespan(key: string, startTime: number, endTime: number): void;
|
||||
startTimespan(key: string): void;
|
||||
stopTimespan(key: string): void;
|
||||
addTimespan(
|
||||
key: string,
|
||||
startTime: number,
|
||||
endTime: number,
|
||||
startExtras?: Extras,
|
||||
endExtras?: Extras,
|
||||
): void;
|
||||
startTimespan(key: string, extras?: Extras): void;
|
||||
stopTimespan(key: string, extras?: Extras): void;
|
||||
clear(): void;
|
||||
clearCompleted(): void;
|
||||
currentTimestamp(): number;
|
||||
@@ -37,8 +47,9 @@ export interface IPerformanceLogger {
|
||||
setExtra(key: string, value: ExtraValue): void;
|
||||
getExtras(): {[key: string]: ExtraValue, ...};
|
||||
removeExtra(key: string): ExtraValue | void;
|
||||
markPoint(key: string, timestamp?: number): void;
|
||||
markPoint(key: string, timestamp?: number, extras?: Extras): void;
|
||||
getPoints(): {[key: string]: number, ...};
|
||||
getPointExtras(): {[key: string]: Extras, ...};
|
||||
logEverything(): void;
|
||||
}
|
||||
|
||||
@@ -50,8 +61,15 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
_timespans: {[key: string]: Timespan} = {};
|
||||
_extras: {[key: string]: ExtraValue} = {};
|
||||
_points: {[key: string]: number} = {};
|
||||
_pointExtras: {[key: string]: Extras, ...} = {};
|
||||
|
||||
addTimespan(key: string, startTime: number, endTime: number) {
|
||||
addTimespan(
|
||||
key: string,
|
||||
startTime: number,
|
||||
endTime: number,
|
||||
startExtras?: Extras,
|
||||
endExtras?: Extras,
|
||||
) {
|
||||
if (this._timespans[key]) {
|
||||
if (PRINT_TO_CONSOLE && __DEV__) {
|
||||
infoLog(
|
||||
@@ -66,10 +84,12 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
startTime,
|
||||
endTime,
|
||||
totalTime: endTime - (startTime || 0),
|
||||
startExtras,
|
||||
endExtras,
|
||||
};
|
||||
}
|
||||
|
||||
startTimespan(key: string) {
|
||||
startTimespan(key: string, extras?: Extras) {
|
||||
if (this._timespans[key]) {
|
||||
if (PRINT_TO_CONSOLE && __DEV__) {
|
||||
infoLog(
|
||||
@@ -82,6 +102,7 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
|
||||
this._timespans[key] = {
|
||||
startTime: performanceNow(),
|
||||
startExtras: extras,
|
||||
};
|
||||
_cookies[key] = Systrace.beginAsyncEvent(key);
|
||||
if (PRINT_TO_CONSOLE) {
|
||||
@@ -89,7 +110,7 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
}
|
||||
}
|
||||
|
||||
stopTimespan(key: string) {
|
||||
stopTimespan(key: string, extras?: Extras) {
|
||||
const timespan = this._timespans[key];
|
||||
if (!timespan || timespan.startTime == null) {
|
||||
if (PRINT_TO_CONSOLE && __DEV__) {
|
||||
@@ -110,6 +131,7 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
return;
|
||||
}
|
||||
|
||||
timespan.endExtras = extras;
|
||||
timespan.endTime = performanceNow();
|
||||
timespan.totalTime = timespan.endTime - (timespan.startTime || 0);
|
||||
if (PRINT_TO_CONSOLE) {
|
||||
@@ -179,7 +201,7 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
return value;
|
||||
}
|
||||
|
||||
markPoint(key: string, timestamp?: number) {
|
||||
markPoint(key: string, timestamp?: number, extras?: Extras) {
|
||||
if (this._points[key]) {
|
||||
if (PRINT_TO_CONSOLE && __DEV__) {
|
||||
infoLog(
|
||||
@@ -190,12 +212,19 @@ class PerformanceLogger implements IPerformanceLogger {
|
||||
return;
|
||||
}
|
||||
this._points[key] = timestamp ?? performanceNow();
|
||||
if (extras) {
|
||||
this._pointExtras[key] = extras;
|
||||
}
|
||||
}
|
||||
|
||||
getPoints() {
|
||||
return this._points;
|
||||
}
|
||||
|
||||
getPointExtras() {
|
||||
return this._pointExtras;
|
||||
}
|
||||
|
||||
logEverything() {
|
||||
if (PRINT_TO_CONSOLE) {
|
||||
// log timespans
|
||||
|
||||
Reference in New Issue
Block a user