Skip to content

Commit 085bc4f

Browse files
authored
feat: add @CriticalNative and @FastNative to safe methods (#1921)
1 parent 1fd144f commit 085bc4f

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

test-app/runtime/src/main/cpp/com_tns_Runtime.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
2525
return JNI_VERSION_1_6;
2626
}
2727

28+
// @FastNative signature - optimized JNI, keeps JNIEnv* for jstring handling
2829
extern "C" JNIEXPORT void Java_com_tns_Runtime_SetManualInstrumentationMode(JNIEnv* _env, jobject obj, jstring mode) {
2930
try {
3031
Runtime::SetManualInstrumentationMode(mode);
@@ -214,13 +215,14 @@ extern "C" JNIEXPORT void Java_com_tns_Runtime_createJSInstanceNative(JNIEnv* _e
214215
}
215216
}
216217

217-
extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv* env, jobject obj, jint runtimeId) {
218+
// @CriticalNative signature - no JNIEnv* or jobject parameters
219+
extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(jint runtimeId) {
218220
try {
219221
auto runtime = TryGetRuntime(runtimeId);
220222
if (runtime == nullptr) {
221223
return 0;
222224
}
223-
return runtime->GenerateNewObjectId(env, obj);
225+
return runtime->GenerateNewObjectId(nullptr, nullptr);
224226
} catch (NativeScriptException& e) {
225227
e.ReThrowToJava();
226228
} catch (std::exception e) {
@@ -236,6 +238,7 @@ extern "C" JNIEXPORT jint Java_com_tns_Runtime_generateNewObjectId(JNIEnv* env,
236238
return 0;
237239
}
238240

241+
// @FastNative signature - optimized JNI, keeps JNIEnv* for NotifyGC
239242
extern "C" JNIEXPORT jboolean Java_com_tns_Runtime_notifyGc(JNIEnv* env, jobject obj, jint runtimeId) {
240243
auto runtime = TryGetRuntime(runtimeId);
241244
if (runtime == nullptr) {
@@ -288,11 +291,13 @@ extern "C" JNIEXPORT void Java_com_tns_Runtime_passExceptionToJsNative(JNIEnv* e
288291
}
289292
}
290293

291-
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize(JNIEnv* env, jobject obj) {
294+
// @CriticalNative signature - no JNIEnv* or jobject parameters
295+
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getPointerSize() {
292296
return sizeof(void*);
293297
}
294298

295-
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getCurrentRuntimeId(JNIEnv* _env, jobject obj) {
299+
// @CriticalNative signature - no JNIEnv* or jobject parameters
300+
extern "C" JNIEXPORT jint Java_com_tns_Runtime_getCurrentRuntimeId() {
296301
Isolate* isolate = Isolate::TryGetCurrent();
297302
if (isolate == nullptr) {
298303
return -1;

test-app/runtime/src/main/java/com/tns/Runtime.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import java.util.concurrent.RunnableFuture;
3737
import java.util.concurrent.atomic.AtomicInteger;
3838
import java.util.Collections;
39+
import dalvik.annotation.optimization.CriticalNative;
40+
import dalvik.annotation.optimization.FastNative;
3941

4042
public class Runtime {
4143
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
5153

5254
private native void createJSInstanceNative(int runtimeId, Object javaObject, int javaObjectID, String canonicalName);
5355

54-
private native int generateNewObjectId(int runtimeId);
56+
@CriticalNative
57+
private static native int generateNewObjectId(int runtimeId);
5558

59+
@FastNative
5660
private native boolean notifyGc(int runtimeId);
5761

5862
private native void lock(int runtimeId);
@@ -61,10 +65,13 @@ private native void initNativeScript(int runtimeId, String filesPath, String nat
6165

6266
private native void passExceptionToJsNative(int runtimeId, Throwable ex, String message, String fullStackTrace, String jsStackTrace, boolean isDiscarded);
6367

68+
@CriticalNative
6469
private static native int getCurrentRuntimeId();
6570

71+
@CriticalNative
6672
public static native int getPointerSize();
6773

74+
@FastNative
6875
public static native void SetManualInstrumentationMode(String mode);
6976

7077
private static native void WorkerGlobalOnMessageCallback(int runtimeId, String message);

0 commit comments

Comments
 (0)