mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
f8a2dd74e8
Summary: [Changelog][Internal] This is to prevent an accidental use of PerformanceObserver while it's still a work in progress. PerformanceObserver is also moved into a dedicated folder, `Libraries/WebPerformance`. Reviewed By: rubennorte Differential Revision: D40978749 fbshipit-source-id: 09645a95bed72902870ebc00c1b4a3d81ab4c829
125 lines
2.9 KiB
JavaScript
125 lines
2.9 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';
|
|
|
|
export type Timestamp = number;
|
|
export type PerformanceEntryType = 'event';
|
|
|
|
export class PerformanceEntry {
|
|
name: string;
|
|
entryType: PerformanceEntryType;
|
|
startTime: Timestamp;
|
|
duration: number;
|
|
|
|
// For "event" entries only:
|
|
processingStart: ?Timestamp;
|
|
processingEnd: ?Timestamp;
|
|
interactionId: ?number;
|
|
|
|
// $FlowIgnore: Flow(unclear-type)
|
|
toJSON(): Object {
|
|
return {
|
|
name: this.name,
|
|
entryType: this.entryType,
|
|
startTime: this.startTime,
|
|
duration: this.duration,
|
|
};
|
|
}
|
|
}
|
|
|
|
export type PerformanceEntryList = $ReadOnlyArray<PerformanceEntry>;
|
|
|
|
export class PerformanceObserverEntryList {
|
|
_entries: PerformanceEntryList;
|
|
|
|
constructor(entries: PerformanceEntryList) {
|
|
this._entries = entries;
|
|
}
|
|
|
|
getEntries(): PerformanceEntryList {
|
|
return this._entries;
|
|
}
|
|
|
|
getEntriesByType(type: PerformanceEntryType): PerformanceEntryList {
|
|
return this._entries.filter(entry => entry.entryType === type);
|
|
}
|
|
|
|
getEntriesByName(
|
|
name: string,
|
|
type?: PerformanceEntryType,
|
|
): PerformanceEntryList {
|
|
if (type === undefined) {
|
|
return this._entries.filter(entry => entry.name === name);
|
|
} else {
|
|
return this._entries.filter(
|
|
entry => entry.name === name && entry.entryType === type,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
export type PerformanceObserverCallback = (
|
|
list: PerformanceObserverEntryList,
|
|
observer: PerformanceObserver,
|
|
) => void;
|
|
|
|
export type PerformanceObserverInit =
|
|
| {
|
|
entryTypes: PerformanceEntryType[],
|
|
buffered?: boolean,
|
|
}
|
|
| {
|
|
type: PerformanceEntryType,
|
|
buffered?: boolean,
|
|
};
|
|
|
|
/**
|
|
* Implementation of the PerformanceObserver interface for RN,
|
|
* corresponding to the standard in https://www.w3.org/TR/performance-timeline/
|
|
*
|
|
* @example
|
|
* const observer = new PerformanceObserver((list, _observer) => {
|
|
* const entries = list.getEntries();
|
|
* entries.forEach(entry => {
|
|
* reportEvent({
|
|
* eventName: entry.name,
|
|
* startTime: entry.startTime,
|
|
* endTime: entry.startTime + entry.duration,
|
|
* processingStart: entry.processingStart,
|
|
* processingEnd: entry.processingEnd,
|
|
* interactionId: entry.interactionId,
|
|
* });
|
|
* });
|
|
* });
|
|
* observer.observe({ type: "event" });
|
|
*/
|
|
export default class PerformanceObserver {
|
|
_callback: PerformanceObserverCallback;
|
|
|
|
constructor(callback: PerformanceObserverCallback) {
|
|
this._callback = callback;
|
|
}
|
|
|
|
observe(options: PerformanceObserverInit) {
|
|
console.log('PerformanceObserver: started observing');
|
|
}
|
|
|
|
disconnect(): void {
|
|
console.log('PerformanceObserver: stopped observing');
|
|
}
|
|
|
|
takeRecords(): PerformanceEntryList {
|
|
return [];
|
|
}
|
|
|
|
static supportedEntryTypes: PerformanceEntryType[] = ['event'];
|
|
}
|