mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
a64319a2b2
Summary: [Changelog][Internal] Adds API definition for [Performance.mark](https://www.w3.org/TR/user-timing/#mark-method) support. This is a bare bone implementation, that just logs events on the native side. The next step is the native logic for queuing, flushing etc. Note that here I route both JS and native marks to native for now, for simplicity sake - ultimately this may not be what we want, as it may be more efficient to process marks, logged from JS, on the JS side. Reviewed By: rubennorte Differential Revision: D41472148 fbshipit-source-id: bdf2b182b8472a71a5500235849bca5af1c2f360
67 lines
1.7 KiB
JavaScript
67 lines
1.7 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
|
|
*/
|
|
|
|
import type {HighResTimeStamp} from './PerformanceObserver';
|
|
|
|
import NativePerformanceObserver, {
|
|
RawPerformanceEntryTypeValues,
|
|
} from './NativePerformanceObserver';
|
|
import {PerformanceEntry} from './PerformanceObserver';
|
|
|
|
type DetailType = mixed;
|
|
|
|
export type PerformanceMarkOptions = {
|
|
detail?: DetailType,
|
|
startTime?: HighResTimeStamp,
|
|
};
|
|
|
|
function getCurrentTimeStamp(): HighResTimeStamp {
|
|
return global.nativePerformanceNow?.() ?? Date.now();
|
|
}
|
|
|
|
export class PerformanceMark extends PerformanceEntry {
|
|
detail: DetailType;
|
|
|
|
constructor(markName: string, markOptions?: PerformanceMarkOptions) {
|
|
let startTime = markOptions?.startTime ?? getCurrentTimeStamp();
|
|
super({name: markName, entryType: 'mark', startTime, duration: 0});
|
|
if (markOptions !== undefined) {
|
|
this.detail = markOptions.detail;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Partial implementation of the Performance interface for RN,
|
|
* corresponding to the standard in
|
|
* https://www.w3.org/TR/user-timing/#extensions-performance-interface
|
|
*/
|
|
export default class Performance {
|
|
mark(
|
|
markName: string,
|
|
markOptions?: PerformanceMarkOptions,
|
|
): PerformanceMark {
|
|
const mark = new PerformanceMark(markName, markOptions);
|
|
NativePerformanceObserver?.logEntryForDebug?.({
|
|
name: markName,
|
|
entryType: RawPerformanceEntryTypeValues.MARK,
|
|
startTime: mark.startTime,
|
|
duration: mark.duration,
|
|
});
|
|
return mark;
|
|
}
|
|
|
|
clearMarks(markName?: string): void {}
|
|
|
|
now(): HighResTimeStamp {
|
|
return getCurrentTimeStamp();
|
|
}
|
|
}
|