react-native-performance
Version:
Measure React Native performance
66 lines (56 loc) • 1.66 kB
text/typescript
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
import {
PerformanceReactNativeMark,
PerformanceMetric,
} from './performance-entry';
import {
installResourceLogger,
uninstallResourceLogger,
} from './resource-logger';
import { PerformanceObserver, addEntry, performance } from './instance';
declare const global: {
__turboModuleProxy: null | {};
RN$Bridgeless?: boolean;
};
const isTurboModuleEnabled =
global.RN$Bridgeless || global.__turboModuleProxy != null;
const RNPerformanceManager = isTurboModuleEnabled
? require('./NativeRNPerformanceManager').default
: NativeModules.RNPerformanceManager;
if (Platform.OS === 'android' || RNPerformanceManager) {
const emitter = new NativeEventEmitter(RNPerformanceManager);
emitter.addListener('mark', (data) => {
addEntry(
new PerformanceReactNativeMark(data.name, data.startTime, data.detail)
);
});
emitter.addListener('metric', (data) => {
addEntry(
new PerformanceMetric(data.name, {
startTime: data.startTime,
value: data.value,
detail: data.detail,
})
);
});
}
export default performance;
export type Performance = typeof performance;
export const setResourceLoggingEnabled = (enabled = true) => {
if (enabled) {
//@ts-ignore
installResourceLogger(globalThis, performance, addEntry);
} else {
uninstallResourceLogger(globalThis);
}
};
export { PerformanceObserver };
export type {
EntryType,
PerformanceMark,
PerformanceMeasure,
PerformanceMetric,
PerformanceEntry,
PerformanceReactNativeMark,
PerformanceResourceTiming,
} from './performance-entry';