diff --git a/driver/js/src/napi/jsh/jsh_ctx.cc b/driver/js/src/napi/jsh/jsh_ctx.cc index 5192a8e41c6..7a446247b16 100644 --- a/driver/js/src/napi/jsh/jsh_ctx.cc +++ b/driver/js/src/napi/jsh/jsh_ctx.cc @@ -372,6 +372,19 @@ std::shared_ptr JSHCtx::InternalRunScript( if(!CheckJSVMStatus(env_, status)) { return nullptr; } + if (!script) { + return nullptr; + } + if (cacheRejected) { + const uint8_t *data = nullptr; + size_t length = 0; + status = OH_JSVM_CreateCodeCache(env_, script, &data, &length); + FOOTSTONE_DCHECK(status == JSVM_OK); + if (status == JSVM_OK && data && length > 0) { + *cache = string_view(data, length); + delete[] data; + } + } } else { FOOTSTONE_UNREACHABLE(); } @@ -389,8 +402,10 @@ std::shared_ptr JSHCtx::InternalRunScript( size_t length = 0; status = OH_JSVM_CreateCodeCache(env_, script, &data, &length); FOOTSTONE_DCHECK(status == JSVM_OK); - *cache = string_view(data, length); - delete[] data; + if (status == JSVM_OK && data && length > 0) { + *cache = string_view(data, length); + delete[] data; + } } else { status = OH_JSVM_CompileScript(env_, jsh_source_value->GetValue(), nullptr, 0, true, nullptr, &script); if(!CheckJSVMStatus(env_, status)) { diff --git a/driver/js/src/napi/v8/v8_ctx.cc b/driver/js/src/napi/v8/v8_ctx.cc index 35a3a47dbaf..e7e7dd29c6c 100644 --- a/driver/js/src/napi/v8/v8_ctx.cc +++ b/driver/js/src/napi/v8/v8_ctx.cc @@ -430,6 +430,12 @@ std::shared_ptr V8Ctx::InternalRunScript( v8::ScriptCompiler::Source script_source(source, origin, cached_data); script = v8::ScriptCompiler::Compile( context, &script_source, v8::ScriptCompiler::kConsumeCodeCache); + if (cached_data && cached_data->rejected) { + const v8::ScriptCompiler::CachedData* new_cached_data = + v8::ScriptCompiler::CreateCodeCache(script.ToLocalChecked()->GetUnboundScript()); + *cache = string_view(new_cached_data->data, + footstone::checked_numeric_cast(new_cached_data->length)); + } } else { FOOTSTONE_UNREACHABLE(); } diff --git a/framework/examples/android-demo/src/main/java/com/openhippy/example/HippyEngineWrapper.kt b/framework/examples/android-demo/src/main/java/com/openhippy/example/HippyEngineWrapper.kt index 052757b3ea0..fef5a085523 100644 --- a/framework/examples/android-demo/src/main/java/com/openhippy/example/HippyEngineWrapper.kt +++ b/framework/examples/android-demo/src/main/java/com/openhippy/example/HippyEngineWrapper.kt @@ -82,7 +82,7 @@ class HippyEngineWrapper//TODO: Coming soon //TODO: Coming soon } } - initParams.codeCacheTag = "common" + initParams.codeCacheTag = "common_1.0" // 建议tag拼接js version,tag会用来拼接v8 code cache文件的路径,不同js不同cache文件 initParams.exceptionHandler = object : HippyExceptionHandlerAdapter { override fun handleJsException(e: HippyJsException) { LogUtils.e("hippy", e.message) @@ -156,7 +156,7 @@ class HippyEngineWrapper//TODO: Coming soon val loadParams = ModuleLoadParams() loadParams.context = context loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo_1.0" // 建议tag拼接js version,tag会用来拼接v8 code cache文件的路径,不同js不同cache文件 when(driverMode) { PageConfiguration.DriverMode.JS_REACT -> { loadParams.jsAssetsPath = "react/index.android.js" @@ -258,4 +258,4 @@ class HippyEngineWrapper//TODO: Coming soon fun onReplaySnapshotViewCompleted(snapshotView: ViewGroup) fun onLoadModuleCompleted(statusCode: ModuleLoadStatus, msg: String?) } -} \ No newline at end of file +} diff --git a/framework/examples/ohos-c-demo/src/main/ets/pages/Index.ets b/framework/examples/ohos-c-demo/src/main/ets/pages/Index.ets index 06c4d1dcdaf..71e9c51f896 100644 --- a/framework/examples/ohos-c-demo/src/main/ets/pages/Index.ets +++ b/framework/examples/ohos-c-demo/src/main/ets/pages/Index.ets @@ -60,7 +60,7 @@ class DefaultEngineListener implements EngineListener { null, ) loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo_1.0" // 建议tag拼接js version,tag会用来拼接v8 code cache文件的路径,不同js不同cache文件 loadParams.jsParams = new Map() loadParams.jsParams.set( "msgFromNative", diff --git a/framework/examples/ohos-demo/src/main/ets/pages/PageConfiguration.ets b/framework/examples/ohos-demo/src/main/ets/pages/PageConfiguration.ets index 69436df6f0e..b8c75298988 100755 --- a/framework/examples/ohos-demo/src/main/ets/pages/PageConfiguration.ets +++ b/framework/examples/ohos-demo/src/main/ets/pages/PageConfiguration.ets @@ -97,7 +97,7 @@ class DefaultEngineListener implements EngineListener { null ) loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo_1.0" // 建议tag拼接js version,tag会用来拼接v8 code cache文件的路径,不同js不同cache文件 loadParams.jsParams = new Map() loadParams.jsParams.set( "msgFromNative", diff --git a/framework/examples/ohos-har-demo/src/main/ets/pages/Index.ets b/framework/examples/ohos-har-demo/src/main/ets/pages/Index.ets index fd620daf2e6..d8309e16cff 100644 --- a/framework/examples/ohos-har-demo/src/main/ets/pages/Index.ets +++ b/framework/examples/ohos-har-demo/src/main/ets/pages/Index.ets @@ -60,7 +60,7 @@ class DefaultEngineListener implements EngineListener { null, ) loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo_1.0" // 建议tag拼接js version,tag会用来拼接v8 code cache文件的路径,不同js不同cache文件 loadParams.jsParams = new Map() loadParams.jsParams.set( "msgFromNative", diff --git a/framework/examples/ohos-har-demo/src/main/ets/pages/Index2.ets b/framework/examples/ohos-har-demo/src/main/ets/pages/Index2.ets index a9571fc9cec..665cc6493a8 100644 --- a/framework/examples/ohos-har-demo/src/main/ets/pages/Index2.ets +++ b/framework/examples/ohos-har-demo/src/main/ets/pages/Index2.ets @@ -87,7 +87,7 @@ class DefaultEngineListener implements EngineListener { null, ) loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo1" loadParams.jsParams = new Map() loadParams.jsParams.set( "msgFromNative", @@ -146,7 +146,7 @@ class DefaultEngineListener2 implements EngineListener { null, ) loadParams.componentName = "Demo" - loadParams.codeCacheTag = "Demo" + loadParams.codeCacheTag = "Demo2" loadParams.jsParams = new Map() loadParams.jsParams.set( "msgFromNative",