Files
react-native/Libraries/Performance/QuickPerformanceLogger.js
T
Dmytro Voronkevych c565a770eb Migrating all qpl.markerAnnotate call sites to the new signature
Summary:
As part of unifying JS QPL interface, I'm bringing markerAnnotate to the parity with Web version.

At the moment it supports only string annotations, but I'm adding support for ints, arrays of ints, arrays of strings, etc.

## Changelog:
[Internal] [Changed] - Refactored markerAnnotateWithMap -> markerAnnotate

Reviewed By: eddyerburgh

Differential Revision: D40796535

fbshipit-source-id: 9831e353036835b97bb7b2f60085016034c04269
2022-11-01 12:25:00 -07:00

127 lines
3.0 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
*/
'use strict';
const AUTO_SET_TIMESTAMP = -1;
const DUMMY_INSTANCE_KEY = 0;
// Defines map of annotations
// Use as following:
// {string: {key1: value1, key2: value2}}
export type AnnotationsMap = $Shape<{
string: ?{[string]: string, ...},
}>;
const QuickPerformanceLogger = {
markerStart(
markerId: number,
instanceKey: number = DUMMY_INSTANCE_KEY,
timestamp: number = AUTO_SET_TIMESTAMP,
): void {
if (global.nativeQPLMarkerStart) {
global.nativeQPLMarkerStart(markerId, instanceKey, timestamp);
}
},
markerEnd(
markerId: number,
actionId: number,
instanceKey: number = DUMMY_INSTANCE_KEY,
timestamp: number = AUTO_SET_TIMESTAMP,
): void {
if (global.nativeQPLMarkerEnd) {
global.nativeQPLMarkerEnd(markerId, instanceKey, actionId, timestamp);
}
},
markerTag(
markerId: number,
tag: string,
instanceKey: number = DUMMY_INSTANCE_KEY,
): void {
if (global.nativeQPLMarkerTag) {
global.nativeQPLMarkerTag(markerId, instanceKey, tag);
}
},
markerAnnotate(
markerId: number,
annotations: AnnotationsMap,
instanceKey: number = DUMMY_INSTANCE_KEY,
): void {
if (global.nativeQPLMarkerAnnotateWithMap) {
global.nativeQPLMarkerAnnotateWithMap(markerId, annotations, instanceKey);
} else if (global.nativeQPLMarkerAnnotate) {
for (const type of ['string']) {
const keyValsOfType = annotations[type];
if (keyValsOfType != null) {
for (const annotationKey of Object.keys(keyValsOfType)) {
global.nativeQPLMarkerAnnotate(
markerId,
instanceKey,
annotationKey,
keyValsOfType[annotationKey].toString(),
);
}
}
}
}
},
markerCancel(
markerId: number,
instanceKey?: number = DUMMY_INSTANCE_KEY,
): void {
// $FlowFixMe[object-this-reference]
this.markerDrop(markerId, instanceKey);
},
markerPoint(
markerId: number,
name: string,
instanceKey: number = DUMMY_INSTANCE_KEY,
timestamp: number = AUTO_SET_TIMESTAMP,
data: ?string = null,
): void {
if (global.nativeQPLMarkerPoint) {
global.nativeQPLMarkerPoint(markerId, name, instanceKey, timestamp, data);
}
},
markerDrop(
markerId: number,
instanceKey?: number = DUMMY_INSTANCE_KEY,
): void {
if (global.nativeQPLMarkerDrop) {
global.nativeQPLMarkerDrop(markerId, instanceKey);
}
},
markEvent(
markerId: number,
type: string,
annotations: ?AnnotationsMap = null,
): void {
if (global.nativeQPLMarkEvent) {
global.nativeQPLMarkEvent(markerId, type, annotations);
}
},
currentTimestamp(): number {
if (global.nativeQPLTimestamp) {
return global.nativeQPLTimestamp();
}
return 0;
},
};
module.exports = QuickPerformanceLogger;