Update PerformanceLogger to nullable timespans, points, extras

Summary: Changelog: [Internal][Fixed] - When we close performance loggers (D23845307 (https://github.com/facebook/react-native/commit/aebb97b9c64a8d84cf852ae8efc5ef28b36da610)) we cannot rely that a timespan/point/extra will be in perf logger. Update types to reflect that.

Reviewed By: rubennorte

Differential Revision: D23907741

fbshipit-source-id: 63673aa69cd8c76253e4fee3463e37c86265cf7b
This commit is contained in:
Luna Wei
2020-09-28 10:53:55 -07:00
committed by Facebook GitHub Bot
parent 35b8f76c9e
commit b85b4f46af
3 changed files with 23 additions and 21 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ class PerformanceOverlay extends React.Component<{...}> {
const items = [];
for (const key in perfLogs) {
if (perfLogs[key].totalTime) {
if (perfLogs[key]?.totalTime) {
const unit = key === 'BundleSize' ? 'b' : 'ms';
items.push(
<View style={styles.row} key={key}>
@@ -54,12 +54,12 @@ describe('PerformanceLogger', () => {
perfLogger.startTimespan(TIMESPAN_1);
perfLogger.close();
let timespan = perfLogger.getTimespans()[TIMESPAN_1];
expect(timespan.endTime).toBeUndefined();
expect(timespan.totalTime).toBeUndefined();
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();
expect(timespan?.endTime).toBeUndefined();
expect(timespan?.totalTime).toBeUndefined();
});
});
@@ -208,10 +208,10 @@ describe('PerformanceLogger', () => {
let perfLogger = createPerformanceLogger();
perfLogger.startTimespan(TIMESPAN_1, POINT_ANNOTATION_1);
perfLogger.stopTimespan(TIMESPAN_1, POINT_ANNOTATION_2);
expect(perfLogger.getTimespans()[TIMESPAN_1].startExtras).toEqual(
expect(perfLogger.getTimespans()[TIMESPAN_1]?.startExtras).toEqual(
POINT_ANNOTATION_1,
);
expect(perfLogger.getTimespans()[TIMESPAN_1].endExtras).toEqual(
expect(perfLogger.getTimespans()[TIMESPAN_1]?.endExtras).toEqual(
POINT_ANNOTATION_2,
);
});
+16 -14
View File
@@ -41,15 +41,15 @@ export interface IPerformanceLogger {
clearCompleted(): void;
close(): void;
currentTimestamp(): number;
getExtras(): {[key: string]: ExtraValue, ...};
getPoints(): {[key: string]: number, ...};
getPointExtras(): {[key: string]: Extras, ...};
getTimespans(): {[key: string]: Timespan, ...};
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;
removeExtra(key: string): ?ExtraValue;
setExtra(key: string, value: ExtraValue): void;
startTimespan(key: string, extras?: Extras): void;
stopTimespan(key: string, extras?: Extras): void;
@@ -60,10 +60,10 @@ const _cookies: {[key: string]: number, ...} = {};
const PRINT_TO_CONSOLE: false = false; // Type as false to prevent accidentally committing `true`;
class PerformanceLogger implements IPerformanceLogger {
_timespans: {[key: string]: Timespan} = {};
_extras: {[key: string]: ExtraValue} = {};
_points: {[key: string]: number} = {};
_pointExtras: {[key: string]: Extras, ...} = {};
_timespans: {[key: string]: ?Timespan} = {};
_extras: {[key: string]: ?ExtraValue} = {};
_points: {[key: string]: ?number} = {};
_pointExtras: {[key: string]: ?Extras, ...} = {};
_closed: boolean = false;
addTimespan(
@@ -109,7 +109,7 @@ class PerformanceLogger implements IPerformanceLogger {
clearCompleted() {
for (const key in this._timespans) {
if (this._timespans[key].totalTime != null) {
if (this._timespans[key]?.totalTime != null) {
delete this._timespans[key];
}
}
@@ -156,7 +156,7 @@ class PerformanceLogger implements IPerformanceLogger {
if (PRINT_TO_CONSOLE) {
// log timespans
for (const key in this._timespans) {
if (this._timespans[key].totalTime != null) {
if (this._timespans[key]?.totalTime != null) {
infoLog(key + ': ' + this._timespans[key].totalTime + 'ms');
}
}
@@ -166,7 +166,9 @@ class PerformanceLogger implements IPerformanceLogger {
// log points
for (const key in this._points) {
infoLog(key + ': ' + this._points[key] + 'ms');
if (this._points[key] != null) {
infoLog(key + ': ' + this._points[key] + 'ms');
}
}
}
}
@@ -178,7 +180,7 @@ class PerformanceLogger implements IPerformanceLogger {
}
return;
}
if (this._points[key]) {
if (this._points[key] != null) {
if (PRINT_TO_CONSOLE && __DEV__) {
infoLog(
'PerformanceLogger: Attempting to mark a point that has been already logged ',
@@ -193,7 +195,7 @@ class PerformanceLogger implements IPerformanceLogger {
}
}
removeExtra(key: string): ExtraValue | void {
removeExtra(key: string): ?ExtraValue {
const value = this._extras[key];
delete this._extras[key];
return value;