mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39830 ## Changelog: [Internal] - Add `QuickPerformanceLogger.isMarkerOn` API, which allows to check whether the given QPL marker is going to be sent to the server or not (the latter may happen due to e.g. downsampling). This allows to avoid some extra unneeded overhead when logging QPL events in some heavily sampled scenarios. Reviewed By: rubennorte Differential Revision: D49949527 fbshipit-source-id: 9d7f93beee45d498c799a94b16cd7c68ec1a9340
156 lines
4.0 KiB
JavaScript
156 lines
4.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 = Partial<{
|
|
string: ?{[string]: string, ...},
|
|
int: ?{[string]: number, ...},
|
|
double: ?{[string]: number, ...},
|
|
bool: ?{[string]: boolean, ...},
|
|
string_array: ?{[string]: $ReadOnlyArray<string>, ...},
|
|
int_array: ?{[string]: $ReadOnlyArray<number>, ...},
|
|
double_array: ?{[string]: $ReadOnlyArray<number>, ...},
|
|
bool_array: ?{[string]: $ReadOnlyArray<boolean>, ...},
|
|
}>;
|
|
|
|
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',
|
|
'int',
|
|
'double',
|
|
'bool',
|
|
'string_array',
|
|
'int_array',
|
|
'double_array',
|
|
'bool_array',
|
|
]) {
|
|
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);
|
|
}
|
|
},
|
|
|
|
// Checks whether the given QPL marker is going to be sent to server or not
|
|
// (the latter may be the case due to e.g. downsampling).
|
|
// Note that markerStart is expected to have been already called at this point.
|
|
isMarkerOn(
|
|
markerId: number,
|
|
instanceKey?: number = DUMMY_INSTANCE_KEY,
|
|
): boolean {
|
|
if (global.nativeQPLIsMarkerOn) {
|
|
return global.nativeQPLIsMarkerOn(markerId, instanceKey);
|
|
}
|
|
return true;
|
|
},
|
|
|
|
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;
|