From f3cf1f9dbc0b722fd6895ac9d3a7db3694e90244 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 06:44:35 +0000 Subject: [PATCH 01/20] add interface get dual core bundle install path Signed-off-by: dzin <2363448374@qq.com> --- .../arkweb_utils_test/arkweb_utils_test.cpp | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp index 63c071998..37617b537 100644 --- a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp +++ b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp @@ -223,6 +223,39 @@ TEST(arkweb_utils_test, GetArkwebRelativePathForBundle002) { OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); } + +TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath001) { + int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); + OHOS::system::SetParameter("web.engine.enforce", std::to_string(0)); + setActiveWebEngineVersion(ArkWebEngineVersion::M114); + + auto arkwebLibPath = GetArkwebBundleInstallLibPath(); +#if defined(webview_x86_64) + EXPECT_TRUE(arkwebLibPath.empty()); +#else + EXPECT_TRUE(!arkwebLibPath.empty()); +#endif + OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); +} + +TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath002) { + const std::string pkgName; + OHOS::system::GetParameter("persist.arkwebcore.package_name", pkgName); + OHOS::system::SetParameter("persist.arkwebcore.package_name", ""); + auto arkwebLibPath = GetArkwebBundleInstallLibPath(); + EXPECT_TRUE(arkwebLibPath.empty()); + OHOS::system::SetParameter("persist.arkwebcore.package_name", pkgName); +} + +TEST(arkweb_utils_test, GetOhosAdptGlueSrcLibPath001) { + auto ohosAdptGlueSrcLibPath = GetOhosAdptGlueSrcLibPath(); +#if defined(webview_x86_64) + EXPECT_TRUE(ohosAdptGlueSrcLibPath.empty()); +#else + EXPECT_TRUE(!ohosAdptGlueSrcLibPath.empty()); +#endif +} + TEST(arkweb_utils_test, GetArkwebInstallPath001) { int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); OHOS::system::SetParameter("web.engine.enforce", std::to_string(0)); -- Gitee From c00e0f0678516dd25cf5c6ed46029fdd40937caf Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 06:45:38 +0000 Subject: [PATCH 02/20] update arkweb_utils/arkweb_utils.h. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arkweb_utils/arkweb_utils.h b/arkweb_utils/arkweb_utils.h index 5038192f9..43eb02a42 100644 --- a/arkweb_utils/arkweb_utils.h +++ b/arkweb_utils/arkweb_utils.h @@ -84,6 +84,9 @@ ARKWEB_EXPORT std::string GetArkwebNameSpace(); ARKWEB_EXPORT std::string GetArkwebRelativePathForBundle(); ARKWEB_EXPORT std::string GetArkwebRelativePathForMock(); ARKWEB_EXPORT std::string GetArkwebInstallPath(); +// 获取libarkweb_engine.so包安装的物理路径 +ARKWEB_EXPORT std::string GetArkwebBundleInstallLibPath(); +ARKWEB_EXPORT std::string GetOhosAdptGlueSrcLibPath(); ARKWEB_EXPORT void PreloadArkWebLibForBrowser(); ARKWEB_EXPORT void LogForUnsupportedFunc(ArkWebEngineVersion version, const char* msg); -- Gitee From 6daf70348604842ec307441af6641cfa09a36fb8 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 06:47:14 +0000 Subject: [PATCH 03/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 2e1c63fc1..094d695e8 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -21,6 +21,7 @@ #include #include #include +#include "parameter.h" namespace OHOS::ArkWeb { @@ -37,6 +38,7 @@ const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH = const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/arm64"; const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/arm64"; const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/arm64"; +const std::string OHOS_ADAPTER_GLUE_SRC_LIB_PATH = "/system/lib64/libohos_adapter_glue_source.z.so"; #elif defined(webview_x86_64) const std::string ARK_WEB_CORE_MOCK_HAP_LIB_PATH = "/data/storage/el1/bundle/libs/x86_64"; @@ -47,6 +49,7 @@ const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH = const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/x86_64"; const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/x86_64"; const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/x86_64"; +const std::string OHOS_ADAPTER_GLUE_SRC_LIB_PATH = ""; #else const std::string ARK_WEB_CORE_MOCK_HAP_LIB_PATH = "/data/storage/el1/bundle/libs/arm"; @@ -57,6 +60,7 @@ const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH = const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/arm"; const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/arm"; const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/arm"; +const std::string OHOS_ADAPTER_GLUE_SRC_LIB_PATH = "/system/lib/libohos_adapter_glue_source.z.so"; #endif #if defined(IS_ASAN) @@ -418,4 +422,30 @@ void* ArkWebBridgeHelperSharedInit(bool runMode) return libFileHandler; } + +std::string GetArkwebBundleInstallLibPath() { + char pkgName[PATH_MAX] = {0}; + GetParameter("persist.arkwebcore.package_name", "", pkgName, PATH_MAX); + if (strlen(pkgName) == 0) { + WVLOG_E("Fail to get persist.arkwebcore.package_name"); + return ""; + } + std::string pkgNameLegacy(pkgName); + if (getActiveWebEngineType() == ArkWebEngineType::LEGACY) { + pkgNameLegacy += "legacy"; + } + +#ifdef webview_arm64 + const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(pkgNameLegacy) + "/libs/arm64"; +#elif webview_x86_64 + const std::string arkwebEngineLibPath = ""; +#else + const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(pkgNameLegacy) + "/libs/arm"; +#endif + return arkwebEngineLibPath; +} + +std::string GetOhosAdptGlueSrcLibPath() { + return OHOS_ADAPTER_GLUE_SRC_LIB_PATH; +} } \ No newline at end of file -- Gitee From d8d4bef16bb7c5fc641fd75cce638d20ccf5baa3 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 06:49:11 +0000 Subject: [PATCH 04/20] update test/unittest/arkweb_utils_test/arkweb_utils_test.cpp. Signed-off-by: dzin <2363448374@qq.com> --- .../arkweb_utils_test/arkweb_utils_test.cpp | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp index 37617b537..6e997fdde 100644 --- a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp +++ b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp @@ -223,39 +223,6 @@ TEST(arkweb_utils_test, GetArkwebRelativePathForBundle002) { OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); } - -TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath001) { - int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); - OHOS::system::SetParameter("web.engine.enforce", std::to_string(0)); - setActiveWebEngineVersion(ArkWebEngineVersion::M114); - - auto arkwebLibPath = GetArkwebBundleInstallLibPath(); -#if defined(webview_x86_64) - EXPECT_TRUE(arkwebLibPath.empty()); -#else - EXPECT_TRUE(!arkwebLibPath.empty()); -#endif - OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); -} - -TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath002) { - const std::string pkgName; - OHOS::system::GetParameter("persist.arkwebcore.package_name", pkgName); - OHOS::system::SetParameter("persist.arkwebcore.package_name", ""); - auto arkwebLibPath = GetArkwebBundleInstallLibPath(); - EXPECT_TRUE(arkwebLibPath.empty()); - OHOS::system::SetParameter("persist.arkwebcore.package_name", pkgName); -} - -TEST(arkweb_utils_test, GetOhosAdptGlueSrcLibPath001) { - auto ohosAdptGlueSrcLibPath = GetOhosAdptGlueSrcLibPath(); -#if defined(webview_x86_64) - EXPECT_TRUE(ohosAdptGlueSrcLibPath.empty()); -#else - EXPECT_TRUE(!ohosAdptGlueSrcLibPath.empty()); -#endif -} - TEST(arkweb_utils_test, GetArkwebInstallPath001) { int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); OHOS::system::SetParameter("web.engine.enforce", std::to_string(0)); @@ -291,4 +258,36 @@ TEST(arkweb_utils_test, GetArkwebInstallPath002) { OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); } + +TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath001) { + int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); + OHOS::system::SetParameter("web.engine.enforce", std::to_string(0)); + setActiveWebEngineVersion(ArkWebEngineVersion::M114); + + auto arkwebLibPath = GetArkwebBundleInstallLibPath(); +#if defined(webview_x86_64) + EXPECT_TRUE(arkwebLibPath.empty()); +#else + EXPECT_TRUE(!arkwebLibPath.empty()); +#endif + OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce)); +} + +TEST(arkweb_utils_test, GetArkwebBundleInstallLibPath002) { + const std::string pkgName; + OHOS::system::GetParameter("persist.arkwebcore.package_name", pkgName); + OHOS::system::SetParameter("persist.arkwebcore.package_name", ""); + auto arkwebLibPath = GetArkwebBundleInstallLibPath(); + EXPECT_TRUE(arkwebLibPath.empty()); + OHOS::system::SetParameter("persist.arkwebcore.package_name", pkgName); +} + +TEST(arkweb_utils_test, GetOhosAdptGlueSrcLibPath001) { + auto ohosAdptGlueSrcLibPath = GetOhosAdptGlueSrcLibPath(); +#if defined(webview_x86_64) + EXPECT_TRUE(ohosAdptGlueSrcLibPath.empty()); +#else + EXPECT_TRUE(!ohosAdptGlueSrcLibPath.empty()); +#endif +} } // namespace OHOS::NWeb \ No newline at end of file -- Gitee From cd3bc4869e2189b3359107ec0d43e056689eb779 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 10:43:01 +0000 Subject: [PATCH 05/20] update sa/include/app_fwk_update_service.h. Signed-off-by: dzin <2363448374@qq.com> --- sa/include/app_fwk_update_service.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sa/include/app_fwk_update_service.h b/sa/include/app_fwk_update_service.h index c912669c6..ba452f180 100644 --- a/sa/include/app_fwk_update_service.h +++ b/sa/include/app_fwk_update_service.h @@ -67,7 +67,7 @@ private: int SetWebInstallPath(const std::string& path); int SetWebCorePackageName(const std::string& packageName); int SendAppSpawnMessage(const std::string& packageName, AppSpawnMsgType msgType); - int SendNWebSpawnMesage(const std::string& packageName); + int SendNWebSpawnMesage(const std::string& packageName, AppSpawnMsgType msgType); std::shared_ptr unloadHandler_; std::shared_ptr runner_; bool registerToService_ = false; -- Gitee From e1fcc3180ec00044473c803f87a823913de44198 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Sat, 23 Aug 2025 10:45:21 +0000 Subject: [PATCH 06/20] update sa/include/app_fwk_update_service.h. Signed-off-by: dzin <2363448374@qq.com> --- sa/include/app_fwk_update_service.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sa/include/app_fwk_update_service.h b/sa/include/app_fwk_update_service.h index ba452f180..c912669c6 100644 --- a/sa/include/app_fwk_update_service.h +++ b/sa/include/app_fwk_update_service.h @@ -67,7 +67,7 @@ private: int SetWebInstallPath(const std::string& path); int SetWebCorePackageName(const std::string& packageName); int SendAppSpawnMessage(const std::string& packageName, AppSpawnMsgType msgType); - int SendNWebSpawnMesage(const std::string& packageName, AppSpawnMsgType msgType); + int SendNWebSpawnMesage(const std::string& packageName); std::shared_ptr unloadHandler_; std::shared_ptr runner_; bool registerToService_ = false; -- Gitee From c80a0baa41d9e76319cfb518607325d3824bec17 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:08:35 +0000 Subject: [PATCH 07/20] update arkweb_utils/arkweb_utils.h. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arkweb_utils/arkweb_utils.h b/arkweb_utils/arkweb_utils.h index 43eb02a42..0bda26716 100644 --- a/arkweb_utils/arkweb_utils.h +++ b/arkweb_utils/arkweb_utils.h @@ -73,6 +73,12 @@ enum class ArkWebEngineType { EVERGREEN = static_cast(ArkWebEngineVersion::M132), }; +enum class RenderPreLoadMode { + PRELOAD_NO = 0, // 不预加载 + PRELOAD_PARTIAL = 1, // 只预加载libohos_adapter_glue_source.z.so + PRELOAD_FULL = 2 // 预加载libohos_adapter_glue_source.z.so和libarkweb_engine.so +}; + ARKWEB_EXPORT void setActiveWebEngineVersion(ArkWebEngineVersion version); ARKWEB_EXPORT ArkWebEngineVersion getActiveWebEngineVersion(); ARKWEB_EXPORT ArkWebEngineType getActiveWebEngineType(); @@ -88,6 +94,7 @@ ARKWEB_EXPORT std::string GetArkwebInstallPath(); ARKWEB_EXPORT std::string GetArkwebBundleInstallLibPath(); ARKWEB_EXPORT std::string GetOhosAdptGlueSrcLibPath(); ARKWEB_EXPORT void PreloadArkWebLibForBrowser(); +ARKWEB_EXPORT void PreloadArkWebLibForRender(); ARKWEB_EXPORT void LogForUnsupportedFunc(ArkWebEngineVersion version, const char* msg); -- Gitee From ae80e0393b80e7507a95cf1ed992a568642097b8 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:09:14 +0000 Subject: [PATCH 08/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.cpp | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 094d695e8..bce811a0c 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -448,4 +448,51 @@ std::string GetArkwebBundleInstallLibPath() { std::string GetOhosAdptGlueSrcLibPath() { return OHOS_ADAPTER_GLUE_SRC_LIB_PATH; } + +static void PreLoadArkWebEngineLib() +{ + Dl_namespace dlns; + Dl_namespace ndkns; + dlns_init(&dlns, "nweb_ns"); + const std::string arkWebEngineLibPath = GetArkwebBundleInstallLibPath(); + const std::string arkwebEngineSandboxLibPath = GetArkwebLibPath(); + if (arkWebEngineLibPath.empty()) { + WVLOG_E("Fail to get libarkweb_engine.so path"); + return; + } + std::string libNsPath = arkWebEngineLibPath + ":" + arkwebEngineSandboxLibPath; + dlns_create(&dlns, libNsPath.c_str()); + dlns_get("ndk", &ndkns); + dlns_inherit(&dlns, &ndkns, "allow_all_shared_libs"); + void *webEngineHandle = dlopen_ns(&dlns, ARK_WEB_ENGINE_LIB_NAME.c_str(), RTLD_NOW | RTLD_GLOBAL); + if (webEngineHandle == nullptr) { + WVLOG_E("Fail to dlopen libarkweb_engine.so, errno: %{public}d", errno); + } +} + +static void PreLoadOHOSAdptGlueSrcLib() +{ + const std::string ohosAdptGlueSrcLibPath = OHOS::ArkWeb::GetOhosAdptGlueSrcLibPath(); + if (ohosAdptGlueSrcLibPath.empty()) { + WVLOG_E("Fail to get libohos_adapter_glue_source.z.so path"); + return; + } + void *ohosAdptGlueSrcHandle = dlopen(ohosAdptGlueSrcLibPath.c_str(), RTLD_NOW | RTLD_GLOBAL); + if (ohosAdptGlueSrcHandle == nullptr) { + WVLOG_E("Fail to dlopen libohos_adapter_glue_source.z.so, errno: %{public}d", errno); + } +} + +void PreloadArkWebLibForRender() +{ + int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); + WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { + PreLoadArkWebEngineLib(); + } + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { + PreLoadArkWebEngineLib(); + PreLoadOHOSAdptGlueSrcLib(); + } +} } \ No newline at end of file -- Gitee From 5e14d28bac43e36f5810cef7d707575a9f313194 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:10:04 +0000 Subject: [PATCH 09/20] update ohos_nweb/etc/para/web.para. Signed-off-by: dzin <2363448374@qq.com> --- ohos_nweb/etc/para/web.para | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ohos_nweb/etc/para/web.para b/ohos_nweb/etc/para/web.para index d83c8fdbe..cdf18437d 100644 --- a/ohos_nweb/etc/para/web.para +++ b/ohos_nweb/etc/para/web.para @@ -26,4 +26,6 @@ web.ohos.vulkan = None web.prppreload.mode = preload web.ohos.dvsync = false web.ohos.enableCWNDSetting = false -web.TCPConnectedSocket.initialCongestionWindowSize = 10 \ No newline at end of file +web.TCPConnectedSocket.initialCongestionWindowSize = 10 +const.startup.nwebspawn.preloadMode = 2 +web.engine.install.completed = false \ No newline at end of file -- Gitee From 21d229565158409e5ab237ea3577349e6f43f096 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:10:16 +0000 Subject: [PATCH 10/20] update ohos_nweb/etc/para/web.para.dac. Signed-off-by: dzin <2363448374@qq.com> --- ohos_nweb/etc/para/web.para.dac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ohos_nweb/etc/para/web.para.dac b/ohos_nweb/etc/para/web.para.dac index f41ac0356..19b8ee5d4 100644 --- a/ohos_nweb/etc/para/web.para.dac +++ b/ohos_nweb/etc/para/web.para.dac @@ -17,4 +17,6 @@ web.debug.trace = root:shell:0775 persist.arkwebcore.install_path = root:root:0776 persist.arkwebcore.package_name = root:root:0776 web.prppreload.mode = root:root:0644 -persist.scrollable. = root:root:0775 \ No newline at end of file +persist.scrollable. = root:root:0775 +const.startup.nwebspawn.preloadMode = root:root:0776 +web.engine.install.completed = root:root:0776 \ No newline at end of file -- Gitee From a364d081593622c2743478fae544e81f103d0465 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:10:54 +0000 Subject: [PATCH 11/20] update sa/IAppFwkUpdateService.idl. Signed-off-by: dzin <2363448374@qq.com> --- sa/IAppFwkUpdateService.idl | 1 + 1 file changed, 1 insertion(+) diff --git a/sa/IAppFwkUpdateService.idl b/sa/IAppFwkUpdateService.idl index 2d9a27a6a..ba3dbd9c8 100644 --- a/sa/IAppFwkUpdateService.idl +++ b/sa/IAppFwkUpdateService.idl @@ -15,4 +15,5 @@ interface OHOS.NWeb.IAppFwkUpdateService { void VerifyPackageInstall([in] String bundleName, [in] String hapPath, [out]int success); [oneway] void NotifyFWKAfterBmsStart(); + void NotifyArkWebInstallSuccess(); } -- Gitee From 76bf14e67c99c1350e5e53c715c086d120d23ff9 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:11:30 +0000 Subject: [PATCH 12/20] update sa/include/app_fwk_update_client.h. Signed-off-by: dzin <2363448374@qq.com> --- sa/include/app_fwk_update_client.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sa/include/app_fwk_update_client.h b/sa/include/app_fwk_update_client.h index f9f9f698d..5d5048733 100644 --- a/sa/include/app_fwk_update_client.h +++ b/sa/include/app_fwk_update_client.h @@ -34,6 +34,7 @@ public: static AppFwkUpdateClient& GetInstance(); int VerifyPackageInstall(const std::string& bundleName, const std::string& hapPath); void NotifyFWKAfterBmsStart(); + void NotifyArkWebInstallSuccess(); void OnLoadSystemAbilitySuccess(const sptr& object); void OnLoadSystemAbilityFail(); -- Gitee From 0711a06ab329f8dc4d1e477a978cd1d0843d698a Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:11:59 +0000 Subject: [PATCH 13/20] update sa/include/app_fwk_update_service.h. Signed-off-by: dzin <2363448374@qq.com> --- sa/include/app_fwk_update_service.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sa/include/app_fwk_update_service.h b/sa/include/app_fwk_update_service.h index c912669c6..46d6b04c9 100644 --- a/sa/include/app_fwk_update_service.h +++ b/sa/include/app_fwk_update_service.h @@ -51,6 +51,7 @@ public: ErrCode VerifyPackageInstall(const std::string& bundleName, const std::string& hapPath, int32_t& success) override; ErrCode NotifyFWKAfterBmsStart() override; + ErrCode NotifyArkWebInstallSuccess() override; void SubscribePackageChangedEvent(); void OnPackageChangedEvent(const std::string& bunldeName, const std::string& hapPath); -- Gitee From bded9ff6d69aa6f36a8d77b5097eb2878ebc4f7d Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:12:18 +0000 Subject: [PATCH 14/20] update sa/libapp_fwk_update_service.map. Signed-off-by: dzin <2363448374@qq.com> --- sa/libapp_fwk_update_service.map | 1 + 1 file changed, 1 insertion(+) diff --git a/sa/libapp_fwk_update_service.map b/sa/libapp_fwk_update_service.map index cdd06d68d..d5bb88197 100644 --- a/sa/libapp_fwk_update_service.map +++ b/sa/libapp_fwk_update_service.map @@ -4,6 +4,7 @@ OHOS::NWeb::AppFwkUpdateClient::GetInstance*; OHOS::NWeb::AppFwkUpdateClient::VerifyPackageInstall*; OHOS::NWeb::AppFwkUpdateClient::NotifyFWKAfterBmsStart*; + OHOS::NWeb::AppFwkUpdateClient::NotifyArkWebInstallSuccess*; }; local: *; -- Gitee From e8b2a427209d8387ad1ee0082be80b66a9617d5d Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:12:51 +0000 Subject: [PATCH 15/20] update sa/src/app_fwk_update_client.cpp. Signed-off-by: dzin <2363448374@qq.com> --- sa/src/app_fwk_update_client.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sa/src/app_fwk_update_client.cpp b/sa/src/app_fwk_update_client.cpp index 4d30d41a1..056676b65 100644 --- a/sa/src/app_fwk_update_client.cpp +++ b/sa/src/app_fwk_update_client.cpp @@ -109,6 +109,16 @@ void AppFwkUpdateClient::NotifyFWKAfterBmsStart() proxy->NotifyFWKAfterBmsStart(); } +void AppFwkUpdateClient::NotifyArkWebInstallSuccess() +{ + auto proxy = GetFwkUpdateProxy(); + if (proxy == nullptr) { + WVLOG_E("NotifyArkWebInstallSuccess failed, proxy is null"); + return; + } + proxy->NotifyArkWebInstallSuccess(); +} + int AppFwkUpdateClient::VerifyPackageInstall(const std::string& bundleName, const std::string& hapPath) { WVLOG_I("verify package install callingUid: %{public}d", IPCSkeleton::GetCallingUid()); -- Gitee From 3064857b46ff20b37fd1d5b12914f34ca8a6f6d3 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:14:14 +0000 Subject: [PATCH 16/20] update sa/src/app_fwk_update_service.cpp. Signed-off-by: dzin <2363448374@qq.com> --- sa/src/app_fwk_update_service.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sa/src/app_fwk_update_service.cpp b/sa/src/app_fwk_update_service.cpp index 82f1457cd..c68acf5c7 100644 --- a/sa/src/app_fwk_update_service.cpp +++ b/sa/src/app_fwk_update_service.cpp @@ -104,6 +104,20 @@ ErrCode AppFwkUpdateService::NotifyFWKAfterBmsStart() return ERR_OK; } +ErrCode AppFwkUpdateService::NotifyArkWebInstallSuccess() +{ + int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); + WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); + if (preloadMode) { + auto ret = OHOS::system::SetParameter("web.engine.install.completed", "true"); + if (!ret) { + WVLOG_E("Set parameter web.engine.install.completed failed"); + return ERR_INVALID_VALUE; + } + } + return ERR_OK; +} + ErrCode AppFwkUpdateService::VerifyPackageInstall( const std::string& bundleName, const std::string& hapPath, int32_t& isSuccess) { -- Gitee From 10a22b66fee8f1d64855d1e616a48176969428a9 Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Thu, 28 Aug 2025 14:46:52 +0000 Subject: [PATCH 17/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 09a169eb2..969f25c0e 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -89,6 +89,7 @@ const std::string SANDBOX_EVERGREEN_HAP_PATH = "/data/storage/el1/bundle/arkwebc const std::string JSON_CONFIG_PATH = "/data/service/el1/public/update/param_service/install/system/etc/ArkWebSafeBrowsing/generic/ArkWebCoreCfg.json"; const std::string WEB_PARAM_PREFIX = "web.engine."; +const std::string ARK_WEB_ENGINE_LIB_NAME = "libarkweb_engine.so"; // 前向声明 static ArkWebEngineVersion CalculateActiveWebEngineVersion(); -- Gitee From 86bc7ee629f8963a1f6f657d5955b17e230e35ac Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Fri, 29 Aug 2025 10:02:26 +0000 Subject: [PATCH 18/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 969f25c0e..5c1a31bdf 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -520,4 +520,17 @@ void PreloadArkWebLibForRender() PreLoadOHOSAdptGlueSrcLib(); } } + +void PreloadArkWebLibForRender() +{ + int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); + WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { + PreLoadArkWebEngineLib(); + } + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_FULL)) { + PreLoadArkWebEngineLib(); + PreLoadOHOSAdptGlueSrcLib(); + } +} } \ No newline at end of file -- Gitee From 18f601e598323e34df1267dc27c0ca6e66f9703d Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Fri, 29 Aug 2025 10:27:46 +0000 Subject: [PATCH 19/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/arkweb_utils.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 5c1a31bdf..969f25c0e 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -520,17 +520,4 @@ void PreloadArkWebLibForRender() PreLoadOHOSAdptGlueSrcLib(); } } - -void PreloadArkWebLibForRender() -{ - int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); - WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); - if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { - PreLoadArkWebEngineLib(); - } - if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_FULL)) { - PreLoadArkWebEngineLib(); - PreLoadOHOSAdptGlueSrcLib(); - } -} } \ No newline at end of file -- Gitee From 147edf33f7fa3dc2868fa65e40152cdc32bfb7ae Mon Sep 17 00:00:00 2001 From: dzin <2363448374@qq.com> Date: Fri, 29 Aug 2025 10:31:40 +0000 Subject: [PATCH 20/20] update arkweb_utils/arkweb_utils.cpp. Signed-off-by: dzin <2363448374@qq.com> --- arkweb_utils/BUILD.gn | 5 ++ arkweb_utils/arkweb_utils.cpp | 71 ++++++++++++++----- arkweb_utils/arkweb_utils.h | 2 + config.gni | 1 + ohos_nweb/etc/para/web.para | 2 - ohos_nweb/etc/para/web.para.dac | 1 - .../app_fwk_update_client_test.cpp | 14 ++++ .../arkweb_utils_test/arkweb_utils_test.cpp | 19 +++++ 8 files changed, 95 insertions(+), 20 deletions(-) diff --git a/arkweb_utils/BUILD.gn b/arkweb_utils/BUILD.gn index fd4cdf5b6..a7013d852 100644 --- a/arkweb_utils/BUILD.gn +++ b/arkweb_utils/BUILD.gn @@ -12,6 +12,7 @@ # limitations under the License. import("//build/ohos.gni") +import("../config.gni") ohos_shared_library("libarkweb_utils") { output_name = "arkweb_utils" @@ -60,6 +61,10 @@ ohos_shared_library("libarkweb_utils") { innerapi_tags = [ "platformsdk" ] part_name = "webview" subsystem_name = "web" + + if(webview_preload_render_lib){ + defines += ["PRELOAD_RENDER_LIB"] + } } diff --git a/arkweb_utils/arkweb_utils.cpp b/arkweb_utils/arkweb_utils.cpp index 969f25c0e..2f7b9ac80 100644 --- a/arkweb_utils/arkweb_utils.cpp +++ b/arkweb_utils/arkweb_utils.cpp @@ -21,7 +21,9 @@ #include #include #include -#include "parameter.h" +#ifndef webview_x86_64 +#include +#endif namespace OHOS::ArkWeb { @@ -449,23 +451,21 @@ void* ArkWebBridgeHelperSharedInit(bool runMode) } std::string GetArkwebBundleInstallLibPath() { - char pkgName[PATH_MAX] = {0}; - GetParameter("persist.arkwebcore.package_name", "", pkgName, PATH_MAX); - if (strlen(pkgName) == 0) { + std::string bundleName = OHOS::system::GetParameter("persist.arkwebcore.package_name", ""); + if (bundleName.empty()) { WVLOG_E("Fail to get persist.arkwebcore.package_name"); return ""; } - std::string pkgNameLegacy(pkgName); if (getActiveWebEngineType() == ArkWebEngineType::LEGACY) { - pkgNameLegacy += "legacy"; + bundleName += "legacy"; } #ifdef webview_arm64 - const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(pkgNameLegacy) + "/libs/arm64"; + const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(bundleName) + "/libs/arm64"; #elif webview_x86_64 const std::string arkwebEngineLibPath = ""; #else - const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(pkgNameLegacy) + "/libs/arm"; + const std::string arkwebEngineLibPath = "/data/app/el1/bundle/public/" + std::string(bundleName) + "/libs/arm"; #endif return arkwebEngineLibPath; } @@ -474,7 +474,7 @@ std::string GetOhosAdptGlueSrcLibPath() { return OHOS_ADAPTER_GLUE_SRC_LIB_PATH; } -static void PreLoadArkWebEngineLib() +static void PreloadArkWebEngineLib() { Dl_namespace dlns; Dl_namespace ndkns; @@ -495,7 +495,7 @@ static void PreLoadArkWebEngineLib() } } -static void PreLoadOHOSAdptGlueSrcLib() +static void PreloadOHOSAdptGlueSrcLib() { const std::string ohosAdptGlueSrcLibPath = OHOS::ArkWeb::GetOhosAdptGlueSrcLibPath(); if (ohosAdptGlueSrcLibPath.empty()) { @@ -508,16 +508,53 @@ static void PreLoadOHOSAdptGlueSrcLib() } } -void PreloadArkWebLibForRender() +int PreloadArkWebLibForRender(const int &preloadMode) { - int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); - WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { - PreLoadArkWebEngineLib(); + PreloadOHOSAdptGlueSrcLib(); } - if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_PARTIAL)) { - PreLoadArkWebEngineLib(); - PreLoadOHOSAdptGlueSrcLib(); + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_FULL)) { + PreloadArkWebEngineLib(); + } + return 0; +} + +double GetSysTotalRAMInfo() +{ +#ifdef webview_x86_64 + return 0; +#else + struct sysinfo sysInfo; + if (sysinfo(&sysInfo) != 0) { + return 0; + } + return static_cast(sysInfo.totalram * sysInfo.mem_unit) / (1024 * 1024 * 1024); +#endif +} + +int GetRenderPreLoadMode(const double &totalRAM) +{ +#ifdef PRELOAD_RENDER_LIB + return static_cast(RenderPreLoadMode::PRELOAD_FULL); +#endif + int preloadMode = OHOS::system::GetIntParameter("const.startup.nwebspawn.preloadMode", 0); + if (preloadMode == static_cast(RenderPreLoadMode::PRELOAD_NO)) { + return static_cast(RenderPreLoadMode::PRELOAD_NO); + } + if (totalRAM >= 16.0) { + return static_cast(RenderPreLoadMode::PRELOAD_FULL); } + if (totalRAM >= 12.0) { + return static_cast(RenderPreLoadMode::PRELOAD_PARTIAL); + } + return static_cast(RenderPreLoadMode::PRELOAD_NO); +} + +void PreloadArkWebLibForRender() +{ + const double totalRAM = GetSysTotalRAMInfo(); + const int preloadMode = GetRenderPreLoadMode(totalRAM); + WVLOG_I("NwebSpawn preload render lib mode: %{public}d", preloadMode); + (void)PreloadArkWebLibForRender(preloadMode); } } \ No newline at end of file diff --git a/arkweb_utils/arkweb_utils.h b/arkweb_utils/arkweb_utils.h index 25e77a240..b362a976f 100644 --- a/arkweb_utils/arkweb_utils.h +++ b/arkweb_utils/arkweb_utils.h @@ -95,7 +95,9 @@ ARKWEB_EXPORT std::string GetArkwebInstallPath(); ARKWEB_EXPORT std::string GetArkwebBundleInstallLibPath(); ARKWEB_EXPORT std::string GetOhosAdptGlueSrcLibPath(); ARKWEB_EXPORT void PreloadArkWebLibForBrowser(); +ARKWEB_EXPORT int PreloadArkWebLibForRender(const int &preloadMode); ARKWEB_EXPORT void PreloadArkWebLibForRender(); +ARKWEB_EXPORT int GetRenderPreLoadMode(const double &totalRAM); ARKWEB_EXPORT void LogForUnsupportedFunc(ArkWebEngineVersion version, const char* msg); diff --git a/config.gni b/config.gni index 3085542b6..8a85c6151 100644 --- a/config.gni +++ b/config.gni @@ -27,6 +27,7 @@ declare_args() { webview_sensors_sensor_enable = true webview_enable_heif_decoder = false webview_drm_enable = true + webview_preload_render_lib = true if (defined(global_parts_info) && !defined(global_parts_info.resourceschedule_soc_perf)) { diff --git a/ohos_nweb/etc/para/web.para b/ohos_nweb/etc/para/web.para index 8f5305deb..2e8f26440 100644 --- a/ohos_nweb/etc/para/web.para +++ b/ohos_nweb/etc/para/web.para @@ -26,7 +26,5 @@ web.ohos.vulkan = None web.prppreload.mode = preload web.ohos.dvsync = false web.ohos.enableCWNDSetting = false -const.startup.nwebspawn.preloadMode = 2 web.engine.install.completed = false web.TCPConnectedSocket.initialCongestionWindowSize = -1 - diff --git a/ohos_nweb/etc/para/web.para.dac b/ohos_nweb/etc/para/web.para.dac index 19b8ee5d4..1f5a7b2ca 100644 --- a/ohos_nweb/etc/para/web.para.dac +++ b/ohos_nweb/etc/para/web.para.dac @@ -18,5 +18,4 @@ persist.arkwebcore.install_path = root:root:0776 persist.arkwebcore.package_name = root:root:0776 web.prppreload.mode = root:root:0644 persist.scrollable. = root:root:0775 -const.startup.nwebspawn.preloadMode = root:root:0776 web.engine.install.completed = root:root:0776 \ No newline at end of file diff --git a/test/unittest/app_fwk_update_client_test/app_fwk_update_client_test.cpp b/test/unittest/app_fwk_update_client_test/app_fwk_update_client_test.cpp index e82cddaf5..a9ba44853 100644 --- a/test/unittest/app_fwk_update_client_test/app_fwk_update_client_test.cpp +++ b/test/unittest/app_fwk_update_client_test/app_fwk_update_client_test.cpp @@ -217,4 +217,18 @@ HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_009, TestSize.Level0) callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID); EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr); } + + +/** + * @tc.name: AppFwkUpdateClientTest_010 + * @tc.desc: appFwkUpdateClient.NotifyArkWebInstallSuccess() + * @tc.type: Func + * @tc.require: +*/ +HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_010, TestSize.Level0) +{ + AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance(); + appFwkUpdateClient.NotifyArkWebInstallSuccess(); + EXPECT_TRUE(true); +} } // namespace OHOS::NWeb diff --git a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp index be8f68050..548fda5cd 100644 --- a/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp +++ b/test/unittest/arkweb_utils_test/arkweb_utils_test.cpp @@ -255,6 +255,25 @@ TEST(arkweb_utils_test, GetOhosAdptGlueSrcLibPath001) { #endif } +TEST(arkweb_utils_test, GetRenderPreLoadMode001) { + int ret = GetRenderPreLoadMode(16.0); + EXPECT_TRUE(ret >= 0); + ret = GetRenderPreLoadMode(12.0); + EXPECT_TRUE(ret >= 0); + ret = GetRenderPreLoadMode(8.0); + EXPECT_TRUE(ret >= 0); +} + +TEST(arkweb_utils_test, PreloadArkWebLibForRender001) { + PreloadArkWebLibForRender(); + int preloadMode = 1; + int ret = PreloadArkWebLibForRender(preloadMode); + EXPECT_EQ(ret, 0); + preloadMode = 2; + ret = PreloadArkWebLibForRender(preloadMode); + EXPECT_EQ(ret, 0); +} + TEST(arkweb_utils_test, SelectWebcoreBeforeProcessRun001) { std::string appBundleName = "com.example.app"; int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0); -- Gitee