From 3333b4f95dafa527f5e223089fcf891d0c7cb8e9 Mon Sep 17 00:00:00 2001 From: zhangsizheng Date: Sat, 7 Jun 2025 17:19:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dscopeinfo=E5=BC=95=E8=B5=B7?= =?UTF-8?q?=E7=9A=84=E6=80=A7=E8=83=BD=E5=8A=A3=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangsizheng --- src/js_native_api_v8.cpp | 10 ++++++++++ src/js_native_api_v8.h | 29 +++++++++++++---------------- src/jsvm_util.h | 2 ++ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/js_native_api_v8.cpp b/src/js_native_api_v8.cpp index 3068db8..3b9ca08 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 8e3f165..b2e8052 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 88142df..3da025b 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 { -- Gitee