react-native 0.84.0-nightly-20251107-f8198f662 → 0.84.0-nightly-20251109-b7012ba92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Blob/RCTBlobPlugins.mm +14 -14
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Image/RCTImagePlugins.h +1 -0
- package/Libraries/Image/RCTImagePlugins.mm +30 -17
- package/Libraries/LinkingIOS/RCTLinkingPlugins.mm +10 -13
- package/Libraries/LogBox/Data/LogBoxData.js +31 -4
- package/Libraries/NativeAnimation/RCTAnimationPlugins.mm +14 -14
- package/Libraries/Network/RCTNetworkPlugins.mm +22 -16
- package/Libraries/PushNotificationIOS/RCTPushNotificationPlugins.mm +10 -13
- package/Libraries/Settings/RCTSettingsPlugins.mm +10 -13
- package/Libraries/Vibration/RCTVibrationPlugins.mm +10 -13
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/CoreModulesPlugins.mm +98 -35
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +4 -5
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutlineDrawable.kt +1 -1
- package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +12 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +8 -1
- package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +1 -0
- package/ReactApple/RCTAnimatedModuleProvider/RCTAnimatedModuleProvider.mm +29 -4
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/jsinspector-modern/HostTarget.h +8 -2
- package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +6 -2
- package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +15 -5
- package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +9 -5
- package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +3 -2
- package/ReactCommon/jsinspector-modern/TracingAgent.cpp +19 -2
- package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +59 -0
- package/ReactCommon/jsinspector-modern/tests/TracingTest.h +20 -7
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +19 -18
- package/ReactCommon/jsinspector-modern/tracing/TraceEvent.h +2 -1
- package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +2 -1
- package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +3 -0
- package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +126 -0
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +113 -77
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +9 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +0 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +3 -3
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +2 -1
- package/ReactCommon/react/runtime/TimerManager.cpp +0 -54
- package/ReactCommon/react/runtime/TimerManager.h +0 -12
- package/package.json +9 -9
- package/sdks/hermes-engine/version.properties +1 -1
- package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "TracingTest.h"
|
|
9
|
+
#include "engines/JsiIntegrationTestHermesEngineAdapter.h"
|
|
10
|
+
|
|
11
|
+
#include <folly/executors/QueuedImmediateExecutor.h>
|
|
12
|
+
#include <jsinspector-modern/InspectorFlags.h>
|
|
13
|
+
#include <react/featureflags/ReactNativeFeatureFlags.h>
|
|
14
|
+
#include <react/networking/NetworkReporter.h>
|
|
15
|
+
|
|
16
|
+
using namespace ::testing;
|
|
17
|
+
|
|
18
|
+
namespace facebook::react::jsinspector_modern {
|
|
19
|
+
|
|
20
|
+
class TracingTest : public TracingTestBase<
|
|
21
|
+
JsiIntegrationTestHermesEngineAdapter,
|
|
22
|
+
folly::QueuedImmediateExecutor> {
|
|
23
|
+
protected:
|
|
24
|
+
TracingTest() : TracingTestBase() {}
|
|
25
|
+
|
|
26
|
+
void SetUp() override {
|
|
27
|
+
JsiIntegrationPortableTestBase::SetUp();
|
|
28
|
+
connect();
|
|
29
|
+
EXPECT_CALL(
|
|
30
|
+
fromPage(),
|
|
31
|
+
onMessage(
|
|
32
|
+
JsonParsed(AllOf(AtJsonPtr("/method", "Debugger.scriptParsed")))))
|
|
33
|
+
.Times(AnyNumber());
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
TEST_F(TracingTest, EnablesSamplingProfilerOnlyCategoryIsSpecified) {
|
|
38
|
+
InSequence s;
|
|
39
|
+
|
|
40
|
+
startTracing({});
|
|
41
|
+
auto allTraceEvents = endTracingAndCollectEvents();
|
|
42
|
+
|
|
43
|
+
EXPECT_THAT(
|
|
44
|
+
allTraceEvents,
|
|
45
|
+
Not(Contains(AllOf(
|
|
46
|
+
AtJsonPtr("/name", "Profile"),
|
|
47
|
+
AtJsonPtr("/cat", "disabled-by-default-v8.cpu_profiler")))));
|
|
48
|
+
|
|
49
|
+
startTracing({tracing::Category::JavaScriptSampling});
|
|
50
|
+
allTraceEvents = endTracingAndCollectEvents();
|
|
51
|
+
|
|
52
|
+
EXPECT_THAT(
|
|
53
|
+
allTraceEvents,
|
|
54
|
+
Contains(AllOf(
|
|
55
|
+
AtJsonPtr("/name", "Profile"),
|
|
56
|
+
AtJsonPtr("/cat", "disabled-by-default-v8.cpu_profiler"))));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
} // namespace facebook::react::jsinspector_modern
|
|
@@ -7,14 +7,16 @@
|
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
|
+
#include "FollyDynamicMatchers.h"
|
|
10
11
|
#include "JsiIntegrationTest.h"
|
|
11
12
|
|
|
13
|
+
#include <fmt/format.h>
|
|
12
14
|
#include <folly/dynamic.h>
|
|
13
15
|
#include <folly/json.h>
|
|
14
16
|
#include <gmock/gmock.h>
|
|
15
|
-
#include <vector>
|
|
16
17
|
|
|
17
|
-
#include
|
|
18
|
+
#include <set>
|
|
19
|
+
#include <vector>
|
|
18
20
|
|
|
19
21
|
namespace facebook::react::jsinspector_modern {
|
|
20
22
|
|
|
@@ -29,17 +31,28 @@ class TracingTestBase : public JsiIntegrationPortableTestBase<EngineAdapter, Exe
|
|
|
29
31
|
/**
|
|
30
32
|
* Helper method to start tracing via Tracing.start CDP command.
|
|
31
33
|
*/
|
|
32
|
-
void startTracing(
|
|
34
|
+
void startTracing(
|
|
35
|
+
const std::set<tracing::Category> &enabledCategories = {
|
|
36
|
+
tracing::Category::HiddenTimeline,
|
|
37
|
+
tracing::Category::JavaScriptSampling,
|
|
38
|
+
tracing::Category::RuntimeExecution,
|
|
39
|
+
tracing::Category::Timeline,
|
|
40
|
+
tracing::Category::UserTiming,
|
|
41
|
+
})
|
|
33
42
|
{
|
|
34
43
|
this->expectMessageFromPage(JsonEq(R"({
|
|
35
44
|
"id": 1,
|
|
36
45
|
"result": {}
|
|
37
46
|
})"));
|
|
38
47
|
|
|
39
|
-
this->toPage_->sendMessage(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
this->toPage_->sendMessage(
|
|
49
|
+
fmt::format(
|
|
50
|
+
R"({{
|
|
51
|
+
"id": 1,
|
|
52
|
+
"method": "Tracing.start",
|
|
53
|
+
"params": {{ "categories": "{0}" }}
|
|
54
|
+
}})",
|
|
55
|
+
tracing::serializeTracingCategories(enabledCategories)));
|
|
43
56
|
}
|
|
44
57
|
|
|
45
58
|
/**
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "PerformanceTracer.h"
|
|
9
9
|
#include "Timing.h"
|
|
10
10
|
#include "TraceEventSerializer.h"
|
|
11
|
+
#include "TracingCategory.h"
|
|
11
12
|
|
|
12
13
|
#include <jsinspector-modern/network/CdpNetwork.h>
|
|
13
14
|
#include <jsinspector-modern/network/HttpUtils.h>
|
|
@@ -138,7 +139,7 @@ std::optional<std::vector<TraceEvent>> PerformanceTracer::stopTracing() {
|
|
|
138
139
|
events.emplace_back(
|
|
139
140
|
TraceEvent{
|
|
140
141
|
.name = "TracingStartedInPage",
|
|
141
|
-
.cat =
|
|
142
|
+
.cat = {Category::HiddenTimeline},
|
|
142
143
|
.ph = 'I',
|
|
143
144
|
.ts = currentTraceStartTime,
|
|
144
145
|
.pid = processId_,
|
|
@@ -149,7 +150,7 @@ std::optional<std::vector<TraceEvent>> PerformanceTracer::stopTracing() {
|
|
|
149
150
|
events.emplace_back(
|
|
150
151
|
TraceEvent{
|
|
151
152
|
.name = "ReactNative-TracingStopped",
|
|
152
|
-
.cat =
|
|
153
|
+
.cat = {Category::HiddenTimeline},
|
|
153
154
|
.ph = 'I',
|
|
154
155
|
.ts = currentTraceEndTime,
|
|
155
156
|
.pid = processId_,
|
|
@@ -409,7 +410,7 @@ void PerformanceTracer::reportFrameTiming(
|
|
|
409
410
|
return TraceEvent{
|
|
410
411
|
.id = profileId,
|
|
411
412
|
.name = "Profile",
|
|
412
|
-
.cat =
|
|
413
|
+
.cat = {Category::JavaScriptSampling},
|
|
413
414
|
.ph = 'P',
|
|
414
415
|
.ts = profileTimestamp,
|
|
415
416
|
.pid = processId,
|
|
@@ -432,7 +433,7 @@ PerformanceTracer::constructRuntimeProfileChunkTraceEvent(
|
|
|
432
433
|
return TraceEvent{
|
|
433
434
|
.id = profileId,
|
|
434
435
|
.name = "ProfileChunk",
|
|
435
|
-
.cat =
|
|
436
|
+
.cat = {Category::JavaScriptSampling},
|
|
436
437
|
.ph = 'P',
|
|
437
438
|
.ts = chunkTimestamp,
|
|
438
439
|
.pid = processId,
|
|
@@ -564,7 +565,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
564
565
|
events.emplace_back(
|
|
565
566
|
TraceEvent{
|
|
566
567
|
.name = "RunTask",
|
|
567
|
-
.cat =
|
|
568
|
+
.cat = {Category::HiddenTimeline},
|
|
568
569
|
.ph = 'X',
|
|
569
570
|
.ts = event.start,
|
|
570
571
|
.pid = processId_,
|
|
@@ -576,7 +577,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
576
577
|
events.emplace_back(
|
|
577
578
|
TraceEvent{
|
|
578
579
|
.name = "RunMicrotasks",
|
|
579
|
-
.cat =
|
|
580
|
+
.cat = {Category::RuntimeExecution},
|
|
580
581
|
.ph = 'X',
|
|
581
582
|
.ts = event.start,
|
|
582
583
|
.pid = processId_,
|
|
@@ -596,7 +597,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
596
597
|
events.emplace_back(
|
|
597
598
|
TraceEvent{
|
|
598
599
|
.name = std::move(event.name),
|
|
599
|
-
.cat =
|
|
600
|
+
.cat = {Category::UserTiming},
|
|
600
601
|
.ph = 'I',
|
|
601
602
|
.ts = event.start,
|
|
602
603
|
.pid = processId_,
|
|
@@ -621,7 +622,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
621
622
|
TraceEvent{
|
|
622
623
|
.id = eventId,
|
|
623
624
|
.name = event.name,
|
|
624
|
-
.cat =
|
|
625
|
+
.cat = {Category::UserTiming},
|
|
625
626
|
.ph = 'b',
|
|
626
627
|
.ts = event.start,
|
|
627
628
|
.pid = processId_,
|
|
@@ -632,7 +633,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
632
633
|
TraceEvent{
|
|
633
634
|
.id = eventId,
|
|
634
635
|
.name = std::move(event.name),
|
|
635
|
-
.cat =
|
|
636
|
+
.cat = {Category::UserTiming},
|
|
636
637
|
.ph = 'e',
|
|
637
638
|
.ts = event.start + event.duration,
|
|
638
639
|
.pid = processId_,
|
|
@@ -672,7 +673,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
672
673
|
events.emplace_back(
|
|
673
674
|
TraceEvent{
|
|
674
675
|
.name = "TimeStamp",
|
|
675
|
-
.cat =
|
|
676
|
+
.cat = {Category::Timeline},
|
|
676
677
|
.ph = 'I',
|
|
677
678
|
.ts = event.createdAt,
|
|
678
679
|
.pid = processId_,
|
|
@@ -710,7 +711,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
710
711
|
events.emplace_back(
|
|
711
712
|
TraceEvent{
|
|
712
713
|
.name = "TimeStamp",
|
|
713
|
-
.cat =
|
|
714
|
+
.cat = {Category::Timeline},
|
|
714
715
|
.ph = 'I',
|
|
715
716
|
.ts = event.createdAt,
|
|
716
717
|
.pid = processId_,
|
|
@@ -730,7 +731,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
730
731
|
events.emplace_back(
|
|
731
732
|
TraceEvent{
|
|
732
733
|
.name = "ResourceSendRequest",
|
|
733
|
-
.cat =
|
|
734
|
+
.cat = {Category::Timeline},
|
|
734
735
|
.ph = 'I',
|
|
735
736
|
.ts = event.start,
|
|
736
737
|
.pid = processId_,
|
|
@@ -756,7 +757,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
756
757
|
events.emplace_back(
|
|
757
758
|
TraceEvent{
|
|
758
759
|
.name = "ResourceReceiveResponse",
|
|
759
|
-
.cat =
|
|
760
|
+
.cat = {Category::Timeline},
|
|
760
761
|
.ph = 'I',
|
|
761
762
|
.ts = event.start,
|
|
762
763
|
.pid = processId_,
|
|
@@ -774,7 +775,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
774
775
|
events.emplace_back(
|
|
775
776
|
TraceEvent{
|
|
776
777
|
.name = "ResourceFinish",
|
|
777
|
-
.cat =
|
|
778
|
+
.cat = {Category::Timeline},
|
|
778
779
|
.ph = 'I',
|
|
779
780
|
.ts = event.start,
|
|
780
781
|
.pid = processId_,
|
|
@@ -790,7 +791,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
790
791
|
events.emplace_back(
|
|
791
792
|
TraceEvent{
|
|
792
793
|
.name = "SetLayerTreeId",
|
|
793
|
-
.cat =
|
|
794
|
+
.cat = {Category::Timeline},
|
|
794
795
|
.ph = 'I',
|
|
795
796
|
.ts = event.start,
|
|
796
797
|
.pid = processId_,
|
|
@@ -806,7 +807,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
806
807
|
events.emplace_back(
|
|
807
808
|
TraceEvent{
|
|
808
809
|
.name = "BeginFrame",
|
|
809
|
-
.cat =
|
|
810
|
+
.cat = {Category::Timeline},
|
|
810
811
|
.ph = 'I',
|
|
811
812
|
.ts = event.start,
|
|
812
813
|
.pid = processId_,
|
|
@@ -822,7 +823,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
822
823
|
events.emplace_back(
|
|
823
824
|
TraceEvent{
|
|
824
825
|
.name = "Commit",
|
|
825
|
-
.cat =
|
|
826
|
+
.cat = {Category::Timeline},
|
|
826
827
|
.ph = 'I',
|
|
827
828
|
.ts = event.start,
|
|
828
829
|
.pid = processId_,
|
|
@@ -838,7 +839,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
838
839
|
events.emplace_back(
|
|
839
840
|
TraceEvent{
|
|
840
841
|
.name = "DrawFrame",
|
|
841
|
-
.cat =
|
|
842
|
+
.cat = {Category::Timeline},
|
|
842
843
|
.ph = 'I',
|
|
843
844
|
.ts = event.start,
|
|
844
845
|
.pid = processId_,
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
|
+
#include <jsinspector-modern/tracing/TracingCategory.h>
|
|
10
11
|
#include <react/timing/primitives.h>
|
|
11
12
|
|
|
12
13
|
#include <folly/dynamic.h>
|
|
@@ -40,7 +41,7 @@ struct TraceEvent {
|
|
|
40
41
|
* A comma separated list of categories for the event, configuring how
|
|
41
42
|
* events are shown in the Trace Viewer UI.
|
|
42
43
|
*/
|
|
43
|
-
|
|
44
|
+
Categories cat;
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
47
|
* The event type. This is a single character which changes depending on the
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include "TraceEventSerializer.h"
|
|
9
9
|
#include "Timing.h"
|
|
10
|
+
#include "TracingCategory.h"
|
|
10
11
|
|
|
11
12
|
#include <react/timing/primitives.h>
|
|
12
13
|
|
|
@@ -22,7 +23,7 @@ namespace facebook::react::jsinspector_modern::tracing {
|
|
|
22
23
|
result["id"] = buffer.data();
|
|
23
24
|
}
|
|
24
25
|
result["name"] = std::move(event.name);
|
|
25
|
-
result["cat"] =
|
|
26
|
+
result["cat"] = serializeTracingCategories(event.cat);
|
|
26
27
|
result["ph"] = std::string(1, event.ph);
|
|
27
28
|
result["ts"] = highResTimeStampToTracingClockTimeStamp(event.ts);
|
|
28
29
|
result["pid"] = event.pid;
|
|
@@ -34,6 +34,9 @@ struct TraceRecordingState {
|
|
|
34
34
|
|
|
35
35
|
// All captures Instance Tracing Profiles during this Trace Recording.
|
|
36
36
|
std::vector<InstanceTracingProfile> instanceTracingProfiles{};
|
|
37
|
+
|
|
38
|
+
// The list of categories that are enabled for this recording.
|
|
39
|
+
std::set<tracing::Category> enabledCategories;
|
|
37
40
|
};
|
|
38
41
|
|
|
39
42
|
} // namespace facebook::react::jsinspector_modern::tracing
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <folly/container/small_vector.h>
|
|
11
|
+
|
|
12
|
+
#include <optional>
|
|
13
|
+
#include <set>
|
|
14
|
+
#include <string>
|
|
15
|
+
|
|
16
|
+
namespace facebook::react::jsinspector_modern::tracing {
|
|
17
|
+
|
|
18
|
+
enum class Category {
|
|
19
|
+
HiddenTimeline, /* disabled-by-default-devtools.timeline */
|
|
20
|
+
JavaScriptSampling, /* disabled-by-default-v8.cpu_profiler */
|
|
21
|
+
RuntimeExecution, /* v8.execute */
|
|
22
|
+
Timeline, /* devtools.timeline */
|
|
23
|
+
UserTiming, /* blink.user_timing */
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
inline std::string tracingCategoryToString(const Category &category)
|
|
27
|
+
{
|
|
28
|
+
switch (category) {
|
|
29
|
+
case Category::Timeline:
|
|
30
|
+
return "devtools.timeline";
|
|
31
|
+
case Category::HiddenTimeline:
|
|
32
|
+
return "disabled-by-default-devtools.timeline";
|
|
33
|
+
case Category::UserTiming:
|
|
34
|
+
return "blink.user_timing";
|
|
35
|
+
case Category::JavaScriptSampling:
|
|
36
|
+
return "disabled-by-default-v8.cpu_profiler";
|
|
37
|
+
case Category::RuntimeExecution:
|
|
38
|
+
return "v8.execute";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
inline std::optional<Category> getTracingCategoryFromString(const std::string &str)
|
|
43
|
+
{
|
|
44
|
+
if (str == "blink.user_timing") {
|
|
45
|
+
return Category::UserTiming;
|
|
46
|
+
} else if (str == "devtools.timeline") {
|
|
47
|
+
return Category::Timeline;
|
|
48
|
+
} else if (str == "disabled-by-default-devtools.timeline") {
|
|
49
|
+
return Category::HiddenTimeline;
|
|
50
|
+
} else if (str == "disabled-by-default-v8.cpu_profiler") {
|
|
51
|
+
return Category::JavaScriptSampling;
|
|
52
|
+
} else if (str == "v8.execute") {
|
|
53
|
+
return Category::RuntimeExecution;
|
|
54
|
+
} else {
|
|
55
|
+
return std::nullopt;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The Trace Event could have multiple categories, but this is extremely rare case.
|
|
61
|
+
*/
|
|
62
|
+
using Categories = folly::small_vector<Category, 1>;
|
|
63
|
+
|
|
64
|
+
// { Timeline, UserTiming } => "devtools.timeline,blink.user_timing"
|
|
65
|
+
inline std::string serializeTracingCategories(const Categories &categories)
|
|
66
|
+
{
|
|
67
|
+
if (categories.size() == 1) {
|
|
68
|
+
return tracingCategoryToString(categories.front());
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
std::string serializedValue;
|
|
72
|
+
for (size_t i = 0; i < categories.size(); ++i) {
|
|
73
|
+
serializedValue += tracingCategoryToString(categories[i]);
|
|
74
|
+
if (i < categories.size() - 1) {
|
|
75
|
+
serializedValue += ",";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return serializedValue;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// { Timeline, UserTiming } => "devtools.timeline,blink.user_timing"
|
|
82
|
+
inline std::string serializeTracingCategories(const std::set<Category> &categories)
|
|
83
|
+
{
|
|
84
|
+
std::string serializedValue;
|
|
85
|
+
|
|
86
|
+
auto current = categories.begin();
|
|
87
|
+
while (current != categories.end()) {
|
|
88
|
+
serializedValue += tracingCategoryToString(*current);
|
|
89
|
+
|
|
90
|
+
++current;
|
|
91
|
+
if (current != categories.end()) {
|
|
92
|
+
serializedValue += ",";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return serializedValue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// "devtools.timeline,blink.user_timing" => { Timeline, UserTiming }
|
|
100
|
+
inline std::set<Category> parseSerializedTracingCategories(const std::string &serializedCategories)
|
|
101
|
+
{
|
|
102
|
+
std::set<Category> categories;
|
|
103
|
+
if (serializedCategories.empty()) {
|
|
104
|
+
return categories;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
size_t start = 0;
|
|
108
|
+
size_t end = serializedCategories.find(',');
|
|
109
|
+
while (end != std::string::npos) {
|
|
110
|
+
std::string token = serializedCategories.substr(start, end - start);
|
|
111
|
+
if (auto category = getTracingCategoryFromString(token)) {
|
|
112
|
+
categories.insert(*category);
|
|
113
|
+
}
|
|
114
|
+
start = end + 1;
|
|
115
|
+
end = serializedCategories.find(',', start);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
std::string lastToken = serializedCategories.substr(start);
|
|
119
|
+
if (auto category = getTracingCategoryFromString(lastToken)) {
|
|
120
|
+
categories.insert(*category);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return categories;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
} // namespace facebook::react::jsinspector_modern::tracing
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<1a4d03b0d58e389dc9e9af0adf7afa9f>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -50,6 +50,10 @@ bool ReactNativeFeatureFlags::disableFabricCommitInCXXAnimated() {
|
|
|
50
50
|
return getAccessor().disableFabricCommitInCXXAnimated();
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
bool ReactNativeFeatureFlags::disableImageViewPreallocationAndroid() {
|
|
54
|
+
return getAccessor().disableImageViewPreallocationAndroid();
|
|
55
|
+
}
|
|
56
|
+
|
|
53
57
|
bool ReactNativeFeatureFlags::disableMountItemReorderingAndroid() {
|
|
54
58
|
return getAccessor().disableMountItemReorderingAndroid();
|
|
55
59
|
}
|
|
@@ -66,6 +70,10 @@ bool ReactNativeFeatureFlags::disableTextLayoutManagerCacheAndroid() {
|
|
|
66
70
|
return getAccessor().disableTextLayoutManagerCacheAndroid();
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
bool ReactNativeFeatureFlags::disableViewPreallocationAndroid() {
|
|
74
|
+
return getAccessor().disableViewPreallocationAndroid();
|
|
75
|
+
}
|
|
76
|
+
|
|
69
77
|
bool ReactNativeFeatureFlags::enableAccessibilityOrder() {
|
|
70
78
|
return getAccessor().enableAccessibilityOrder();
|
|
71
79
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<62480a82004544f8365f4f0957eb7319>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -69,6 +69,11 @@ class ReactNativeFeatureFlags {
|
|
|
69
69
|
*/
|
|
70
70
|
RN_EXPORT static bool disableFabricCommitInCXXAnimated();
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Force disable view preallocation for images triggered from createNode off the main thread on Android
|
|
74
|
+
*/
|
|
75
|
+
RN_EXPORT static bool disableImageViewPreallocationAndroid();
|
|
76
|
+
|
|
72
77
|
/**
|
|
73
78
|
* Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread
|
|
74
79
|
*/
|
|
@@ -89,6 +94,11 @@ class ReactNativeFeatureFlags {
|
|
|
89
94
|
*/
|
|
90
95
|
RN_EXPORT static bool disableTextLayoutManagerCacheAndroid();
|
|
91
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Force disable view preallocation triggered from createNode off the main thread on Android
|
|
99
|
+
*/
|
|
100
|
+
RN_EXPORT static bool disableViewPreallocationAndroid();
|
|
101
|
+
|
|
92
102
|
/**
|
|
93
103
|
* When enabled, the accessibilityOrder prop will propagate to native platforms and define the accessibility order.
|
|
94
104
|
*/
|