Add more profiling, fix existing profiling, perf fix

Reviewed By: javache

Differential Revision: D3807467

fbshipit-source-id: 3ff6feebd6d7966952152bac708389506de721e6
This commit is contained in:
Marc Horowitz 2016-09-02 12:43:14 -07:00 committed by Facebook Github Bot 4
parent d7fdc448d5
commit 3940f06211
3 changed files with 11 additions and 4 deletions

View File

@ -83,7 +83,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init);
- (void)setUpInstanceAndBridge
{
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setUpInstanceAndBridge] [_instanceLock lock]", @{ @"moduleClass": _moduleClass });
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setUpInstanceAndBridge] [_instanceLock lock]", @{ @"moduleClass": NSStringFromClass(_moduleClass) });
{
std::unique_lock<std::mutex> lock(_instanceLock);
@ -92,7 +92,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init);
if (RCT_DEBUG && _requiresMainQueueSetup) {
RCTAssertMainQueue();
}
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setUpInstanceAndBridge] [_moduleClass new]", @{ @"moduleClass": _moduleClass });
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setUpInstanceAndBridge] [_moduleClass new]", @{ @"moduleClass": NSStringFromClass(_moduleClass) });
_instance = [_moduleClass new];
RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"", nil);
if (!_instance) {
@ -293,8 +293,8 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init);
self->_constantsToExport = [self->_instance constantsToExport] ?: @{};
}, YES);
#pragma clang diagnostic pop
RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"", nil);
}
RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"", nil);
}
- (NSArray *)config

View File

@ -332,6 +332,7 @@ void JSCExecutor::setJSModulesUnbundle(std::unique_ptr<JSModulesUnbundle> unbund
}
void JSCExecutor::bindBridge() throw(JSException) {
SystraceSection s("JSCExecutor::bindBridge");
auto global = Object::getGlobalObject(m_context);
auto batchedBridgeValue = global.getProperty("__fbBatchedBridge");
if (batchedBridgeValue.isUndefined()) {
@ -345,11 +346,12 @@ void JSCExecutor::bindBridge() throw(JSException) {
}
void JSCExecutor::callNativeModules(Value&& value) {
SystraceSection s("JSCExecutor::callNativeModules");
try {
auto calls = value.toJSONString();
m_delegate->callNativeModules(*this, std::move(calls), true);
} catch (...) {
std::string message = "Error in flush()";
std::string message = "Error in callNativeModules()";
try {
message += ":" + value.toString().str();
} catch (...) {
@ -360,10 +362,12 @@ void JSCExecutor::callNativeModules(Value&& value) {
}
void JSCExecutor::flush() {
SystraceSection s("JSCExecutor::flush");
callNativeModules(m_flushedQueueJS->callAsFunction({}));
}
void JSCExecutor::callFunction(const std::string& moduleId, const std::string& methodId, const folly::dynamic& arguments) {
SystraceSection s("JSCExecutor::callFunction");
// This weird pattern is because Value is not default constructible.
// The lambda is inlined, so there's no overhead.
@ -384,6 +388,7 @@ void JSCExecutor::callFunction(const std::string& moduleId, const std::string& m
}
void JSCExecutor::invokeCallback(const double callbackId, const folly::dynamic& arguments) {
SystraceSection s("JSCExecutor::invokeCallback");
auto result = [&] {
try {
return m_invokeCallbackAndReturnFlushedQueueJS->callAsFunction({

View File

@ -6,6 +6,7 @@
#include <folly/String.h>
#include <glog/logging.h>
#include "SystraceSection.h"
#include "Value.h"
namespace facebook {
@ -41,6 +42,7 @@ String jsStringFromBigString(const JSBigString& bigstr) {
}
JSValueRef evaluateScript(JSContextRef context, JSStringRef script, JSStringRef source) {
SystraceSection s("evaluateScript");
JSValueRef exn, result;
result = JSEvaluateScript(context, script, NULL, source, 0, &exn);
if (result == nullptr) {