From 809d01095ed7ca65a6373f7ac1f93979ecde7e17 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 1 Nov 2019 11:54:44 -0700 Subject: [PATCH] Make RCTPerfMonitor TurboModule-compatible Summary: See title. Changelog: [iOS][Added] - Make RCTPerfMonitor TurboModule-compatible Reviewed By: shergin Differential Revision: D18145947 fbshipit-source-id: df2f0d60a4924f094cc4ec311b6bf570fb9fb7e1 --- React/CoreModules/BUCK | 3 ++ React/CoreModules/CoreModulesPlugins.h | 1 + React/CoreModules/CoreModulesPlugins.mm | 1 + React/{Profiler => CoreModules}/RCTFPSGraph.h | 0 React/{Profiler => CoreModules}/RCTFPSGraph.m | 2 +- .../RCTPerfMonitor.mm} | 52 ++++++++++++------- 6 files changed, 38 insertions(+), 21 deletions(-) rename React/{Profiler => CoreModules}/RCTFPSGraph.h (100%) rename React/{Profiler => CoreModules}/RCTFPSGraph.m (98%) rename React/{Profiler/RCTPerfMonitor.m => CoreModules/RCTPerfMonitor.mm} (93%) diff --git a/React/CoreModules/BUCK b/React/CoreModules/BUCK index 982bef44c77..6876b0a58cf 100644 --- a/React/CoreModules/BUCK +++ b/React/CoreModules/BUCK @@ -84,6 +84,9 @@ rn_apple_library( ) + react_module_plugin_providers( name = "AppState", native_class_func = "RCTAppStateCls", + ) + react_module_plugin_providers( + name = "PerfMonitor", + native_class_func = "RCTPerfMonitorCls", ), plugins_header = "FBCoreModulesPlugins.h", preprocessor_flags = OBJC_ARC_PREPROCESSOR_FLAGS + get_debug_preprocessor_flags() + rn_extra_build_flags() + [ diff --git a/React/CoreModules/CoreModulesPlugins.h b/React/CoreModules/CoreModulesPlugins.h index fd33cfd0941..91170fa918d 100644 --- a/React/CoreModules/CoreModulesPlugins.h +++ b/React/CoreModules/CoreModulesPlugins.h @@ -44,6 +44,7 @@ Class RCTTimingCls(void) __attribute__((used)); Class RCTStatusBarManagerCls(void) __attribute__((used)); Class RCTKeyboardObserverCls(void) __attribute__((used)); Class RCTAppStateCls(void) __attribute__((used)); +Class RCTPerfMonitorCls(void) __attribute__((used)); #ifdef __cplusplus } diff --git a/React/CoreModules/CoreModulesPlugins.mm b/React/CoreModules/CoreModulesPlugins.mm index 09f65753f12..6f12cfe2e39 100644 --- a/React/CoreModules/CoreModulesPlugins.mm +++ b/React/CoreModules/CoreModulesPlugins.mm @@ -33,6 +33,7 @@ Class RCTCoreModulesClassProvider(const char *name) { {"StatusBarManager", RCTStatusBarManagerCls}, {"KeyboardObserver", RCTKeyboardObserverCls}, {"AppState", RCTAppStateCls}, + {"PerfMonitor", RCTPerfMonitorCls}, }; auto p = sCoreModuleClassMap.find(name); diff --git a/React/Profiler/RCTFPSGraph.h b/React/CoreModules/RCTFPSGraph.h similarity index 100% rename from React/Profiler/RCTFPSGraph.h rename to React/CoreModules/RCTFPSGraph.h diff --git a/React/Profiler/RCTFPSGraph.m b/React/CoreModules/RCTFPSGraph.m similarity index 98% rename from React/Profiler/RCTFPSGraph.m rename to React/CoreModules/RCTFPSGraph.m index 66256c9a402..c936e89ea62 100644 --- a/React/Profiler/RCTFPSGraph.m +++ b/React/CoreModules/RCTFPSGraph.m @@ -7,7 +7,7 @@ #import "RCTFPSGraph.h" -#import "RCTAssert.h" +#import #if RCT_DEV diff --git a/React/Profiler/RCTPerfMonitor.m b/React/CoreModules/RCTPerfMonitor.mm similarity index 93% rename from React/Profiler/RCTPerfMonitor.m rename to React/CoreModules/RCTPerfMonitor.mm index a1c52bf456e..3f710ae1333 100644 --- a/React/Profiler/RCTPerfMonitor.m +++ b/React/CoreModules/RCTPerfMonitor.mm @@ -5,7 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -#import "RCTDefines.h" +#import + +#import "CoreModulesPlugins.h" #if RCT_DEV @@ -13,19 +15,21 @@ #import -#import "RCTBridge.h" -#import "RCTDevSettings.h" -#import "RCTFPSGraph.h" -#import "RCTInvalidating.h" -#import "RCTJavaScriptExecutor.h" -#import "RCTPerformanceLogger.h" -#import "RCTRootView.h" -#import "RCTUIManager.h" -#import "RCTBridge+Private.h" -#import "RCTUtils.h" +#import -#if __has_include("RCTDevMenu.h") -#import "RCTDevMenu.h" +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#if __has_include() +#import #endif static NSString *const RCTPerfMonitorCellIdentifier = @"RCTPerfMonitorCellIdentifier"; @@ -46,7 +50,7 @@ static BOOL RCTJSCSetOption(const char *option) * * JSC::Options::setOptions - JavaScriptCore/runtime/Options.h */ - setOption = dlsym(RTLD_DEFAULT, "_ZN3JSC7Options9setOptionEPKc"); + setOption = reinterpret_cast(dlsym(RTLD_DEFAULT, "_ZN3JSC7Options9setOptionEPKc")); if (RCT_DEBUG && setOption == NULL) { RCTLogWarn(@"The symbol used to enable JSC runtime options is not available in this iOS version"); @@ -68,13 +72,13 @@ static vm_size_t RCTGetResidentMemorySize(void) kern_return_t kernelReturn = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count); if(kernelReturn == KERN_SUCCESS) { memoryUsageInByte = (vm_size_t) vmInfo.phys_footprint; - } + } return memoryUsageInByte; } -@interface RCTPerfMonitor : NSObject +@interface RCTPerfMonitor : NSObject -#if __has_include("RCTDevMenu.h") +#if __has_include() @property (nonatomic, strong, readonly) RCTDevMenuItem *devMenuItem; #endif @property (nonatomic, strong, readonly) UIPanGestureRecognizer *gestureRecognizer; @@ -91,7 +95,7 @@ static vm_size_t RCTGetResidentMemorySize(void) @end @implementation RCTPerfMonitor { -#if __has_include("RCTDevMenu.h") +#if __has_include() RCTDevMenuItem *_devMenuItem; #endif UIPanGestureRecognizer *_gestureRecognizer; @@ -140,7 +144,7 @@ RCT_EXPORT_MODULE() { _bridge = bridge; -#if __has_include("RCTDevMenu.h") +#if __has_include() [_bridge.devMenu addItem:self.devMenuItem]; #endif } @@ -150,7 +154,7 @@ RCT_EXPORT_MODULE() [self hide]; } -#if __has_include("RCTDevMenu.h") +#if __has_include() - (RCTDevMenuItem *)devMenuItem { if (!_devMenuItem) { @@ -576,3 +580,11 @@ heightForRowAtIndexPath:(__unused NSIndexPath *)indexPath @end #endif + +Class RCTPerfMonitorCls(void) { +#if RCT_DEV + return RCTPerfMonitor.class; +#else + return nil; +#endif +}