Add systrace for event type when calling RCTDeviceEventEmitter (#39085)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/39085

Adding arguments in systrace for event emitter event types. This is helpful to understand why sometimes JS render is triggered from native side.

Changelog:
[Internal] - Add event type information from native to js event emitter calls

Reviewed By: rshest

Differential Revision: D48448904

fbshipit-source-id: cbb4b86e781384d56205fec23931cd773e4a58a8
This commit is contained in:
Xin Chen
2023-08-21 13:25:31 -07:00
committed by Facebook GitHub Bot
parent 606a92f0b3
commit 80685d52b8
@@ -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<RCTDeviceEventDefinitions> =
new EventEmitter();
class RCTDeviceEventEmitter extends EventEmitter<RCTDeviceEventDefinitions> {
// Add systrace to RCTDeviceEventEmitter.emit method for debugging
emit<TEvent: $Keys<RCTDeviceEventDefinitions>>(
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<RCTDeviceEventDefinitions>);
export default (instance: IEventEmitter<RCTDeviceEventDefinitions>);