diff --git a/src/js_native_api_v8.cpp b/src/js_native_api_v8.cpp index 3068db85b8d2aed68389d5d4b80083d6e6961273..3b9ca086baab50ea14beb38fa7c2d606fd430b6c 100644 --- a/src/js_native_api_v8.cpp +++ b/src/js_native_api_v8.cpp @@ -43,6 +43,16 @@ #error Unsupported Perfetto. #endif // V8_USE_PERFETTO #define TRACE_DISABLED_BY_DEFAULT(name) "disabled-by-default-" name + +FORCE_NOINLINE void AddValueToScopeCheck( + JSVM_Env env, JSVM_Value val, const char *callerFunctionName, bool isEscape = false) +{ + if (UNLIKELY((env)->debugFlags & (1 << JSVM_SCOPE_CHECK)) && (val)) { + LOG(Info) << "ADD_VAL_TO_SCOPE_CHECK in function: " << callerFunctionName; + (env)->GetScopeTracker()->AddJSVMVal(val, isEscape); + } +} + namespace v8impl { namespace { diff --git a/src/js_native_api_v8.h b/src/js_native_api_v8.h index 8e3f1659fc39ec90785441214c9025cdbe92c09b..b2e805210139087b4b7ab111d2cd70f12c8f6a20 100644 --- a/src/js_native_api_v8.h +++ b/src/js_native_api_v8.h @@ -190,24 +190,21 @@ inline JSVM_Status SetLastError(JSVM_Env env, #define JSVM_PRIVATE_KEY(isolate, suffix) (v8impl::GetIsolateData(isolate)->suffix##Key.Get(isolate)) -#define ADD_VAL_TO_SCOPE_CHECK(env, val) \ - do { \ - if (UNLIKELY((env)->debugFlags)) { \ - if (UNLIKELY((env)->debugFlags & (1 << JSVM_SCOPE_CHECK)) && (val)) { \ - LOG(Info) << "ADD_VAL_TO_SCOPE_CHECK in function: " << __func__; \ - (env)->GetScopeTracker()->AddJSVMVal(val); \ - } \ - } \ +FORCE_NOINLINE void AddValueToScopeCheck(JSVM_Env env, JSVM_Value val); +FORCE_NOINLINE void AddValueToEscapeScopeCheck(JSVM_Env env, JSVM_Value val); + +#define ADD_VAL_TO_SCOPE_CHECK(env, val) \ + do { \ + if (UNLIKELY((env)->debugFlags)) { \ + AddValueToScopeCheck(env, val, __func__); \ + } \ } while (0) -#define ADD_VAL_TO_ESCAPE_SCOPE_CHECK(env, val) \ - do { \ - if (UNLIKELY((env)->debugFlags)) { \ - if (UNLIKELY((env)->debugFlags & (1 << JSVM_SCOPE_CHECK)) && (val)) { \ - LOG(Info) << "ADD_VAL_TO_SCOPE_CHECK in function: " << __func__; \ - (env)->GetScopeTracker()->AddJSVMVal(val, true); \ - } \ - } \ +#define ADD_VAL_TO_ESCAPE_SCOPE_CHECK(env, val) \ + do { \ + if (UNLIKELY((env)->debugFlags)) { \ + AddValueToScopeCheck(env, val, __func__, true); \ + } \ } while (0) #define CHECK_SCOPE(env, val) \ diff --git a/src/jsvm_util.h b/src/jsvm_util.h index 88142dfdee642ef7858259aedbfc1fd3c451717d..3da025b3c03d63adc7aed192e844e7cedc757432 100644 --- a/src/jsvm_util.h +++ b/src/jsvm_util.h @@ -49,8 +49,10 @@ #ifdef __GNUC__ #define FORCE_INLINE __attribute__((always_inline)) +#define FORCE_NOINLINE __attribute__((noinline)) #else #define FORCE_INLINE +#define FORCE_NOINLINE #endif namespace jsvm {