diff --git a/test-app/runtime/src/main/cpp/com_tns_Runtime.cpp b/test-app/runtime/src/main/cpp/com_tns_Runtime.cpp index 01777f9ab..5395536be 100644 --- a/test-app/runtime/src/main/cpp/com_tns_Runtime.cpp +++ b/test-app/runtime/src/main/cpp/com_tns_Runtime.cpp @@ -25,6 +25,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { return JNI_VERSION_1_6; } +// @FastNative signature - optimized JNI, keeps JNIEnv* for jstring handling extern "C" JNIEXPORT void Java_com_tns_Runtime_SetManualInstrumentationMode(JNIEnv* _env, jobject obj, jstring mode) { try { Runtime::SetManualInstrumentationMode(mode); @@ -214,13 +215,14 @@ extern "C" JNIEXPORT void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv* _e } } -extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv* env, jobject obj, jint runtimeId) { +// @CriticalNative signature - no JNIEnv* or jobject parameters +extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(jint runtimeId) { try { auto runtime = TryGetRuntime(runtimeId); if (runtime == nullptr) { return 0; } - return runtime->GenerateNewObjectId(env, obj); + return runtime->GenerateNewObjectId(nullptr, nullptr); } catch (NativeScriptException& e) { e.ReThrowToJava(); } catch (std::exception e) { @@ -236,6 +238,7 @@ extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv* env, return 0; } +// @FastNative signature - optimized JNI, keeps JNIEnv* for NotifyGC extern "C" JNIEXPORT jboolean Java_com_tns_Runtime_notifyGc(JNIEnv* env, jobject obj, jint runtimeId) { auto runtime = TryGetRuntime(runtimeId); if (runtime == nullptr) { @@ -288,11 +291,13 @@ extern "C" JNIEXPORT void Java_com_tns_Runtime_passExceptionToJsNative(JNIEnv* e } } -extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize(JNIEnv* env, jobject obj) { +// @CriticalNative signature - no JNIEnv* or jobject parameters +extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize() { return sizeof(void*); } -extern "C" JNIEXPORT jint Java_com_tns_Runtime_getCurrentRuntimeId(JNIEnv* _env, jobject obj) { +// @CriticalNative signature - no JNIEnv* or jobject parameters +extern "C" JNIEXPORT jint Java_com_tns_Runtime_getCurrentRuntimeId() { Isolate* isolate = Isolate::TryGetCurrent(); if (isolate == nullptr) { return -1; diff --git a/test-app/runtime/src/main/java/com/tns/Runtime.java b/test-app/runtime/src/main/java/com/tns/Runtime.java index 57f88f9f3..0e565526d 100644 --- a/test-app/runtime/src/main/java/com/tns/Runtime.java +++ b/test-app/runtime/src/main/java/com/tns/Runtime.java @@ -36,6 +36,8 @@ import java.util.concurrent.RunnableFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.Collections; +import dalvik.annotation.optimization.CriticalNative; +import dalvik.annotation.optimization.FastNative; public class Runtime { private native void initNativeScript(int runtimeId, String filesPath, String nativeLibDir, boolean verboseLoggingEnabled, boolean isDebuggable, String packageName, @@ -51,8 +53,10 @@ private native void initNativeScript(int runtimeId, String filesPath, String nat private native void createJSInstanceNative(int runtimeId, Object javaObject, int javaObjectID, String canonicalName); - private native int generateNewObjectId(int runtimeId); + @CriticalNative + private static native int generateNewObjectId(int runtimeId); + @FastNative private native boolean notifyGc(int runtimeId); private native void lock(int runtimeId); @@ -61,10 +65,13 @@ private native void initNativeScript(int runtimeId, String filesPath, String nat private native void passExceptionToJsNative(int runtimeId, Throwable ex, String message, String fullStackTrace, String jsStackTrace, boolean isDiscarded); + @CriticalNative private static native int getCurrentRuntimeId(); + @CriticalNative public static native int getPointerSize(); + @FastNative public static native void SetManualInstrumentationMode(String mode); private static native void WorkerGlobalOnMessageCallback(int runtimeId, String message);