Skip to content

Commit 0486640

Browse files
RSNarafacebook-github-bot
authored andcommitted
Introduce NativeModulePerfLogger
Summary: ## Description This diff introduces `NativeModulePerfLogger`, its BUCK, Cocoapod, android-ndk targets. This diff also wires up those targets into the React Native bridge and TurboModules targets, so that we get signal on if the code compiles. This diff also introduces `TurboModulePerfLogger`, which is a namespace that holds the `NativeModulePerfLogger` that'll do perf-logging for TurboModules. ## How will perflogging work on iOS? 1. Each application will, during React Native initialization, create a NativeModule perf logger. 2. If TurboModules are enabled, we'll call `TurboModulePerfLogger::setInstance(perfLogger)`. If TurboModules are disabled, we'll call `NativeModulePerfLogger::setInstance(perfLogger)`. 3. TurboModules, when they're created and used, will log events via `TurboModulePerfLogger::getInstance()`. NativeModules (i.e: bridge modules), when they're created and used, will log events via the `NativeModulePerfLogger::getInstance()`. > **Note:** The NativeModule system will log events for non-TurboModules as well. Maybe we should log events for only NativeModules that conform to the `TurboModule` interface, when TurboModules are disabled. This'll ensure a fair comparison between the two systems. ## How will perflogging work on Android? Please see the subsequent diff. allow-large-files Changelog: [Both][Added] - Introduce `NativeModulePerfLogger` Reviewed By: PeteTheHeat Differential Revision: D21318053 fbshipit-source-id: 6ddf5b5a80bdc4076d2dd6588067e2b0ec8c2c6b
1 parent c3a3d42 commit 0486640

14 files changed

+488
-2
lines changed

RNTester/Podfile.lock

