From f3b117abd06b2b8941be63d3e371efe09c114330 Mon Sep 17 00:00:00 2001 From: Max Sherman Date: Fri, 13 Oct 2017 14:00:46 -0700 Subject: [PATCH] Un-revert logMarker for hermes diff Reviewed By: mhorowitz Differential Revision: D6051880 fbshipit-source-id: 0ce4bbed9ba8579033ee5397ff6c0975b6886fb1 --- .../src/main/jni/react/jni/Android.mk | 1 + .../main/jni/react/jni/AndroidJSCFactory.cpp | 50 +-------------- ReactAndroid/src/main/jni/react/jni/BUCK | 1 + .../src/main/jni/react/jni/ReactMarker.cpp | 62 +++++++++++++++++++ .../src/main/jni/react/jni/ReactMarker.h | 24 +++++++ 5 files changed, 90 insertions(+), 48 deletions(-) create mode 100644 ReactAndroid/src/main/jni/react/jni/ReactMarker.cpp create mode 100644 ReactAndroid/src/main/jni/react/jni/ReactMarker.h diff --git a/ReactAndroid/src/main/jni/react/jni/Android.mk b/ReactAndroid/src/main/jni/react/jni/Android.mk index 6f4744a78..cc4cfbb5d 100644 --- a/ReactAndroid/src/main/jni/react/jni/Android.mk +++ b/ReactAndroid/src/main/jni/react/jni/Android.mk @@ -22,6 +22,7 @@ LOCAL_SRC_FILES := \ NativeMap.cpp \ OnLoad.cpp \ ProxyExecutor.cpp \ + ReactMarker.cpp \ ReadableNativeArray.cpp \ ReadableNativeMap.cpp \ WritableNativeArray.cpp \ diff --git a/ReactAndroid/src/main/jni/react/jni/AndroidJSCFactory.cpp b/ReactAndroid/src/main/jni/react/jni/AndroidJSCFactory.cpp index 52924b641..0aba406fc 100644 --- a/ReactAndroid/src/main/jni/react/jni/AndroidJSCFactory.cpp +++ b/ReactAndroid/src/main/jni/react/jni/AndroidJSCFactory.cpp @@ -13,6 +13,7 @@ #include "JSCPerfLogging.h" #include "JSLogging.h" +#include "ReactMarker.h" using namespace facebook::jni; @@ -21,53 +22,6 @@ namespace react { namespace { -class JReactMarker : public JavaClass { - public: - static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/ReactMarker;"; - - static void logMarker(const std::string& marker) { - static auto cls = javaClassStatic(); - static auto meth = cls->getStaticMethod("logMarker"); - meth(cls, marker); - } - - static void logMarker(const std::string& marker, const std::string& tag) { - static auto cls = javaClassStatic(); - static auto meth = cls->getStaticMethod("logMarker"); - meth(cls, marker, tag); - } -}; - -void logPerfMarker(const ReactMarker::ReactMarkerId markerId, const char* tag) { - switch (markerId) { - case ReactMarker::RUN_JS_BUNDLE_START: - JReactMarker::logMarker("RUN_JS_BUNDLE_START", tag); - break; - case ReactMarker::RUN_JS_BUNDLE_STOP: - JReactMarker::logMarker("RUN_JS_BUNDLE_END", tag); - break; - case ReactMarker::CREATE_REACT_CONTEXT_STOP: - JReactMarker::logMarker("CREATE_REACT_CONTEXT_END"); - break; - case ReactMarker::JS_BUNDLE_STRING_CONVERT_START: - JReactMarker::logMarker("loadApplicationScript_startStringConvert"); - break; - case ReactMarker::JS_BUNDLE_STRING_CONVERT_STOP: - JReactMarker::logMarker("loadApplicationScript_endStringConvert"); - break; - case ReactMarker::NATIVE_MODULE_SETUP_START: - JReactMarker::logMarker("NATIVE_MODULE_SETUP_START", tag); - break; - case ReactMarker::NATIVE_MODULE_SETUP_STOP: - JReactMarker::logMarker("NATIVE_MODULE_SETUP_END", tag); - break; - case ReactMarker::NATIVE_REQUIRE_START: - case ReactMarker::NATIVE_REQUIRE_STOP: - // These are not used on Android. - break; - } -} - ExceptionHandling::ExtractedEror extractJniError(const std::exception& ex, const char *context) { auto jniEx = dynamic_cast(&ex); if (!jniEx) { @@ -126,7 +80,7 @@ namespace detail { void injectJSCExecutorAndroidPlatform() { // Inject some behavior into react/ - ReactMarker::logTaggedMarker = logPerfMarker; + JReactMarker::setLogPerfMarkerIfNeeded(); ExceptionHandling::platformErrorExtractor = extractJniError; JSCNativeHooks::loggingHook = nativeLoggingHook; JSCNativeHooks::nowHook = nativePerformanceNow; diff --git a/ReactAndroid/src/main/jni/react/jni/BUCK b/ReactAndroid/src/main/jni/react/jni/BUCK index 36f6faaba..32878cae6 100644 --- a/ReactAndroid/src/main/jni/react/jni/BUCK +++ b/ReactAndroid/src/main/jni/react/jni/BUCK @@ -13,6 +13,7 @@ EXPORTED_HEADERS = [ "NativeArray.h", "NativeCommon.h", "NativeMap.h", + "ReactMarker.h", "ReadableNativeArray.h", "ReadableNativeMap.h", "WritableNativeArray.h", diff --git a/ReactAndroid/src/main/jni/react/jni/ReactMarker.cpp b/ReactAndroid/src/main/jni/react/jni/ReactMarker.cpp new file mode 100644 index 000000000..c4680eedf --- /dev/null +++ b/ReactAndroid/src/main/jni/react/jni/ReactMarker.cpp @@ -0,0 +1,62 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "ReactMarker.h" +#include +#include +#include +#include + +namespace facebook { +namespace react { + +void JReactMarker::setLogPerfMarkerIfNeeded() { + static std::once_flag flag {}; + std::call_once(flag, [](){ + ReactMarker::logTaggedMarker = JReactMarker::logPerfMarker; + }); +} + +void JReactMarker::logMarker(const std::string& marker) { + static auto cls = javaClassStatic(); + static auto meth = cls->getStaticMethod("logMarker"); + meth(cls, marker); +} + +void JReactMarker::logMarker(const std::string& marker, const std::string& tag) { + static auto cls = javaClassStatic(); + static auto meth = cls->getStaticMethod("logMarker"); + meth(cls, marker, tag); +} + +void JReactMarker::logPerfMarker(const ReactMarker::ReactMarkerId markerId, const char* tag) { + switch (markerId) { + case ReactMarker::RUN_JS_BUNDLE_START: + JReactMarker::logMarker("RUN_JS_BUNDLE_START", tag); + break; + case ReactMarker::RUN_JS_BUNDLE_STOP: + JReactMarker::logMarker("RUN_JS_BUNDLE_END", tag); + break; + case ReactMarker::CREATE_REACT_CONTEXT_STOP: + JReactMarker::logMarker("CREATE_REACT_CONTEXT_END"); + break; + case ReactMarker::JS_BUNDLE_STRING_CONVERT_START: + JReactMarker::logMarker("loadApplicationScript_startStringConvert"); + break; + case ReactMarker::JS_BUNDLE_STRING_CONVERT_STOP: + JReactMarker::logMarker("loadApplicationScript_endStringConvert"); + break; + case ReactMarker::NATIVE_MODULE_SETUP_START: + JReactMarker::logMarker("NATIVE_MODULE_SETUP_START", tag); + break; + case ReactMarker::NATIVE_MODULE_SETUP_STOP: + JReactMarker::logMarker("NATIVE_MODULE_SETUP_END", tag); + break; + case ReactMarker::NATIVE_REQUIRE_START: + case ReactMarker::NATIVE_REQUIRE_STOP: + // These are not used on Android. + break; + } +} + +} +} diff --git a/ReactAndroid/src/main/jni/react/jni/ReactMarker.h b/ReactAndroid/src/main/jni/react/jni/ReactMarker.h new file mode 100644 index 000000000..7f918c77c --- /dev/null +++ b/ReactAndroid/src/main/jni/react/jni/ReactMarker.h @@ -0,0 +1,24 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include +#include +#include + +namespace facebook { +namespace react { + +class JReactMarker : public facebook::jni::JavaClass { +public: + static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/ReactMarker;"; + static void setLogPerfMarkerIfNeeded(); + +private: + static void logMarker(const std::string& marker); + static void logMarker(const std::string& marker, const std::string& tag); + static void logPerfMarker(const ReactMarker::ReactMarkerId markerId, const char* tag); +}; + +} +}