react-native 0.83.0-rc.0 → 0.84.0-nightly-20251105-5ec5cc3a3
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/AppDelegate/RCTReactNativeFactory.h +3 -0
- package/Libraries/AppDelegate/RCTReactNativeFactory.mm +12 -0
- package/Libraries/AppDelegate/RCTRootViewFactory.h +10 -4
- package/Libraries/AppDelegate/RCTRootViewFactory.mm +21 -5
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +2 -2
- package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +3 -0
- package/React/Base/RCTBundleManager.h +59 -7
- package/React/Base/RCTBundleManager.m +98 -0
- package/React/Base/RCTBundleURLProvider.h +24 -0
- package/React/Base/RCTBundleURLProvider.mm +49 -4
- package/React/Base/RCTVersion.m +2 -2
- package/React/CoreModules/RCTPlatform.mm +3 -2
- package/React/CxxBridge/RCTCxxBridge.mm +1 -2
- package/React/CxxModule/RCTCxxUtils.mm +1 -11
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +127 -135
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt +7 -7
- package/ReactAndroid/src/main/java/com/facebook/react/ViewManagerOnDemandReactPackage.kt +53 -4
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt +99 -9
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkHelper.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +22 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +4 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +2 -8
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +1 -11
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +1 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +1 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +1 -12
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +1 -3
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +1 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAxOrderHelper.kt +47 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEvent.kt +5 -4
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +23 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +7 -2
- package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnectionWebSocket.cpp +29 -2
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +1 -15
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +1 -4
- package/ReactAndroid/src/main/jni/react/jni/JSLoader.cpp +1 -1
- package/ReactAndroid/src/main/jni/react/jni/JSLoader.h +2 -1
- package/ReactAndroid/src/main/res/devsupport/drawable/ic_perf_issue.xml +10 -0
- package/ReactCommon/cxxreact/JSBigString.h +14 -5
- package/ReactCommon/cxxreact/JSIndexedRAMBundle.cpp +4 -5
- package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
- package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +2 -3
- package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.h +2 -2
- package/ReactCommon/jsinspector-modern/PerfMonitorV2.cpp +9 -1
- package/ReactCommon/jsinspector-modern/PerfMonitorV2.h +4 -1
- package/ReactCommon/jsinspector-modern/TracingAgent.cpp +1 -7
- package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +3 -55
- package/ReactCommon/jsinspector-modern/tests/TracingTest.h +82 -0
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +99 -0
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +47 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +1 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +2 -7
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +18 -36
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +2 -4
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +1 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +1 -10
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +1 -2
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +4 -27
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +1 -6
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +1 -3
- package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.cpp +4 -2
- package/ReactCommon/react/renderer/css/CSSSyntaxParser.h +7 -0
- package/ReactCommon/react/runtime/ReactInstance.cpp +4 -4
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +3 -2
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +10 -6
- package/ReactCommon/yoga/yoga/style/StyleLength.h +7 -0
- package/ReactCommon/yoga/yoga/style/StyleSizeLength.h +7 -0
- package/package.json +9 -9
- package/sdks/hermes-engine/version.properties +1 -1
- package/src/private/components/virtualview/VirtualView.js +16 -9
- package/src/private/components/virtualview/logger/VirtualViewLogger.js +21 -0
- package/src/private/components/virtualview/logger/VirtualViewLoggerTypes.js +24 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +2 -7
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +1 -2
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +48 -0
- package/types_generated/src/private/components/virtualview/VirtualView.d.ts +3 -1
- package/React/CxxModule/RCTCxxModule.h +0 -29
- package/React/CxxModule/RCTCxxModule.mm +0 -87
- package/sdks/.hermesversion +0 -1
|
@@ -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<<b83a74b94f72ed85c7a5323bb56a38a0>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -429,12 +429,6 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
429
429
|
return method(javaProvider_);
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
bool sweepActiveTouchOnChildNativeGesturesAndroid() override {
|
|
433
|
-
static const auto method =
|
|
434
|
-
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("sweepActiveTouchOnChildNativeGesturesAndroid");
|
|
435
|
-
return method(javaProvider_);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
432
|
bool traceTurboModulePromiseRejectionsOnAndroid() override {
|
|
439
433
|
static const auto method =
|
|
440
434
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("traceTurboModulePromiseRejectionsOnAndroid");
|
|
@@ -866,11 +860,6 @@ bool JReactNativeFeatureFlagsCxxInterop::skipActivityIdentityAssertionOnHostPaus
|
|
|
866
860
|
return ReactNativeFeatureFlags::skipActivityIdentityAssertionOnHostPause();
|
|
867
861
|
}
|
|
868
862
|
|
|
869
|
-
bool JReactNativeFeatureFlagsCxxInterop::sweepActiveTouchOnChildNativeGesturesAndroid(
|
|
870
|
-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
871
|
-
return ReactNativeFeatureFlags::sweepActiveTouchOnChildNativeGesturesAndroid();
|
|
872
|
-
}
|
|
873
|
-
|
|
874
863
|
bool JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid(
|
|
875
864
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
876
865
|
return ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid();
|
|
@@ -1182,9 +1171,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1182
1171
|
makeNativeMethod(
|
|
1183
1172
|
"skipActivityIdentityAssertionOnHostPause",
|
|
1184
1173
|
JReactNativeFeatureFlagsCxxInterop::skipActivityIdentityAssertionOnHostPause),
|
|
1185
|
-
makeNativeMethod(
|
|
1186
|
-
"sweepActiveTouchOnChildNativeGesturesAndroid",
|
|
1187
|
-
JReactNativeFeatureFlagsCxxInterop::sweepActiveTouchOnChildNativeGesturesAndroid),
|
|
1188
1174
|
makeNativeMethod(
|
|
1189
1175
|
"traceTurboModulePromiseRejectionsOnAndroid",
|
|
1190
1176
|
JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid),
|
|
@@ -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<<6238eb0739467af8477aa8fa79a023bf>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -225,9 +225,6 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
225
225
|
static bool skipActivityIdentityAssertionOnHostPause(
|
|
226
226
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
227
227
|
|
|
228
|
-
static bool sweepActiveTouchOnChildNativeGesturesAndroid(
|
|
229
|
-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
230
|
-
|
|
231
228
|
static bool traceTurboModulePromiseRejectionsOnAndroid(
|
|
232
229
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
233
230
|
|
|
@@ -72,7 +72,7 @@ loadScriptFromAssets(AAssetManager* manager, const std::string& assetName) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
auto buf = std::make_unique<JSBigBufferString>(script->size());
|
|
75
|
-
memcpy(buf->
|
|
75
|
+
memcpy(buf->mutableData(), script->c_str(), script->size());
|
|
76
76
|
return buf;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
#include <string>
|
|
11
11
|
|
|
12
12
|
#include <android/asset_manager.h>
|
|
13
|
-
#include <cxxreact/JSExecutor.h>
|
|
14
13
|
#include <fbjni/fbjni.h>
|
|
15
14
|
|
|
16
15
|
namespace facebook::react {
|
|
17
16
|
|
|
17
|
+
class JSBigString;
|
|
18
|
+
|
|
18
19
|
struct JAssetManager : jni::JavaClass<JAssetManager> {
|
|
19
20
|
static constexpr auto kJavaDescriptor = "Landroid/content/res/AssetManager;";
|
|
20
21
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:width="24dp"
|
|
4
|
+
android:height="24dp"
|
|
5
|
+
android:viewportWidth="960"
|
|
6
|
+
android:viewportHeight="960">
|
|
7
|
+
<path
|
|
8
|
+
android:fillColor="@android:color/white"
|
|
9
|
+
android:pathData="M80,880L80,160Q80,127 103.5,103.5Q127,80 160,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,640Q880,673 856.5,696.5Q833,720 800,720L240,720L80,880ZM480,600Q497,600 508.5,588.5Q520,577 520,560Q520,543 508.5,531.5Q497,520 480,520Q463,520 451.5,531.5Q440,543 440,560Q440,577 451.5,588.5Q463,600 480,600ZM440,440L520,440L520,200L440,200L440,440Z"/>
|
|
10
|
+
</vector>
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
#include <memory>
|
|
11
11
|
#include <string>
|
|
12
12
|
|
|
13
|
+
#include <jsi/jsi.h>
|
|
14
|
+
|
|
13
15
|
#ifndef RN_EXPORT
|
|
14
16
|
#ifdef _MSC_VER
|
|
15
17
|
#define RN_EXPORT
|
|
@@ -27,15 +29,17 @@ namespace facebook::react {
|
|
|
27
29
|
// large string needs to be curried into a std::function<>, which must
|
|
28
30
|
// by CopyConstructible.
|
|
29
31
|
|
|
30
|
-
class JSBigString {
|
|
32
|
+
class JSBigString : public facebook::jsi::Buffer {
|
|
31
33
|
public:
|
|
32
34
|
JSBigString() = default;
|
|
33
35
|
|
|
34
|
-
// Not copyable
|
|
36
|
+
// Not copyable or movable
|
|
35
37
|
JSBigString(const JSBigString &) = delete;
|
|
36
38
|
JSBigString &operator=(const JSBigString &) = delete;
|
|
39
|
+
JSBigString(JSBigString &&) = delete;
|
|
40
|
+
JSBigString &operator=(JSBigString &&) = delete;
|
|
37
41
|
|
|
38
|
-
|
|
42
|
+
~JSBigString() override = default;
|
|
39
43
|
|
|
40
44
|
virtual bool isAscii() const = 0;
|
|
41
45
|
|
|
@@ -43,7 +47,12 @@ class JSBigString {
|
|
|
43
47
|
virtual const char *c_str() const = 0;
|
|
44
48
|
|
|
45
49
|
// Length of the c_str without the NULL byte.
|
|
46
|
-
|
|
50
|
+
size_t size() const override = 0;
|
|
51
|
+
|
|
52
|
+
const uint8_t *data() const final
|
|
53
|
+
{
|
|
54
|
+
return reinterpret_cast<const uint8_t *>(c_str());
|
|
55
|
+
}
|
|
47
56
|
};
|
|
48
57
|
|
|
49
58
|
// Concrete JSBigString implementation which holds a std::string
|
|
@@ -105,7 +114,7 @@ class RN_EXPORT JSBigBufferString : public JSBigString {
|
|
|
105
114
|
return m_size;
|
|
106
115
|
}
|
|
107
116
|
|
|
108
|
-
char *
|
|
117
|
+
char *mutableData()
|
|
109
118
|
{
|
|
110
119
|
return m_data;
|
|
111
120
|
}
|
|
@@ -60,8 +60,8 @@ void JSIndexedRAMBundle::init() {
|
|
|
60
60
|
"header size must exactly match the input file format");
|
|
61
61
|
|
|
62
62
|
readBundle(reinterpret_cast<char*>(header), sizeof(header));
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
size_t numTableEntries = folly::Endian::little(header[1]);
|
|
64
|
+
std::streamsize startupCodeSize = folly::Endian::little(header[2]);
|
|
65
65
|
|
|
66
66
|
// allocate memory for meta data and lookup table.
|
|
67
67
|
m_table = ModuleTable(numTableEntries);
|
|
@@ -73,7 +73,7 @@ void JSIndexedRAMBundle::init() {
|
|
|
73
73
|
// read the startup code
|
|
74
74
|
m_startupCode = std::make_unique<JSBigBufferString>(startupCodeSize - 1);
|
|
75
75
|
|
|
76
|
-
readBundle(m_startupCode->
|
|
76
|
+
readBundle(m_startupCode->mutableData(), startupCodeSize - 1);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
JSIndexedRAMBundle::Module JSIndexedRAMBundle::getModule(
|
|
@@ -109,8 +109,7 @@ std::string JSIndexedRAMBundle::getModuleCode(const uint32_t id) const {
|
|
|
109
109
|
return ret;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
void JSIndexedRAMBundle::readBundle(char* buffer,
|
|
113
|
-
const {
|
|
112
|
+
void JSIndexedRAMBundle::readBundle(char* buffer, std::streamsize bytes) const {
|
|
114
113
|
if (!m_bundle->read(buffer, bytes)) {
|
|
115
114
|
if ((m_bundle->rdstate() & std::ios::eofbit) != 0) {
|
|
116
115
|
throw std::ios_base::failure("Unexpected end of RAM Bundle file");
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
#include <string_view>
|
|
14
14
|
|
|
15
15
|
#define REACT_NATIVE_VERSION_MAJOR 0
|
|
16
|
-
#define REACT_NATIVE_VERSION_MINOR
|
|
16
|
+
#define REACT_NATIVE_VERSION_MINOR 84
|
|
17
17
|
#define REACT_NATIVE_VERSION_PATCH 0
|
|
18
18
|
|
|
19
19
|
namespace facebook::react {
|
|
20
20
|
|
|
21
21
|
constexpr struct {
|
|
22
22
|
int32_t Major = 0;
|
|
23
|
-
int32_t Minor =
|
|
23
|
+
int32_t Minor = 84;
|
|
24
24
|
int32_t Patch = 0;
|
|
25
|
-
std::string_view Prerelease = "
|
|
25
|
+
std::string_view Prerelease = "nightly-20251105-5ec5cc3a3";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
|
28
28
|
} // namespace facebook::react
|
|
@@ -168,8 +168,7 @@ void JSIExecutor::loadBundle(
|
|
|
168
168
|
ReactMarker::logTaggedMarker(
|
|
169
169
|
ReactMarker::RUN_JS_BUNDLE_START, scriptName.c_str());
|
|
170
170
|
}
|
|
171
|
-
runtime_->evaluateJavaScript(
|
|
172
|
-
std::make_unique<BigStringBuffer>(std::move(script)), sourceURL);
|
|
171
|
+
runtime_->evaluateJavaScript(std::move(script), sourceURL);
|
|
173
172
|
flush();
|
|
174
173
|
if (hasLogger) {
|
|
175
174
|
ReactMarker::logTaggedMarker(
|
|
@@ -212,7 +211,7 @@ void JSIExecutor::registerBundle(
|
|
|
212
211
|
"Empty bundle registered with ID " + tag + " from " + bundlePath);
|
|
213
212
|
}
|
|
214
213
|
runtime_->evaluateJavaScript(
|
|
215
|
-
std::
|
|
214
|
+
std::move(script),
|
|
216
215
|
JSExecutor::getSyntheticBundlePath(bundleId, bundlePath));
|
|
217
216
|
}
|
|
218
217
|
ReactMarker::logTaggedMarker(
|
|
@@ -49,7 +49,7 @@ namespace facebook::react {
|
|
|
49
49
|
using JSIScopedTimeoutInvoker =
|
|
50
50
|
std::function<void(const std::function<void()> &invokee, std::function<std::string()> errorMessageProducer)>;
|
|
51
51
|
|
|
52
|
-
class BigStringBuffer : public jsi::Buffer {
|
|
52
|
+
class [[deprecated("JSBigString implements jsi::Buffer directly")]] BigStringBuffer : public jsi::Buffer {
|
|
53
53
|
public:
|
|
54
54
|
BigStringBuffer(std::unique_ptr<const JSBigString> script) : script_(std::move(script)) {}
|
|
55
55
|
|
|
@@ -60,7 +60,7 @@ class BigStringBuffer : public jsi::Buffer {
|
|
|
60
60
|
|
|
61
61
|
const uint8_t *data() const override
|
|
62
62
|
{
|
|
63
|
-
return
|
|
63
|
+
return script_->data();
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
private:
|
|
@@ -21,7 +21,15 @@ void PerfMonitorUpdateHandler::handlePerfIssueAdded(
|
|
|
21
21
|
delegate_.unstable_onPerfIssueAdded(
|
|
22
22
|
PerfIssuePayload{
|
|
23
23
|
.name = payload["name"].asString(),
|
|
24
|
-
.severity = payload["severity"].
|
|
24
|
+
.severity = payload["severity"].isNull()
|
|
25
|
+
? std::nullopt
|
|
26
|
+
: std::make_optional(payload["severity"].asString()),
|
|
27
|
+
.description = payload["description"].isNull()
|
|
28
|
+
? std::nullopt
|
|
29
|
+
: std::make_optional(payload["description"].asString()),
|
|
30
|
+
.learnMoreUrl = payload["learnMoreUrl"].isNull()
|
|
31
|
+
? std::nullopt
|
|
32
|
+
: std::make_optional(payload["learnMoreUrl"].asString()),
|
|
25
33
|
});
|
|
26
34
|
}
|
|
27
35
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
|
+
#include <optional>
|
|
10
11
|
#include <string>
|
|
11
12
|
|
|
12
13
|
namespace facebook::react::jsinspector_modern {
|
|
@@ -15,7 +16,9 @@ class HostTargetDelegate;
|
|
|
15
16
|
|
|
16
17
|
struct PerfIssuePayload {
|
|
17
18
|
std::string name;
|
|
18
|
-
std::string severity;
|
|
19
|
+
std::optional<std::string> severity;
|
|
20
|
+
std::optional<std::string> description;
|
|
21
|
+
std::optional<std::string> learnMoreUrl;
|
|
19
22
|
};
|
|
20
23
|
|
|
21
24
|
/**
|
|
@@ -26,12 +26,8 @@ const uint16_t TRACE_EVENT_CHUNK_SIZE = 1000;
|
|
|
26
26
|
/**
|
|
27
27
|
* The maximum number of ProfileChunk trace events
|
|
28
28
|
* that will be sent in a single CDP Tracing.dataCollected message.
|
|
29
|
-
* TODO(T219394401): Increase the size once we manage the queue on OkHTTP
|
|
30
|
-
side
|
|
31
|
-
* properly and avoid WebSocket disconnections when sending a message larger
|
|
32
|
-
* than 16MB.
|
|
33
29
|
*/
|
|
34
|
-
const uint16_t PROFILE_TRACE_EVENT_CHUNK_SIZE =
|
|
30
|
+
const uint16_t PROFILE_TRACE_EVENT_CHUNK_SIZE = 10;
|
|
35
31
|
|
|
36
32
|
} // namespace
|
|
37
33
|
|
|
@@ -53,7 +49,6 @@ TracingAgent::~TracingAgent() {
|
|
|
53
49
|
|
|
54
50
|
bool TracingAgent::handleRequest(const cdp::PreparsedRequest& req) {
|
|
55
51
|
if (req.method == "Tracing.start") {
|
|
56
|
-
// @cdp Tracing.start support is experimental.
|
|
57
52
|
if (sessionState_.isDebuggerDomainEnabled) {
|
|
58
53
|
frontendChannel_(
|
|
59
54
|
cdp::jsonError(
|
|
@@ -81,7 +76,6 @@ bool TracingAgent::handleRequest(const cdp::PreparsedRequest& req) {
|
|
|
81
76
|
|
|
82
77
|
return true;
|
|
83
78
|
} else if (req.method == "Tracing.end") {
|
|
84
|
-
// @cdp Tracing.end support is experimental.
|
|
85
79
|
auto state = hostTargetController_.stopTracing();
|
|
86
80
|
|
|
87
81
|
sessionState_.hasPendingTraceRecording = false;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
#include "
|
|
8
|
+
#include "TracingTest.h"
|
|
9
9
|
#include "engines/JsiIntegrationTestHermesEngineAdapter.h"
|
|
10
10
|
|
|
11
11
|
#include <folly/executors/QueuedImmediateExecutor.h>
|
|
@@ -31,13 +31,13 @@ struct NetworkReporterTestParams {
|
|
|
31
31
|
*/
|
|
32
32
|
template <typename Params>
|
|
33
33
|
requires std::convertible_to<Params, NetworkReporterTestParams>
|
|
34
|
-
class NetworkReporterTestBase : public
|
|
34
|
+
class NetworkReporterTestBase : public TracingTestBase<
|
|
35
35
|
JsiIntegrationTestHermesEngineAdapter,
|
|
36
36
|
folly::QueuedImmediateExecutor>,
|
|
37
37
|
public WithParamInterface<Params> {
|
|
38
38
|
protected:
|
|
39
39
|
NetworkReporterTestBase()
|
|
40
|
-
:
|
|
40
|
+
: TracingTestBase({
|
|
41
41
|
.networkInspectionEnabled = true,
|
|
42
42
|
.enableNetworkEventReporting =
|
|
43
43
|
WithParamInterface<Params>::GetParam()
|
|
@@ -68,58 +68,6 @@ class NetworkReporterTestBase : public JsiIntegrationPortableTestBase<
|
|
|
68
68
|
urlMatcher);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
void startTracing() {
|
|
72
|
-
this->expectMessageFromPage(JsonEq(R"({
|
|
73
|
-
"id": 1,
|
|
74
|
-
"result": {}
|
|
75
|
-
})"));
|
|
76
|
-
|
|
77
|
-
this->toPage_->sendMessage(R"({
|
|
78
|
-
"id": 1,
|
|
79
|
-
"method": "Tracing.start"
|
|
80
|
-
})");
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Helper method to end tracing and collect all trace events from potentially
|
|
85
|
-
* multiple chunked Tracing.dataCollected messages.
|
|
86
|
-
* \returns A vector containing all collected trace events
|
|
87
|
-
*/
|
|
88
|
-
std::vector<folly::dynamic> endTracingAndCollectEvents() {
|
|
89
|
-
InSequence s;
|
|
90
|
-
|
|
91
|
-
this->expectMessageFromPage(JsonEq(R"({
|
|
92
|
-
"id": 1,
|
|
93
|
-
"result": {}
|
|
94
|
-
})"));
|
|
95
|
-
|
|
96
|
-
std::vector<folly::dynamic> allTraceEvents;
|
|
97
|
-
|
|
98
|
-
EXPECT_CALL(
|
|
99
|
-
fromPage(),
|
|
100
|
-
onMessage(JsonParsed(AtJsonPtr("/method", "Tracing.dataCollected"))))
|
|
101
|
-
.Times(AtLeast(1))
|
|
102
|
-
.WillRepeatedly(Invoke([&allTraceEvents](const std::string& message) {
|
|
103
|
-
auto parsedMessage = folly::parseJson(message);
|
|
104
|
-
auto& events = parsedMessage.at("params").at("value");
|
|
105
|
-
allTraceEvents.insert(
|
|
106
|
-
allTraceEvents.end(),
|
|
107
|
-
std::make_move_iterator(events.begin()),
|
|
108
|
-
std::make_move_iterator(events.end()));
|
|
109
|
-
}));
|
|
110
|
-
|
|
111
|
-
this->expectMessageFromPage(JsonParsed(AllOf(
|
|
112
|
-
AtJsonPtr("/method", "Tracing.tracingComplete"),
|
|
113
|
-
AtJsonPtr("/params/dataLossOccurred", false))));
|
|
114
|
-
|
|
115
|
-
this->toPage_->sendMessage(R"({
|
|
116
|
-
"id": 1,
|
|
117
|
-
"method": "Tracing.end"
|
|
118
|
-
})");
|
|
119
|
-
|
|
120
|
-
return allTraceEvents;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
71
|
private:
|
|
124
72
|
std::optional<std::string> getScriptUrlById(const std::string& scriptId) {
|
|
125
73
|
auto it = scriptUrlsById_.find(scriptId);
|
|
@@ -0,0 +1,82 @@
|
|
|
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 "JsiIntegrationTest.h"
|
|
11
|
+
|
|
12
|
+
#include <folly/dynamic.h>
|
|
13
|
+
#include <folly/json.h>
|
|
14
|
+
#include <gmock/gmock.h>
|
|
15
|
+
#include <vector>
|
|
16
|
+
|
|
17
|
+
#include "FollyDynamicMatchers.h"
|
|
18
|
+
|
|
19
|
+
namespace facebook::react::jsinspector_modern {
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Base test class providing tracing-related test utilities for tests.
|
|
23
|
+
*/
|
|
24
|
+
template <typename EngineAdapter, typename Executor>
|
|
25
|
+
class TracingTestBase : public JsiIntegrationPortableTestBase<EngineAdapter, Executor> {
|
|
26
|
+
protected:
|
|
27
|
+
using JsiIntegrationPortableTestBase<EngineAdapter, Executor>::JsiIntegrationPortableTestBase;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Helper method to start tracing via Tracing.start CDP command.
|
|
31
|
+
*/
|
|
32
|
+
void startTracing()
|
|
33
|
+
{
|
|
34
|
+
this->expectMessageFromPage(JsonEq(R"({
|
|
35
|
+
"id": 1,
|
|
36
|
+
"result": {}
|
|
37
|
+
})"));
|
|
38
|
+
|
|
39
|
+
this->toPage_->sendMessage(R"({
|
|
40
|
+
"id": 1,
|
|
41
|
+
"method": "Tracing.start"
|
|
42
|
+
})");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Helper method to end tracing and collect all trace events from potentially
|
|
47
|
+
* multiple chunked Tracing.dataCollected messages.
|
|
48
|
+
* \returns A vector containing all collected trace events
|
|
49
|
+
*/
|
|
50
|
+
std::vector<folly::dynamic> endTracingAndCollectEvents()
|
|
51
|
+
{
|
|
52
|
+
testing::InSequence s;
|
|
53
|
+
|
|
54
|
+
this->expectMessageFromPage(JsonEq(R"({
|
|
55
|
+
"id": 1,
|
|
56
|
+
"result": {}
|
|
57
|
+
})"));
|
|
58
|
+
|
|
59
|
+
std::vector<folly::dynamic> allTraceEvents;
|
|
60
|
+
|
|
61
|
+
EXPECT_CALL(this->fromPage(), onMessage(JsonParsed(AtJsonPtr("/method", "Tracing.dataCollected"))))
|
|
62
|
+
.Times(testing::AtLeast(1))
|
|
63
|
+
.WillRepeatedly(testing::Invoke([&allTraceEvents](const std::string &message) {
|
|
64
|
+
auto parsedMessage = folly::parseJson(message);
|
|
65
|
+
auto &events = parsedMessage.at("params").at("value");
|
|
66
|
+
allTraceEvents.insert(
|
|
67
|
+
allTraceEvents.end(), std::make_move_iterator(events.begin()), std::make_move_iterator(events.end()));
|
|
68
|
+
}));
|
|
69
|
+
|
|
70
|
+
this->expectMessageFromPage(JsonParsed(
|
|
71
|
+
testing::AllOf(AtJsonPtr("/method", "Tracing.tracingComplete"), AtJsonPtr("/params/dataLossOccurred", false))));
|
|
72
|
+
|
|
73
|
+
this->toPage_->sendMessage(R"({
|
|
74
|
+
"id": 1,
|
|
75
|
+
"method": "Tracing.end"
|
|
76
|
+
})");
|
|
77
|
+
|
|
78
|
+
return allTraceEvents;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
} // namespace facebook::react::jsinspector_modern
|
|
@@ -360,6 +360,41 @@ void PerformanceTracer::reportResourceFinish(
|
|
|
360
360
|
});
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
+
void PerformanceTracer::setLayerTreeId(std::string frame, int layerTreeId) {
|
|
364
|
+
enqueueEvent(
|
|
365
|
+
PerformanceTracerSetLayerTreeIdEvent{
|
|
366
|
+
.frame = std::move(frame),
|
|
367
|
+
.layerTreeId = layerTreeId,
|
|
368
|
+
.start = HighResTimeStamp::now(),
|
|
369
|
+
.threadId = getCurrentThreadId(),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
void PerformanceTracer::reportFrameTiming(
|
|
374
|
+
int frameSeqId,
|
|
375
|
+
HighResTimeStamp start,
|
|
376
|
+
HighResTimeStamp end) {
|
|
377
|
+
ThreadId threadId = getCurrentThreadId();
|
|
378
|
+
enqueueEvent(
|
|
379
|
+
PerformanceTracerFrameBeginDrawEvent{
|
|
380
|
+
.frameSeqId = frameSeqId,
|
|
381
|
+
.start = start,
|
|
382
|
+
.threadId = threadId,
|
|
383
|
+
});
|
|
384
|
+
enqueueEvent(
|
|
385
|
+
PerformanceTracerFrameCommitEvent{
|
|
386
|
+
.frameSeqId = frameSeqId,
|
|
387
|
+
.start = start,
|
|
388
|
+
.threadId = threadId,
|
|
389
|
+
});
|
|
390
|
+
enqueueEvent(
|
|
391
|
+
PerformanceTracerFrameDrawEvent{
|
|
392
|
+
.frameSeqId = frameSeqId,
|
|
393
|
+
.start = end,
|
|
394
|
+
.threadId = threadId,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
363
398
|
/* static */ TraceEvent PerformanceTracer::constructRuntimeProfileTraceEvent(
|
|
364
399
|
RuntimeProfileId profileId,
|
|
365
400
|
ProcessId processId,
|
|
@@ -737,6 +772,70 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
|
|
|
737
772
|
.args = folly::dynamic::object("data", std::move(data)),
|
|
738
773
|
});
|
|
739
774
|
},
|
|
775
|
+
[&](PerformanceTracerSetLayerTreeIdEvent&& event) {
|
|
776
|
+
folly::dynamic data = folly::dynamic::object("frame", event.frame)(
|
|
777
|
+
"layerTreeId", event.layerTreeId);
|
|
778
|
+
|
|
779
|
+
events.emplace_back(
|
|
780
|
+
TraceEvent{
|
|
781
|
+
.name = "SetLayerTreeId",
|
|
782
|
+
.cat = "devtools.timeline",
|
|
783
|
+
.ph = 'I',
|
|
784
|
+
.ts = event.start,
|
|
785
|
+
.pid = processId_,
|
|
786
|
+
.s = 't',
|
|
787
|
+
.tid = event.threadId,
|
|
788
|
+
.args = folly::dynamic::object("data", std::move(data)),
|
|
789
|
+
});
|
|
790
|
+
},
|
|
791
|
+
[&](PerformanceTracerFrameBeginDrawEvent&& event) {
|
|
792
|
+
folly::dynamic data = folly::dynamic::object(
|
|
793
|
+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
|
|
794
|
+
|
|
795
|
+
events.emplace_back(
|
|
796
|
+
TraceEvent{
|
|
797
|
+
.name = "BeginFrame",
|
|
798
|
+
.cat = "devtools.timeline",
|
|
799
|
+
.ph = 'I',
|
|
800
|
+
.ts = event.start,
|
|
801
|
+
.pid = processId_,
|
|
802
|
+
.s = 't',
|
|
803
|
+
.tid = event.threadId,
|
|
804
|
+
.args = std::move(data),
|
|
805
|
+
});
|
|
806
|
+
},
|
|
807
|
+
[&](PerformanceTracerFrameCommitEvent&& event) {
|
|
808
|
+
folly::dynamic data = folly::dynamic::object(
|
|
809
|
+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
|
|
810
|
+
|
|
811
|
+
events.emplace_back(
|
|
812
|
+
TraceEvent{
|
|
813
|
+
.name = "Commit",
|
|
814
|
+
.cat = "devtools.timeline",
|
|
815
|
+
.ph = 'I',
|
|
816
|
+
.ts = event.start,
|
|
817
|
+
.pid = processId_,
|
|
818
|
+
.s = 't',
|
|
819
|
+
.tid = event.threadId,
|
|
820
|
+
.args = std::move(data),
|
|
821
|
+
});
|
|
822
|
+
},
|
|
823
|
+
[&](PerformanceTracerFrameDrawEvent&& event) {
|
|
824
|
+
folly::dynamic data = folly::dynamic::object(
|
|
825
|
+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
|
|
826
|
+
|
|
827
|
+
events.emplace_back(
|
|
828
|
+
TraceEvent{
|
|
829
|
+
.name = "DrawFrame",
|
|
830
|
+
.cat = "devtools.timeline",
|
|
831
|
+
.ph = 'I',
|
|
832
|
+
.ts = event.start,
|
|
833
|
+
.pid = processId_,
|
|
834
|
+
.s = 't',
|
|
835
|
+
.tid = event.threadId,
|
|
836
|
+
.args = std::move(data),
|
|
837
|
+
});
|
|
838
|
+
},
|
|
740
839
|
},
|
|
741
840
|
std::move(event));
|
|
742
841
|
}
|
|
@@ -161,6 +161,19 @@ class PerformanceTracer {
|
|
|
161
161
|
int encodedDataLength,
|
|
162
162
|
int decodedBodyLength);
|
|
163
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Sets the active layer tree ID in Chrome DevTools. This is needed in
|
|
166
|
+
* order for frames to be parsed.
|
|
167
|
+
*
|
|
168
|
+
* https://chromedevtools.github.io/devtools-protocol/tot/LayerTree/
|
|
169
|
+
*/
|
|
170
|
+
void setLayerTreeId(std::string frame, int layerTreeId);
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Reports the required frame CDP events for a given native frame.
|
|
174
|
+
*/
|
|
175
|
+
void reportFrameTiming(int frameSeqId, HighResTimeStamp start, HighResTimeStamp end);
|
|
176
|
+
|
|
164
177
|
/**
|
|
165
178
|
* Creates "Profile" Trace Event.
|
|
166
179
|
*
|
|
@@ -290,6 +303,35 @@ class PerformanceTracer {
|
|
|
290
303
|
HighResTimeStamp createdAt = HighResTimeStamp::now();
|
|
291
304
|
};
|
|
292
305
|
|
|
306
|
+
struct PerformanceTracerSetLayerTreeIdEvent {
|
|
307
|
+
std::string frame;
|
|
308
|
+
int layerTreeId;
|
|
309
|
+
HighResTimeStamp start;
|
|
310
|
+
ThreadId threadId;
|
|
311
|
+
HighResTimeStamp createdAt = HighResTimeStamp::now();
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
struct PerformanceTracerFrameBeginDrawEvent {
|
|
315
|
+
int frameSeqId;
|
|
316
|
+
HighResTimeStamp start;
|
|
317
|
+
ThreadId threadId;
|
|
318
|
+
HighResTimeStamp createdAt = HighResTimeStamp::now();
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
struct PerformanceTracerFrameCommitEvent {
|
|
322
|
+
int frameSeqId;
|
|
323
|
+
HighResTimeStamp start;
|
|
324
|
+
ThreadId threadId;
|
|
325
|
+
HighResTimeStamp createdAt = HighResTimeStamp::now();
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
struct PerformanceTracerFrameDrawEvent {
|
|
329
|
+
int frameSeqId;
|
|
330
|
+
HighResTimeStamp start;
|
|
331
|
+
ThreadId threadId;
|
|
332
|
+
HighResTimeStamp createdAt = HighResTimeStamp::now();
|
|
333
|
+
};
|
|
334
|
+
|
|
293
335
|
using PerformanceTracerEvent = std::variant<
|
|
294
336
|
PerformanceTracerEventTimeStamp,
|
|
295
337
|
PerformanceTracerEventEventLoopTask,
|
|
@@ -298,7 +340,11 @@ class PerformanceTracer {
|
|
|
298
340
|
PerformanceTracerEventMeasure,
|
|
299
341
|
PerformanceTracerResourceSendRequest,
|
|
300
342
|
PerformanceTracerResourceReceiveResponse,
|
|
301
|
-
PerformanceTracerResourceFinish
|
|
343
|
+
PerformanceTracerResourceFinish,
|
|
344
|
+
PerformanceTracerSetLayerTreeIdEvent,
|
|
345
|
+
PerformanceTracerFrameBeginDrawEvent,
|
|
346
|
+
PerformanceTracerFrameCommitEvent,
|
|
347
|
+
PerformanceTracerFrameDrawEvent>;
|
|
302
348
|
|
|
303
349
|
#pragma mark - Private fields and methods
|
|
304
350
|
|
|
@@ -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<<6f88454830626622f9b5720ae0395938>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -286,10 +286,6 @@ bool ReactNativeFeatureFlags::skipActivityIdentityAssertionOnHostPause() {
|
|
|
286
286
|
return getAccessor().skipActivityIdentityAssertionOnHostPause();
|
|
287
287
|
}
|
|
288
288
|
|
|
289
|
-
bool ReactNativeFeatureFlags::sweepActiveTouchOnChildNativeGesturesAndroid() {
|
|
290
|
-
return getAccessor().sweepActiveTouchOnChildNativeGesturesAndroid();
|
|
291
|
-
}
|
|
292
|
-
|
|
293
289
|
bool ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid() {
|
|
294
290
|
return getAccessor().traceTurboModulePromiseRejectionsOnAndroid();
|
|
295
291
|
}
|