From ba029becbeddc674514c565c663d597f5b328ff2 Mon Sep 17 00:00:00 2001 From: Alexey Lang Date: Fri, 17 Feb 2017 05:47:28 -0800 Subject: [PATCH] Support QuickPerformanceLogger.js in CxxBridge Reviewed By: javache Differential Revision: D4573567 fbshipit-source-id: 3ef9da38fb178cf4c1400b4a991a9e85f3ec3755 --- React/Base/RCTBridge+Private.h | 4 ++++ React/Base/RCTBridge.m | 2 ++ React/CxxBridge/RCTCxxBridge.mm | 2 +- React/Executors/RCTJSCExecutor.mm | 5 +---- ReactCommon/cxxreact/JSCExecutor.cpp | 3 ++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/React/Base/RCTBridge+Private.h b/React/Base/RCTBridge+Private.h index a4c329983..e3f015624 100644 --- a/React/Base/RCTBridge+Private.h +++ b/React/Base/RCTBridge+Private.h @@ -7,6 +7,8 @@ * of patent rights can be found in the PATENTS file in the same directory. */ +#import + #import @class RCTModuleData; @@ -14,6 +16,8 @@ RCT_EXTERN NSArray *RCTGetModuleClasses(void); +RCT_EXTERN __attribute__((weak)) void RCTFBQuickPerformanceLoggerConfigureHooks(JSGlobalContextRef ctx); + #if RCT_DEBUG RCT_EXTERN void RCTVerifyAllModulesExported(NSArray *extraModules); #endif diff --git a/React/Base/RCTBridge.m b/React/Base/RCTBridge.m index 190b2762a..5fa260caf 100644 --- a/React/Base/RCTBridge.m +++ b/React/Base/RCTBridge.m @@ -32,6 +32,8 @@ NSArray *RCTGetModuleClasses(void) return RCTModuleClasses; } +void RCTFBQuickPerformanceLoggerConfigureHooks(__unused JSGlobalContextRef ctx) { } + /** * Register the given class as a bridge module. All modules must be registered * prior to the first bridge initialization. diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index e4a634498..c8d19c14e 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -244,7 +244,7 @@ struct RCTInstanceCallback : public InstanceCallback { { if (self == [RCTCxxBridge class]) { ReactMarker::logMarker = [](const std::string&) {}; - PerfLogging::installNativeHooks = [](JSGlobalContextRef){}; + PerfLogging::installNativeHooks = RCTFBQuickPerformanceLoggerConfigureHooks; JSNativeHooks::loggingHook = nativeLoggingHook; JSNativeHooks::nowHook = nativePerformanceNow; } diff --git a/React/Executors/RCTJSCExecutor.mm b/React/Executors/RCTJSCExecutor.mm index b83262d87..5ce5fb2f0 100644 --- a/React/Executors/RCTJSCExecutor.mm +++ b/React/Executors/RCTJSCExecutor.mm @@ -40,9 +40,6 @@ RCT_EXTERN NSString *const RCTFBJSValueClassKey = @"_RCTFBJSValueClassKey"; static NSString *const RCTJSCProfilerEnabledDefaultsKey = @"RCTJSCProfilerEnabled"; -__attribute__((weak)) void RCTFBQuickPerformanceLoggerConfigureHooks(JSContext *context); -void RCTFBQuickPerformanceLoggerConfigureHooks(JSContext *context) { } - struct __attribute__((packed)) ModuleData { uint32_t offset; uint32_t size; @@ -344,7 +341,7 @@ static NSThread *newJavaScriptThread(void) threadDictionary[RCTFBJSValueClassKey] = JSC_JSValue(contextRef); } - RCTFBQuickPerformanceLoggerConfigureHooks(context); + RCTFBQuickPerformanceLoggerConfigureHooks(context.JSGlobalContextRef); __weak RCTJSCExecutor *weakSelf = self; context[@"nativeRequireModuleConfig"] = ^NSArray *(NSString *moduleName) { diff --git a/ReactCommon/cxxreact/JSCExecutor.cpp b/ReactCommon/cxxreact/JSCExecutor.cpp index d44145769..4dd5139b3 100644 --- a/ReactCommon/cxxreact/JSCExecutor.cpp +++ b/ReactCommon/cxxreact/JSCExecutor.cpp @@ -279,9 +279,10 @@ void JSCExecutor::initOnJSVMThread() throw(JSException) { #ifdef WITH_JSC_EXTRA_TRACING addNativeProfilingHooks(m_context); addNativeTracingLegacyHooks(m_context); - PerfLogging::installNativeHooks(m_context); #endif + PerfLogging::installNativeHooks(m_context); + #if defined(__APPLE__) || defined(WITH_JSC_EXTRA_TRACING) if (JSC_JSSamplingProfilerEnabled(m_context)) { initSamplingProfilerOnMainJSCThread(m_context);