diff --git a/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js b/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js index 25698329188..d53df915597 100644 --- a/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js +++ b/packages/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js @@ -10,6 +10,7 @@ import type {IEventEmitter} from '../vendor/emitter/EventEmitter'; +import {beginEvent, endEvent} from '../Performance/Systrace'; import EventEmitter from '../vendor/emitter/EventEmitter'; // FIXME: use typed events @@ -21,12 +22,22 @@ type RCTDeviceEventDefinitions = $FlowFixMe; * * NativeModules that emit events should instead subclass `NativeEventEmitter`. */ -const RCTDeviceEventEmitter: IEventEmitter = - new EventEmitter(); +class RCTDeviceEventEmitter extends EventEmitter { + // Add systrace to RCTDeviceEventEmitter.emit method for debugging + emit>( + eventType: TEvent, + ...args: RCTDeviceEventDefinitions[TEvent] + ): void { + beginEvent(() => `RCTDeviceEventEmitter.emit#${eventType}`); + super.emit(eventType, ...args); + endEvent(); + } +} +const instance = new RCTDeviceEventEmitter(); Object.defineProperty(global, '__rctDeviceEventEmitter', { configurable: true, - value: RCTDeviceEventEmitter, + value: instance, }); -export default (RCTDeviceEventEmitter: IEventEmitter); +export default (instance: IEventEmitter);