Skip to content

Commit efcc798

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Make processingStartTime and processingEndTime optional (facebook#51390)
Summary: Pull Request resolved: facebook#51390 # Changelog: [Internal] Ideally, these should not be optional, but these values are set at runtime. Assertions added to validate that these values are set before reporting to `PerformanceEntryReporter`. Reviewed By: rshest Differential Revision: D74811439 fbshipit-source-id: 5e95931848263a58d977c07bac0eb18e53b91140
1 parent 935cba2 commit efcc798

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

packages/react-native/ReactCommon/react/renderer/observers/events/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ add_library(react_renderer_observers_events OBJECT ${react_renderer_observers_ev
1313

1414
target_include_directories(react_renderer_observers_events PUBLIC ${REACT_COMMON_DIR})
1515
target_link_libraries(react_renderer_observers_events
16+
react_debug
1617
react_performance_timeline
1718
react_timing
1819
react_renderer_core

packages/react-native/ReactCommon/react/renderer/observers/events/EventPerformanceLogger.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
#include "EventPerformanceLogger.h"
99

10+
#include <react/debug/react_native_assert.h>
1011
#include <react/featureflags/ReactNativeFeatureFlags.h>
1112
#include <react/timing/primitives.h>
13+
1214
#include <unordered_map>
1315

1416
namespace facebook::react {
@@ -127,7 +129,7 @@ EventTag EventPerformanceLogger::onEventStart(
127129
{
128130
std::lock_guard lock(eventsInFlightMutex_);
129131
eventsInFlight_.emplace(
130-
eventTag, EventEntry{reportedName, target, timeStamp, 0.0});
132+
eventTag, EventEntry{reportedName, target, timeStamp});
131133
}
132134
return eventTag;
133135
}
@@ -163,6 +165,9 @@ void EventPerformanceLogger::onEventProcessingEnd(EventTag tag) {
163165
}
164166

165167
auto& entry = it->second;
168+
react_native_assert(
169+
entry.processingStartTime.has_value() &&
170+
"Attempting to set processingEndTime while processingStartTime is not set.");
166171
entry.processingEndTime = timeStamp;
167172
}
168173
}
@@ -188,12 +193,18 @@ void EventPerformanceLogger::dispatchPendingEventTimingEntries(
188193
entry.isWaitingForMount = true;
189194
++it;
190195
} else {
196+
react_native_assert(
197+
entry.processingStartTime.has_value() &&
198+
"Attempted to report PerformanceEventTiming, which did not have processingStartTime defined.");
199+
react_native_assert(
200+
entry.processingEndTime.has_value() &&
201+
"Attempted to report PerformanceEventTiming, which did not have processingEndTime defined.");
191202
performanceEntryReporter->reportEvent(
192203
std::string(entry.name),
193204
entry.startTime,
194205
performanceEntryReporter->getCurrentTimeStamp() - entry.startTime,
195-
entry.processingStartTime,
196-
entry.processingEndTime,
206+
entry.processingStartTime.value(),
207+
entry.processingEndTime.value(),
197208
entry.interactionId);
198209
it = eventsInFlight_.erase(it);
199210
}
@@ -214,12 +225,18 @@ void EventPerformanceLogger::shadowTreeDidMount(
214225
const auto& entry = it->second;
215226
if (entry.isWaitingForMount &&
216227
isTargetInRootShadowNode(entry.target, rootShadowNode)) {
228+
react_native_assert(
229+
entry.processingStartTime.has_value() &&
230+
"Attempted to report PerformanceEventTiming, which did not have processingStartTime defined.");
231+
react_native_assert(
232+
entry.processingEndTime.has_value() &&
233+
"Attempted to report PerformanceEventTiming, which did not have processingEndTime defined.");
217234
performanceEntryReporter->reportEvent(
218235
std::string(entry.name),
219236
entry.startTime,
220237
mountTime - entry.startTime,
221-
entry.processingStartTime,
222-
entry.processingEndTime,
238+
entry.processingStartTime.value(),
239+
entry.processingEndTime.value(),
223240
entry.interactionId);
224241
it = eventsInFlight_.erase(it);
225242
} else {

packages/react-native/ReactCommon/react/renderer/observers/events/EventPerformanceLogger.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <react/renderer/core/EventLogger.h>
1212
#include <react/renderer/runtimescheduler/RuntimeSchedulerEventTimingDelegate.h>
1313
#include <react/renderer/uimanager/UIManagerMountHook.h>
14+
1415
#include <memory>
1516
#include <mutex>
1617
#include <optional>
@@ -52,9 +53,9 @@ class EventPerformanceLogger : public EventLogger,
5253
struct EventEntry {
5354
std::string_view name;
5455
SharedEventTarget target{nullptr};
55-
DOMHighResTimeStamp startTime{0.0};
56-
DOMHighResTimeStamp processingStartTime{0.0};
57-
DOMHighResTimeStamp processingEndTime{0.0};
56+
DOMHighResTimeStamp startTime;
57+
std::optional<DOMHighResTimeStamp> processingStartTime;
58+
std::optional<DOMHighResTimeStamp> processingEndTime;
5859

5960
bool isWaitingForMount{false};
6061

@@ -63,7 +64,7 @@ class EventPerformanceLogger : public EventLogger,
6364
PerformanceEntryInteractionId interactionId{0};
6465

6566
bool isWaitingForDispatch() {
66-
return processingEndTime == 0.0;
67+
return !processingEndTime.has_value();
6768
}
6869
};
6970

0 commit comments

Comments
 (0)