Improve fbsystrace support

Reviewed By: mhorowitz

Differential Revision: D4756318

fbshipit-source-id: 7811f680a7ad044b5ae028ee9b2fed5f46ce2a63
This commit is contained in:
Pieter De Baets 2017-03-30 06:36:21 -07:00 committed by Facebook Github Bot
parent 12de9729bd
commit 5af30382d5
4 changed files with 12 additions and 16 deletions

View File

@ -301,15 +301,6 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
}
RCTAssert(implClass != nil, @"No bridge implementation is available, giving up.");
#ifdef WITH_FBSYSTRACE
if (implClass == cxxBridgeClass) {
[RCTFBSystrace registerCallbacks];
} else {
[RCTFBSystrace unregisterCallbacks];
}
#endif
return implClass;
}

View File

@ -1139,6 +1139,9 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithBundleURL:(__unused NSURL *)bundleUR
RCTAssertMainQueue();
[self executeBlockOnJavaScriptThread:^{
#if WITH_FBSYSTRACE
[RCTFBSystrace registerCallbacks];
#endif
RCTProfileInit(self);
}];
}
@ -1151,6 +1154,9 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithBundleURL:(__unused NSURL *)bundleUR
RCTProfileEnd(self, ^(NSString *log) {
NSData *logData = [log dataUsingEncoding:NSUTF8StringEncoding];
callback(logData);
#if WITH_FBSYSTRACE
[RCTFBSystrace unregisterCallbacks];
#endif
});
}];
}

View File

@ -175,7 +175,7 @@ typedef struct {
} systrace_arg_t;
typedef struct {
void (*start)(uint64_t enabledTags, char *buffer, size_t bufferSize);
char *(*start)(void);
void (*stop)(void);
void (*begin_section)(uint64_t tag, const char *name, size_t numArgs, systrace_arg_t *args);

View File

@ -455,9 +455,7 @@ void RCTProfileInit(RCTBridge *bridge)
OSAtomicOr32Barrier(1, &RCTProfileProfiling);
if (callbacks != NULL) {
size_t buffer_size = 1 << 22;
systrace_buffer = calloc(1, buffer_size);
callbacks->start(~((uint64_t)0), systrace_buffer, buffer_size);
systrace_buffer = callbacks->start();
} else {
NSTimeInterval time = CACurrentMediaTime();
dispatch_async(RCTProfileGetQueue(), ^{
@ -514,9 +512,10 @@ void RCTProfileEnd(RCTBridge *bridge, void (^callback)(NSString *))
RCTProfileUnhookModules(bridge);
if (callbacks != NULL) {
callbacks->stop();
callback(@(systrace_buffer));
if (systrace_buffer) {
callbacks->stop();
callback(@(systrace_buffer));
}
} else {
dispatch_async(RCTProfileGetQueue(), ^{
NSString *log = RCTJSONStringify(RCTProfileInfo, NULL);