+25-2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ PODS:
9999
- React-cxxreact (= 1000.0.0)
100100
- React-jsi (= 1000.0.0)
101101
- React-jsiexecutor (= 1000.0.0)
102+
- React-perflogger (= 1000.0.0)
102103
- Yoga
103104
- React-Core/ARTHeaders (1000.0.0):
104105
- Folly (= 2020.01.13.00)
@@ -107,6 +108,7 @@ PODS:
107108
- React-cxxreact (= 1000.0.0)
108109
- React-jsi (= 1000.0.0)
109110
- React-jsiexecutor (= 1000.0.0)
111+
- React-perflogger (= 1000.0.0)
110112
- Yoga
111113
- React-Core/CoreModulesHeaders (1000.0.0):
112114
- Folly (= 2020.01.13.00)
@@ -115,13 +117,15 @@ PODS:
115117
- React-cxxreact (= 1000.0.0)
116118
- React-jsi (= 1000.0.0)
117119
- React-jsiexecutor (= 1000.0.0)
120+
- React-perflogger (= 1000.0.0)
118121
- Yoga
119122
- React-Core/Default (1000.0.0):
120123
- Folly (= 2020.01.13.00)
121124
- glog
122125
- React-cxxreact (= 1000.0.0)
123126
- React-jsi (= 1000.0.0)
124127
- React-jsiexecutor (= 1000.0.0)
128+
- React-perflogger (= 1000.0.0)
125129
- Yoga
126130
- React-Core/DevSupport (1000.0.0):
127131
- Folly (= 2020.01.13.00)
@@ -132,6 +136,7 @@ PODS:
132136
- React-jsi (= 1000.0.0)
133137
- React-jsiexecutor (= 1000.0.0)
134138
- React-jsinspector (= 1000.0.0)
139+
- React-perflogger (= 1000.0.0)
135140
- Yoga
136141
- React-Core/RCTActionSheetHeaders (1000.0.0):
137142
- Folly (= 2020.01.13.00)
@@ -140,6 +145,7 @@ PODS:
140145
- React-cxxreact (= 1000.0.0)
141146
- React-jsi (= 1000.0.0)
142147
- React-jsiexecutor (= 1000.0.0)
148+
- React-perflogger (= 1000.0.0)
143149
- Yoga
144150
- React-Core/RCTAnimationHeaders (1000.0.0):
145151
- Folly (= 2020.01.13.00)
@@ -148,6 +154,7 @@ PODS:
148154
- React-cxxreact (= 1000.0.0)
149155
- React-jsi (= 1000.0.0)
150156
- React-jsiexecutor (= 1000.0.0)
157+
- React-perflogger (= 1000.0.0)
151158
- Yoga
152159
- React-Core/RCTBlobHeaders (1000.0.0):
153160
- Folly (= 2020.01.13.00)
@@ -156,6 +163,7 @@ PODS:
156163
- React-cxxreact (= 1000.0.0)
157164
- React-jsi (= 1000.0.0)
158165
- React-jsiexecutor (= 1000.0.0)
166+
- React-perflogger (= 1000.0.0)
159167
- Yoga
160168
- React-Core/RCTImageHeaders (1000.0.0):
161169
- Folly (= 2020.01.13.00)
@@ -164,6 +172,7 @@ PODS:
164172
- React-cxxreact (= 1000.0.0)
165173
- React-jsi (= 1000.0.0)
166174
- React-jsiexecutor (= 1000.0.0)
175+
- React-perflogger (= 1000.0.0)
167176
- Yoga
168177
- React-Core/RCTLinkingHeaders (1000.0.0):
169178
- Folly (= 2020.01.13.00)
@@ -172,6 +181,7 @@ PODS:
172181
- React-cxxreact (= 1000.0.0)
173182
- React-jsi (= 1000.0.0)
174183
- React-jsiexecutor (= 1000.0.0)
184+
- React-perflogger (= 1000.0.0)
175185
- Yoga
176186
- React-Core/RCTNetworkHeaders (1000.0.0):
177187
- Folly (= 2020.01.13.00)
@@ -180,6 +190,7 @@ PODS:
180190
- React-cxxreact (= 1000.0.0)
181191
- React-jsi (= 1000.0.0)
182192
- React-jsiexecutor (= 1000.0.0)
193+
- React-perflogger (= 1000.0.0)
183194
- Yoga
184195
- React-Core/RCTPushNotificationHeaders (1000.0.0):
185196
- Folly (= 2020.01.13.00)
@@ -188,6 +199,7 @@ PODS:
188199
- React-cxxreact (= 1000.0.0)
189200
- React-jsi (= 1000.0.0)
190201
- React-jsiexecutor (= 1000.0.0)
202+
- React-perflogger (= 1000.0.0)
191203
- Yoga
192204
- React-Core/RCTSettingsHeaders (1000.0.0):
193205
- Folly (= 2020.01.13.00)
@@ -196,6 +208,7 @@ PODS:
196208
- React-cxxreact (= 1000.0.0)
197209
- React-jsi (= 1000.0.0)
198210
- React-jsiexecutor (= 1000.0.0)
211+
- React-perflogger (= 1000.0.0)
199212
- Yoga
200213
- React-Core/RCTTextHeaders (1000.0.0):
201214
- Folly (= 2020.01.13.00)
@@ -204,6 +217,7 @@ PODS:
204217
- React-cxxreact (= 1000.0.0)
205218
- React-jsi (= 1000.0.0)
206219
- React-jsiexecutor (= 1000.0.0)
220+
- React-perflogger (= 1000.0.0)
207221
- Yoga
208222
- React-Core/RCTVibrationHeaders (1000.0.0):
209223
- Folly (= 2020.01.13.00)
@@ -212,6 +226,7 @@ PODS:
212226
- React-cxxreact (= 1000.0.0)
213227
- React-jsi (= 1000.0.0)
214228
- React-jsiexecutor (= 1000.0.0)
229+
- React-perflogger (= 1000.0.0)
215230
- Yoga
216231
- React-Core/RCTWebSocket (1000.0.0):
217232
- Folly (= 2020.01.13.00)
@@ -220,6 +235,7 @@ PODS:
220235
- React-cxxreact (= 1000.0.0)
221236
- React-jsi (= 1000.0.0)
222237
- React-jsiexecutor (= 1000.0.0)
238+
- React-perflogger (= 1000.0.0)
223239
- Yoga
224240
- React-CoreModules (1000.0.0):
225241
- FBReactNativeSpec (= 1000.0.0)
@@ -255,6 +271,7 @@ PODS:
255271
- React-cxxreact (= 1000.0.0)
256272
- React-jsi (= 1000.0.0)
257273
- React-jsinspector (1000.0.0)
274+
- React-perflogger (1000.0.0)
258275
- React-RCTActionSheet (1000.0.0):
259276
- React-Core/RCTActionSheetHeaders (= 1000.0.0)
260277
- React-RCTAnimation (1000.0.0):
@@ -329,6 +346,7 @@ PODS:
329346
- React-Core (= 1000.0.0)
330347
- React-cxxreact (= 1000.0.0)
331348
- React-jsi (= 1000.0.0)
349+
- React-perflogger (= 1000.0.0)
332350
- ReactCommon/turbomodule/samples (1000.0.0):
333351
- DoubleConversion
334352
- Folly (= 2020.01.13.00)
@@ -337,6 +355,7 @@ PODS:
337355
- React-Core (= 1000.0.0)
338356
- React-cxxreact (= 1000.0.0)
339357
- React-jsi (= 1000.0.0)
358+
- React-perflogger (= 1000.0.0)
340359
- ReactCommon/turbomodule/core (= 1000.0.0)
341360
- Yoga (1.14.0)
342361
- YogaKit (1.18.1):
@@ -380,6 +399,7 @@ DEPENDENCIES:
380399
- React-jsi (from `../ReactCommon/jsi`)
381400
- React-jsiexecutor (from `../ReactCommon/jsiexecutor`)
382401
- React-jsinspector (from `../ReactCommon/jsinspector`)
402+
- React-perflogger (from `../ReactCommon/perflogger`)
383403
- React-RCTActionSheet (from `../Libraries/ActionSheetIOS`)
384404
- React-RCTAnimation (from `../Libraries/NativeAnimation`)
385405
- React-RCTBlob (from `../Libraries/Blob`)
@@ -444,6 +464,8 @@ EXTERNAL SOURCES:
444464
:path: "../ReactCommon/jsiexecutor"
445465
React-jsinspector:
446466
:path: "../ReactCommon/jsinspector"
467+
React-perflogger:
468+
:path: "../ReactCommon/perflogger"
447469
React-RCTActionSheet:
448470
:path: "../Libraries/ActionSheetIOS"
449471
React-RCTAnimation:
@@ -495,12 +517,13 @@ SPEC CHECKSUMS:
495517
React: cafb3c2321f7df55ce90dbf29d513799a79e4418
496518
React-ART: df0460bdff42ef039e28ee3ffd41f50b75644788
497519
React-callinvoker: 0dada022d38b73e6e15b33e2a96476153f79bbf6
498-
React-Core: 08c69f013e6fd654ea8f9fd84bbd66780a54d886
520+
React-Core: d85e4563acbfbb6e6be7414a813ad55d05d675df
499521
React-CoreModules: d13d148c851af5780f864be74bc2165140923dc7
500522
React-cxxreact: b43a94e679b307660de530a3af872ab4c7d9925d
501523
React-jsi: fe94132da767bfc4801968c2a12abae43e9a833e
502524
React-jsiexecutor: 55eff40b2e0696e7a979016e321793ec8b28a2ac
503525
React-jsinspector: 7fbf9b42b58b02943a0d89b0ba9fff0070f2de98
526+
React-perflogger: d32d3423e466a825ef2e9934fe9d62b149e5d9f8
504527
React-RCTActionSheet: 51c43beeb74ef41189e87fe9823e53ebf6210359
505528
React-RCTAnimation: 9d09196c641c1ebfef3a4e9ae670bcda5fadb420
506529
React-RCTBlob: 715489626cf44d28ee51e5277a4d559167351696
@@ -513,7 +536,7 @@ SPEC CHECKSUMS:
513536
React-RCTText: 6c01963d3e562109f5548262b09b1b2bc260dd60
514537
React-RCTVibration: d42d73dafd9f63cf758656ee743aa80c566798ff
515538
React-runtimeexecutor: 60dd6204a13f68a1aa1118870edcc604a791df2b
516-
ReactCommon: 39e00b754f5e1628804fab28f44146d06280f700
539+
ReactCommon: 511b4a9ea129c129c6dbc982942007d195903a9a
517540
Yoga: f7fa200d8c49f97b54c9421079e781fb900b5cae
518541
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
519542

