Files
react-native/ReactCommon/react/renderer/core/EventLogger.h
T
Ruslan Shestopalyuk 09ad0cc0c6 Implement reporting of events from native side to WebPerformance API (#35768)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35768

Changelog: [Internal]

This implements native side mechanics for reporting user events timing to JS  (PerformanceObserver API).

See the standard for more details: https://www.w3.org/TR/event-timing/

The events are only logged when there are any active subscriptions (via `PerformanceObserver.observe`), also we only log "discrete events" (i.e. no likes of mouse move), so the overhead is non-existing.

There are two main metrics of interest for an event lifecycle:
* Time the event is spent in the queue, i.e. the time between it's created and dispatched
* Time that is spend in the event handler on the JS side (event dispatch), or processing time

Both of these are measured, and the corresponding fields are populated.

Reviewed By: sammy-SC

Differential Revision: D42294947

fbshipit-source-id: 4fd7938c04b942400befa4057d4929fb2763cee1
2023-01-03 11:11:37 -08:00

45 lines
1.1 KiB
C++

/*
* 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.
*/
#pragma once
namespace facebook::react {
using EventTag = unsigned int;
/*
* Interface for logging discrete events (such as pointerenter/leave),
* which can be used for implementing W3C Event Timing API standard,
* see https://www.w3.org/TR/event-timing
*/
class EventLogger {
public:
virtual ~EventLogger() = default;
/*
* Called when an event is first created, returns and unique tag for this
* event, which can be used to log further event processing stages.
*/
virtual EventTag onEventStart(const char *name) = 0;
/*
* Called when event starts getting dispatched (processed by the handlers, if
* any)
*/
virtual void onEventDispatch(EventTag tag) = 0;
/*
* Called when event finishes being dispatched
*/
virtual void onEventEnd(EventTag tag) = 0;
};
void setEventLogger(EventLogger *eventLogger);
EventLogger *getEventLogger();
} // namespace facebook::react