mirror of
https://github.com/status-im/react-native.git
synced 2025-02-05 14:13:26 +00:00
timer markings from JS JNI
Differential Revision: D2545138 fb-gh-sync-id: f93670ad929dbe37d641968e506108c6aac0cac2
This commit is contained in:
parent
8ddd3e864e
commit
4ec5161685
@ -84,6 +84,8 @@ public class NativeModuleRegistry {
|
||||
|
||||
/* package */ void notifyCatalystInstanceInitialized() {
|
||||
UiThreadUtil.assertOnUiThread();
|
||||
|
||||
ReactMarker.logMarker("NativeModule_start");
|
||||
Systrace.beginSection(
|
||||
Systrace.TRACE_TAG_REACT_JAVA_BRIDGE,
|
||||
"NativeModuleRegistry_notifyCatalystInstanceInitialized");
|
||||
@ -93,6 +95,7 @@ public class NativeModuleRegistry {
|
||||
}
|
||||
} finally {
|
||||
Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE);
|
||||
ReactMarker.logMarker("NativeModule_end");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,30 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
package com.facebook.react.bridge;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
/**
|
||||
* Static class that allows markers to be placed in React code and responded to in a
|
||||
* configurable way
|
||||
*/
|
||||
public class ReactMarker {
|
||||
|
||||
public interface MarkerListener {
|
||||
void logMarker(String name);
|
||||
};
|
||||
|
||||
@Nullable static private MarkerListener sMarkerListener = null;
|
||||
|
||||
static public void setMarkerListener(MarkerListener listener) {
|
||||
sMarkerListener = listener;
|
||||
}
|
||||
|
||||
@DoNotStrip
|
||||
static public void logMarker(String name) {
|
||||
if (sMarkerListener != null) {
|
||||
sMarkerListener.logMarker(name);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -552,6 +552,7 @@ namespace bridge {
|
||||
|
||||
static jmethodID gCallbackMethod;
|
||||
static jmethodID gOnBatchCompleteMethod;
|
||||
static jmethodID gLogMarkerMethod;
|
||||
|
||||
static void makeJavaCall(JNIEnv* env, jobject callback, MethodCall&& call) {
|
||||
if (call.arguments.isNull()) {
|
||||
@ -619,21 +620,31 @@ static void create(JNIEnv* env, jobject obj, jobject executor, jobject callback,
|
||||
|
||||
static void loadScriptFromAssets(JNIEnv* env, jobject obj, jobject assetManager,
|
||||
jstring assetName) {
|
||||
jclass markerClass = env->FindClass("com/facebook/react/bridge/ReactMarker");
|
||||
|
||||
auto bridge = extractRefPtr<Bridge>(env, obj);
|
||||
auto assetNameStr = fromJString(env, assetName);
|
||||
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_start"));
|
||||
auto script = react::loadScriptFromAssets(env, assetManager, assetNameStr);
|
||||
#ifdef WITH_FBSYSTRACE
|
||||
FbSystraceSection s(TRACE_TAG_REACT_CXX_BRIDGE, "reactbridge_jni_"
|
||||
"executeApplicationScript",
|
||||
"assetName", assetNameStr);
|
||||
#endif
|
||||
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_read"));
|
||||
bridge->executeApplicationScript(script, assetNameStr);
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_done"));
|
||||
}
|
||||
|
||||
static void loadScriptFromNetworkCached(JNIEnv* env, jobject obj, jstring sourceURL,
|
||||
jstring tempFileName) {
|
||||
jclass markerClass = env->FindClass("com/facebook/react/bridge/ReactMarker");
|
||||
|
||||
auto bridge = jni::extractRefPtr<Bridge>(env, obj);
|
||||
std::string script = "";
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_start"));
|
||||
if (tempFileName != NULL) {
|
||||
script = react::loadScriptFromFile(jni::fromJString(env, tempFileName));
|
||||
}
|
||||
@ -643,7 +654,9 @@ static void loadScriptFromNetworkCached(JNIEnv* env, jobject obj, jstring source
|
||||
"executeApplicationScript",
|
||||
"sourceURL", sourceURLStr);
|
||||
#endif
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_read"));
|
||||
bridge->executeApplicationScript(script, jni::fromJString(env, sourceURL));
|
||||
env->CallStaticVoidMethod(markerClass, gLogMarkerMethod, env->NewStringUTF("loadScriptFromNetworkCached_exec"));
|
||||
}
|
||||
|
||||
static void callFunction(JNIEnv* env, jobject obj, jint moduleId, jint methodId,
|
||||
@ -787,6 +800,9 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
bridge::gCallbackMethod = env->GetMethodID(callbackClass, "call", "(IILcom/facebook/react/bridge/ReadableNativeArray;)V");
|
||||
bridge::gOnBatchCompleteMethod = env->GetMethodID(callbackClass, "onBatchComplete", "()V");
|
||||
|
||||
jclass markerClass = env->FindClass("com/facebook/react/bridge/ReactMarker");
|
||||
bridge::gLogMarkerMethod = env->GetStaticMethodID(markerClass, "logMarker", "(Ljava/lang/String;)V");
|
||||
|
||||
registerNatives("com/facebook/react/bridge/ReactBridge", {
|
||||
makeNativeMethod("initialize", "(Lcom/facebook/react/bridge/JavaScriptExecutor;Lcom/facebook/react/bridge/ReactCallback;Lcom/facebook/react/bridge/queue/MessageQueueThread;)V", bridge::create),
|
||||
makeNativeMethod(
|
||||
|
Loading…
x
Reference in New Issue
Block a user