React-Core.podspec

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ Pod::Spec.new do |s|
9494

9595
s.dependency "Folly", folly_version
9696
s.dependency "React-cxxreact", version
97+
s.dependency "React-perflogger", version
9798
s.dependency "React-jsi", version
9899
s.dependency "React-jsiexecutor", version
99100
s.dependency "Yoga"

ReactAndroid/src/main/jni/react/jni/Android.mk

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ $(call import-module,cxxreact)
6969
$(call import-module,jsi)
7070
$(call import-module,jsiexecutor)
7171
$(call import-module,callinvoker)
72+
$(call import-module,perflogger)
7273
$(call import-module,hermes)
7374
$(call import-module,runtimeexecutor)
7475

ReactCommon/ReactCommon.podspec

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Pod::Spec.new do |s|
3838

3939
s.subspec "turbomodule" do |ss|
4040
ss.dependency "React-callinvoker", version
41+
ss.dependency "React-perflogger", version
4142
ss.dependency "React-Core", version
4243
ss.dependency "React-cxxreact", version
4344
ss.dependency "React-jsi", version

ReactCommon/perflogger/.clang-tidy

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
Checks: '>
3+
clang-diagnostic-*,
4+
'
5+
...

ReactCommon/perflogger/Android.mk

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright (c) Facebook, Inc. and its affiliates.
2+
#
3+
# This source code is licensed under the MIT license found in the
4+
# LICENSE file in the root directory of this source tree.
5+
6+
LOCAL_PATH := $(call my-dir)
7+
8+
include $(CLEAR_VARS)
9+
10+
# Header search path for all source files in this module.
11+
LOCAL_C_INCLUDES := $(LOCAL_PATH)/ReactCommon
12+
13+
# Header search path for modules that depend on this module
14+
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
15+
16+
LOCAL_CFLAGS += -fexceptions -frtti -std=c++14 -Wall
17+
18+
# Name of this module.
19+
LOCAL_MODULE := perflogger
20+
21+
# Compile all local c++ files under ./ReactCommon
22+
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/ReactCommon/*.cpp)
23+
24+
# Build the files in this directory as a shared library
25+
include $(BUILD_STATIC_LIBRARY)

ReactCommon/perflogger/BUCK

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
load("//tools/build_defs/oss:rn_defs.bzl", "ANDROID", "APPLE", "rn_xplat_cxx_library", "subdir_glob")
2+
3+
rn_xplat_cxx_library(
4+
name = "perflogger",
5+
srcs = glob(["**/*.cpp"]),
6+
header_namespace = "",
7+
exported_headers = subdir_glob(
8+
[
9+
("ReactCommon", "*.h"),
10+
],
11+
prefix = "ReactCommon",
12+
),
13+
compiler_flags = [
14+
"-fexceptions",
15+
"-frtti",
16+
"-std=c++14",
17+
"-Wall",
18+
"-Wno-global-constructors",
19+
],
20+
fbandroid_labels = [
21+
"supermodule:android/default/public.react_native.infra",
22+
],
23+
fbobjc_labels = [
24+
"supermodule:ios/default/public.react_native.infra",
25+
],
26+
platforms = (ANDROID, APPLE),
27+
preferred_linkage = "static",
28+
preprocessor_flags = [
29+
"-DLOG_TAG=\"ReactNative\"",
30+
"-DWITH_FBSYSTRACE=1",
31+
],
32+
visibility = [
33+
"PUBLIC",
34+
],
35+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Copyright (c) Facebook, Inc. and its affiliates.
2+
#
3+
# This source code is licensed under the MIT license found in the
4+
# LICENSE file in the root directory of this source tree.
5+
6+
require "json"
7+
8+
package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9+
version = package['version']
10+
11+
source = { :git => 'https://github.com/facebook/react-native.git' }
12+
if version == '1000.0.0'
13+
# This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14+
source[:commit] = `git rev-parse HEAD`.strip
15+
else
16+
source[:tag] = "v#{version}"
17+
end
18+
19+
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
20+
folly_version = '2020.01.13.00'
21+
boost_compiler_flags = '-Wno-documentation'
22+
23+
Pod::Spec.new do |s|
24+
s.name = "React-perflogger"
25+
s.version = version
26+
s.summary = "-" # TODO
27+
s.homepage = "https://reactnative.dev/"
28+
s.license = package["license"]
29+
s.author = "Facebook, Inc. and its affiliates"
30+
s.platforms = { :ios => "10.0", :tvos => "10.0" }
31+
s.source = source
32+
s.source_files = "**/*.{cpp,h}"
33+
s.header_dir = "ReactCommon"
34+
end

0 commit comments

Comments
 (0)