Pull native hook registration into class method

Summary:
Ideally, native hooks should not require any sort of reference to self. Pull all those that fulfill this criteria into a class method (to make it impossible to accidentally capture self).

Future diffs will pull more and more hooks into this category.

Reviewed By: javache

Differential Revision: D3528558

fbshipit-source-id: 270c5bec53674a91ec2129d55e5cad59440a51da
This commit is contained in:
Adam Ernst 2016-07-07 16:36:51 -07:00 committed by Facebook Github Bot 2
parent 96b47eb933
commit dd5bb7b9e0

View File

@ -363,16 +363,7 @@ static void RCTInstallJSCProfiler(RCTBridge *bridge, JSContextRef context)
// Synchronous hooks: // Synchronous hooks:
JSContext *context = strongSelf.context.context; JSContext *context = strongSelf.context.context;
context[@"noop"] = ^{}; [[self class] installSynchronousHooksOnContext:context];
context[@"nativeLoggingHook"] = ^(NSString *message, NSNumber *logLevel) {
RCTLogLevel level = RCTLogLevelInfo;
if (logLevel) {
level = MAX(level, (RCTLogLevel)logLevel.integerValue);
}
_RCTLogJavaScriptInternal(level, message);
};
context[@"nativeRequireModuleConfig"] = ^NSString *(NSString *moduleName) { context[@"nativeRequireModuleConfig"] = ^NSString *(NSString *moduleName) {
RCTJSCExecutor *strongSelf2 = weakSelf; RCTJSCExecutor *strongSelf2 = weakSelf;
@ -398,16 +389,7 @@ static void RCTInstallJSCProfiler(RCTBridge *bridge, JSContextRef context)
RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"js_call", nil); RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"js_call", nil);
}; };
context[@"nativePerformanceNow"] = ^{
return @(CACurrentMediaTime() * 1000);
};
#if RCT_PROFILE #if RCT_PROFILE
if (RCTProfileIsProfiling()) {
// Cheating, since it's not a "hook", but meh
context[@"__RCTProfileIsProfiling"] = @YES;
}
context[@"nativeTraceBeginAsyncSection"] = ^(uint64_t tag, NSString *name, NSUInteger cookie) { context[@"nativeTraceBeginAsyncSection"] = ^(uint64_t tag, NSString *name, NSUInteger cookie) {
RCTJSCExecutor *strongSelf2 = weakSelf; RCTJSCExecutor *strongSelf2 = weakSelf;
if (!strongSelf2) { if (!strongSelf2) {
@ -427,19 +409,6 @@ static void RCTInstallJSCProfiler(RCTBridge *bridge, JSContextRef context)
CFDictionaryRemoveValue(strongSelf2->_cookieMap, (const void *)cookie); CFDictionaryRemoveValue(strongSelf2->_cookieMap, (const void *)cookie);
}; };
context[@"nativeTraceBeginSection"] = ^(NSNumber *tag, NSString *profileName, NSDictionary *args) {
static int profileCounter = 1;
if (!profileName) {
profileName = [NSString stringWithFormat:@"Profile %d", profileCounter++];
}
RCT_PROFILE_BEGIN_EVENT(tag.longLongValue, profileName, args);
};
context[@"nativeTraceEndSection"] = ^(NSNumber *tag) {
RCT_PROFILE_END_EVENT(tag.longLongValue, @"console", nil);
};
context[@"nativeTraceBeginAsyncFlow"] = ^(__unused uint64_t tag, __unused NSString *name, int64_t cookie) { context[@"nativeTraceBeginAsyncFlow"] = ^(__unused uint64_t tag, __unused NSString *name, int64_t cookie) {
if (RCTProfileIsProfiling()) { if (RCTProfileIsProfiling()) {
[weakBridge.flowIDMapLock lock]; [weakBridge.flowIDMapLock lock];
@ -481,6 +450,39 @@ static void RCTInstallJSCProfiler(RCTBridge *bridge, JSContextRef context)
}]; }];
} }
+ (void)installSynchronousHooksOnContext:(JSContext *)context
{
context[@"noop"] = ^{};
context[@"nativeLoggingHook"] = ^(NSString *message, NSNumber *logLevel) {
RCTLogLevel level = RCTLogLevelInfo;
if (logLevel) {
level = MAX(level, (RCTLogLevel)logLevel.integerValue);
}
_RCTLogJavaScriptInternal(level, message);
};
context[@"nativePerformanceNow"] = ^{
return @(CACurrentMediaTime() * 1000);
};
#if RCT_PROFILE
if (RCTProfileIsProfiling()) {
// Cheating, since it's not a "hook", but meh
context[@"__RCTProfileIsProfiling"] = @YES;
}
context[@"nativeTraceBeginSection"] = ^(NSNumber *tag, NSString *profileName, NSDictionary *args) {
static int profileCounter = 1;
if (!profileName) {
profileName = [NSString stringWithFormat:@"Profile %d", profileCounter++];
}
RCT_PROFILE_BEGIN_EVENT(tag.longLongValue, profileName, args);
};
context[@"nativeTraceEndSection"] = ^(NSNumber *tag) {
RCT_PROFILE_END_EVENT(tag.longLongValue, @"console", nil);
};
#endif
}
- (void)toggleProfilingFlag:(NSNotification *)notification - (void)toggleProfilingFlag:(NSNotification *)notification
{ {
[self executeBlockOnJavaScriptQueue:^{ [self executeBlockOnJavaScriptQueue:^{