From 79090c48026a932a688ad80a715cdc9c0fe00a78 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Mon, 29 Mar 2021 05:11:13 -0700 Subject: [PATCH] Fabric: Decoupling Telemetry aggregation classes into a separate module Summary: We need to do this to break a dependency cycle that would happen if we try to have `view` depend on `mounting` just to add some telemetry to `view`. Changelog: [Internal] Fabric-specific internal change. Reviewed By: mdvacca Differential Revision: D26827446 fbshipit-source-id: 4c415ebf5be3a02c18c80ea8a4a77068cae0f0fe --- .../com/facebook/react/fabric/jni/Android.mk | 3 +- ReactCommon/React-Fabric.podspec | 9 ++ .../react/renderer/components/text/BUCK | 1 + .../components/text/ParagraphShadowNode.cpp | 1 + .../react/renderer/mounting/Android.mk | 3 +- ReactCommon/react/renderer/mounting/BUCK | 1 + .../renderer/mounting/MountingTransaction.h | 4 +- .../mounting/MountingTransactionMetadata.h | 2 +- .../react/renderer/mounting/ShadowTree.cpp | 2 +- .../renderer/mounting/ShadowTreeRevision.h | 2 +- .../renderer/mounting/TelemetryController.h | 2 +- .../react/renderer/telemetry/Android.mk | 31 +++++++ ReactCommon/react/renderer/telemetry/BUCK | 83 +++++++++++++++++++ .../SurfaceTelemetry.cpp | 0 .../SurfaceTelemetry.h | 2 +- .../TransactionTelemetry.cpp | 0 .../TransactionTelemetry.h | 0 .../tests/TransactionTelemetryTest.cpp | 2 +- .../renderer/textlayoutmanager/Android.mk | 3 +- .../textlayoutmanager/TextLayoutManager.cpp | 2 +- .../platform/ios/TextLayoutManager.mm | 2 +- packages/rn-tester/Podfile.lock | 11 ++- 22 files changed, 152 insertions(+), 14 deletions(-) create mode 100644 ReactCommon/react/renderer/telemetry/Android.mk create mode 100644 ReactCommon/react/renderer/telemetry/BUCK rename ReactCommon/react/renderer/{mounting => telemetry}/SurfaceTelemetry.cpp (100%) rename ReactCommon/react/renderer/{mounting => telemetry}/SurfaceTelemetry.h (96%) rename ReactCommon/react/renderer/{mounting => telemetry}/TransactionTelemetry.cpp (100%) rename ReactCommon/react/renderer/{mounting => telemetry}/TransactionTelemetry.h (100%) rename ReactCommon/react/renderer/{mounting => telemetry}/tests/TransactionTelemetryTest.cpp (98%) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk index a6353d07765..93fc2c03337 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk @@ -11,7 +11,7 @@ LOCAL_MODULE := fabricjni LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) -LOCAL_SHARED_LIBRARIES := libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput librrc_picker libreact_debug libreact_render_mapbuffer libmapbufferjni +LOCAL_SHARED_LIBRARIES := libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput librrc_picker libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry LOCAL_STATIC_LIBRARIES := @@ -61,3 +61,4 @@ $(call import-module,react/renderer/scheduler) $(call import-module,react/renderer/templateprocessor) $(call import-module,react/renderer/textlayoutmanager) $(call import-module,react/renderer/uimanager) +$(call import-module,react/renderer/telemetry) diff --git a/ReactCommon/React-Fabric.podspec b/ReactCommon/React-Fabric.podspec index aa1e3bd374f..05fbf27595a 100644 --- a/ReactCommon/React-Fabric.podspec +++ b/ReactCommon/React-Fabric.podspec @@ -318,6 +318,15 @@ Pod::Spec.new do |s| ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\"" } end + s.subspec "telemetry" do |ss| + ss.dependency folly_dep_name, folly_version + ss.compiler_flags = folly_compiler_flags + ss.source_files = "react/renderer/telemetry/**/*.{m,mm,cpp,h}" + ss.exclude_files = "react/renderer/telemetry/tests" + ss.header_dir = "react/renderer/telemetry" + ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\"" } + end + s.subspec "leakchecker" do |ss| ss.dependency folly_dep_name, folly_version ss.compiler_flags = folly_compiler_flags diff --git a/ReactCommon/react/renderer/components/text/BUCK b/ReactCommon/react/renderer/components/text/BUCK index 9b467be7058..acf17c81a31 100644 --- a/ReactCommon/react/renderer/components/text/BUCK +++ b/ReactCommon/react/renderer/components/text/BUCK @@ -75,6 +75,7 @@ rn_xplat_cxx_library( react_native_xplat_target("react/renderer/mounting:mounting"), react_native_xplat_target("react/renderer/componentregistry:componentregistry"), react_native_xplat_target("react/utils:utils"), + react_native_xplat_target("react/renderer/telemetry:telemetry"), ], ) diff --git a/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp b/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp index 888fc8aadc4..09da2f41760 100644 --- a/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +++ b/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include "ParagraphState.h" diff --git a/ReactCommon/react/renderer/mounting/Android.mk b/ReactCommon/react/renderer/mounting/Android.mk index 672372269bb..9b861ffb2b3 100644 --- a/ReactCommon/react/renderer/mounting/Android.mk +++ b/ReactCommon/react/renderer/mounting/Android.mk @@ -21,7 +21,7 @@ LOCAL_CFLAGS += -fexceptions -frtti -std=c++14 -Wall LOCAL_STATIC_LIBRARIES := -LOCAL_SHARED_LIBRARIES := libbetter libyoga libfolly_futures glog libfolly_json libglog_init libreact_render_core libreact_render_debug librrc_view librrc_root libreact_utils libreact_debug +LOCAL_SHARED_LIBRARIES := libbetter libyoga libfolly_futures glog libfolly_json libglog_init libreact_render_core libreact_render_debug librrc_view librrc_root libreact_utils libreact_debug libreact_render_telemetry include $(BUILD_SHARED_LIBRARY) @@ -36,3 +36,4 @@ $(call import-module,react/renderer/debug) $(call import-module,react/utils) $(call import-module,react/debug) $(call import-module,yogajni) +$(call import-module,react/renderer/telemetry) diff --git a/ReactCommon/react/renderer/mounting/BUCK b/ReactCommon/react/renderer/mounting/BUCK index 19f918c2fda..623ce46c2ee 100644 --- a/ReactCommon/react/renderer/mounting/BUCK +++ b/ReactCommon/react/renderer/mounting/BUCK @@ -62,6 +62,7 @@ rn_xplat_cxx_library( react_native_xplat_target("react/renderer/components/view:view"), react_native_xplat_target("react/renderer/core:core"), react_native_xplat_target("react/renderer/debug:debug"), + react_native_xplat_target("react/renderer/telemetry:telemetry"), react_native_xplat_target("react/utils:utils"), ], ) diff --git a/ReactCommon/react/renderer/mounting/MountingTransaction.h b/ReactCommon/react/renderer/mounting/MountingTransaction.h index e7545f2c339..6f0bbee60fe 100644 --- a/ReactCommon/react/renderer/mounting/MountingTransaction.h +++ b/ReactCommon/react/renderer/mounting/MountingTransaction.h @@ -8,8 +8,8 @@ #pragma once #include -#include -#include +#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/react/renderer/mounting/MountingTransactionMetadata.h b/ReactCommon/react/renderer/mounting/MountingTransactionMetadata.h index 974652bd329..176a34c9cda 100644 --- a/ReactCommon/react/renderer/mounting/MountingTransactionMetadata.h +++ b/ReactCommon/react/renderer/mounting/MountingTransactionMetadata.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 4592c5c35c9..6006539eb0a 100644 --- a/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include "ShadowTreeDelegate.h" diff --git a/ReactCommon/react/renderer/mounting/ShadowTreeRevision.h b/ReactCommon/react/renderer/mounting/ShadowTreeRevision.h index d58dbd64328..50e05ad7741 100644 --- a/ReactCommon/react/renderer/mounting/ShadowTreeRevision.h +++ b/ReactCommon/react/renderer/mounting/ShadowTreeRevision.h @@ -13,7 +13,7 @@ #include #include #include -#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/react/renderer/mounting/TelemetryController.h b/ReactCommon/react/renderer/mounting/TelemetryController.h index c0b3d28ddd2..3911ea30e42 100644 --- a/ReactCommon/react/renderer/mounting/TelemetryController.h +++ b/ReactCommon/react/renderer/mounting/TelemetryController.h @@ -12,7 +12,7 @@ #include #include -#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/react/renderer/telemetry/Android.mk b/ReactCommon/react/renderer/telemetry/Android.mk new file mode 100644 index 00000000000..1642399c7d7 --- /dev/null +++ b/ReactCommon/react/renderer/telemetry/Android.mk @@ -0,0 +1,31 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := react_render_telemetry + +LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/ +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../ + +LOCAL_CFLAGS := \ + -DLOG_TAG=\"Fabric\" + +LOCAL_CFLAGS += -fexceptions -frtti -std=c++14 -Wall + +LOCAL_STATIC_LIBRARIES := + +LOCAL_SHARED_LIBRARIES := libbetter libyoga libfolly_futures glog libfolly_json libglog_init libreact_render_core libreact_render_debug librrc_view librrc_root libreact_utils libreact_debug + +include $(BUILD_SHARED_LIBRARY) + +$(call import-module,better) +$(call import-module,glog) +$(call import-module,folly) +$(call import-module,react/utils) diff --git a/ReactCommon/react/renderer/telemetry/BUCK b/ReactCommon/react/renderer/telemetry/BUCK new file mode 100644 index 00000000000..8376ea44d24 --- /dev/null +++ b/ReactCommon/react/renderer/telemetry/BUCK @@ -0,0 +1,83 @@ +load( + "//tools/build_defs/oss:rn_defs.bzl", + "ANDROID", + "APPLE", + "CXX", + "fb_xplat_cxx_test", + "get_apple_compiler_flags", + "get_apple_inspector_flags", + "get_preprocessor_flags_for_build_mode", + "react_native_xplat_target", + "rn_xplat_cxx_library", + "subdir_glob", +) + +APPLE_COMPILER_FLAGS = get_apple_compiler_flags() + +rn_xplat_cxx_library( + name = "telemetry", + srcs = glob( + ["**/*.cpp"], + exclude = glob(["tests/**/*.cpp"]), + ), + headers = glob( + ["**/*.h"], + exclude = glob(["tests/**/*.h"]), + ), + header_namespace = "", + exported_headers = subdir_glob( + [ + ("", "*.h"), + ("stubs", "*.h"), + ], + prefix = "react/renderer/telemetry", + ), + compiler_flags = [ + "-fexceptions", + "-frtti", + "-std=c++14", + "-Wall", + ], + fbobjc_compiler_flags = APPLE_COMPILER_FLAGS, + fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags(), + force_static = True, + labels = ["supermodule:xplat/default/public.react_native.infra"], + macosx_tests_override = [], + platforms = (ANDROID, APPLE, CXX), + preprocessor_flags = [ + "-DLOG_TAG=\"ReactNative\"", + "-DWITH_FBSYSTRACE=1", + ], + tests = [":tests"], + visibility = ["PUBLIC"], + deps = [ + "//third-party/glog:glog", + "//xplat/fbsystrace:fbsystrace", + "//xplat/folly:headers_only", + "//xplat/folly:memory", + "//xplat/folly:molly", + react_native_xplat_target("better:better"), + react_native_xplat_target("react/debug:debug"), + react_native_xplat_target("react/utils:utils"), + ], +) + +fb_xplat_cxx_test( + name = "tests", + srcs = glob(["tests/**/*.cpp"]), + headers = glob(["tests/**/*.h"]), + compiler_flags = [ + "-fexceptions", + "-frtti", + "-std=c++14", + "-Wall", + ], + contacts = ["oncall+react_native@xmail.facebook.com"], + fbandroid_use_instrumentation_test = True, + platforms = (ANDROID, APPLE, CXX), + deps = [ + ":telemetry", + "//xplat/folly:molly", + "//xplat/third-party/gmock:gtest", + ], +) diff --git a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp b/ReactCommon/react/renderer/telemetry/SurfaceTelemetry.cpp similarity index 100% rename from ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp rename to ReactCommon/react/renderer/telemetry/SurfaceTelemetry.cpp diff --git a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h b/ReactCommon/react/renderer/telemetry/SurfaceTelemetry.h similarity index 96% rename from ReactCommon/react/renderer/mounting/SurfaceTelemetry.h rename to ReactCommon/react/renderer/telemetry/SurfaceTelemetry.h index c99da11a5a7..6a726361200 100644 --- a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h +++ b/ReactCommon/react/renderer/telemetry/SurfaceTelemetry.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include namespace facebook { diff --git a/ReactCommon/react/renderer/mounting/TransactionTelemetry.cpp b/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp similarity index 100% rename from ReactCommon/react/renderer/mounting/TransactionTelemetry.cpp rename to ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp diff --git a/ReactCommon/react/renderer/mounting/TransactionTelemetry.h b/ReactCommon/react/renderer/telemetry/TransactionTelemetry.h similarity index 100% rename from ReactCommon/react/renderer/mounting/TransactionTelemetry.h rename to ReactCommon/react/renderer/telemetry/TransactionTelemetry.h diff --git a/ReactCommon/react/renderer/mounting/tests/TransactionTelemetryTest.cpp b/ReactCommon/react/renderer/telemetry/tests/TransactionTelemetryTest.cpp similarity index 98% rename from ReactCommon/react/renderer/mounting/tests/TransactionTelemetryTest.cpp rename to ReactCommon/react/renderer/telemetry/tests/TransactionTelemetryTest.cpp index e8649f50ff7..484990f5eec 100644 --- a/ReactCommon/react/renderer/mounting/tests/TransactionTelemetryTest.cpp +++ b/ReactCommon/react/renderer/telemetry/tests/TransactionTelemetryTest.cpp @@ -10,7 +10,7 @@ #include -#include +#include #include using namespace facebook::react; diff --git a/ReactCommon/react/renderer/textlayoutmanager/Android.mk b/ReactCommon/react/renderer/textlayoutmanager/Android.mk index 500366152a9..fa2c019592d 100644 --- a/ReactCommon/react/renderer/textlayoutmanager/Android.mk +++ b/ReactCommon/react/renderer/textlayoutmanager/Android.mk @@ -11,7 +11,7 @@ LOCAL_MODULE := react_render_textlayoutmanager LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp $(LOCAL_PATH)/platform/android/react/renderer/textlayoutmanager/*.cpp) -LOCAL_SHARED_LIBRARIES := libfolly_futures libreactnativeutilsjni libreact_utils libfb libfbjni libreact_render_uimanager libreact_render_componentregistry libreact_render_attributedstring libreact_render_mounting libfolly_json libyoga libfolly_json libreact_render_core libreact_render_debug libreact_render_graphics libreact_debug libreact_render_mapbuffer libmapbufferjni +LOCAL_SHARED_LIBRARIES := libfolly_futures libreactnativeutilsjni libreact_utils libfb libfbjni libreact_render_uimanager libreact_render_componentregistry libreact_render_attributedstring libreact_render_mounting libfolly_json libyoga libfolly_json libreact_render_core libreact_render_debug libreact_render_graphics libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry LOCAL_STATIC_LIBRARIES := @@ -40,3 +40,4 @@ $(call import-module,react/renderer/uimanager) $(call import-module,react/utils) $(call import-module,yogajni) $(call import-module,react/renderer/mapbuffer) +$(call import-module,react/renderer/telemetry) diff --git a/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp b/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp index f0ae38f5820..439fdb369af 100644 --- a/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +++ b/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include using namespace facebook::jni; diff --git a/ReactCommon/react/renderer/textlayoutmanager/platform/ios/TextLayoutManager.mm b/ReactCommon/react/renderer/textlayoutmanager/platform/ios/TextLayoutManager.mm index 1a877f50683..887f3726bac 100644 --- a/ReactCommon/react/renderer/textlayoutmanager/platform/ios/TextLayoutManager.mm +++ b/ReactCommon/react/renderer/textlayoutmanager/platform/ios/TextLayoutManager.mm @@ -6,7 +6,7 @@ */ #include "TextLayoutManager.h" -#include +#include #include #import "RCTTextLayoutManager.h" diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index de320237e25..75d577e2a0b 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -264,6 +264,7 @@ PODS: - React-Fabric/leakchecker (= 1000.0.0) - React-Fabric/mounting (= 1000.0.0) - React-Fabric/scheduler (= 1000.0.0) + - React-Fabric/telemetry (= 1000.0.0) - React-Fabric/templateprocessor (= 1000.0.0) - React-Fabric/textlayoutmanager (= 1000.0.0) - React-Fabric/uimanager (= 1000.0.0) @@ -521,6 +522,14 @@ PODS: - React-jsi (= 1000.0.0) - React-jsiexecutor (= 1000.0.0) - ReactCommon/turbomodule/core (= 1000.0.0) + - React-Fabric/telemetry (1000.0.0): + - RCT-Folly/Fabric (= 2020.01.13.00) + - RCTRequired (= 1000.0.0) + - RCTTypeSafety (= 1000.0.0) + - React-graphics (= 1000.0.0) + - React-jsi (= 1000.0.0) + - React-jsiexecutor (= 1000.0.0) + - ReactCommon/turbomodule/core (= 1000.0.0) - React-Fabric/templateprocessor (1000.0.0): - RCT-Folly/Fabric (= 2020.01.13.00) - RCTRequired (= 1000.0.0) @@ -841,7 +850,7 @@ SPEC CHECKSUMS: React-Core: 2d53d893ddeff7a58e7ed51b43a15a3d94c3c4a7 React-CoreModules: c096a150e14753b07dc68a498508da4e55b026e9 React-cxxreact: 14cce64344ab482615dfe82a2cbea6eb73be6481 - React-Fabric: bcced8f57507c2bc11d65f31f83891119fc7a330 + React-Fabric: d99f756e7ead26e764371939265120d3af324564 React-graphics: 246b8e6cb4aad51271358767c965e47d692921ab React-jsi: 08c6628096d2025d4085fbaec8fe14a3c9dc667c React-jsiexecutor: 896c41b04121803e4ee61e4c9ed0900fdb420fea