diff --git a/frameworks/include/base/product_adapter.h b/frameworks/include/base/product_adapter.h index cf3101a14baaaf0e3bd7b0c917dc0ec7023cf1df..adb928a832bd06f16ee431686ea46f9c2246de37 100644 --- a/frameworks/include/base/product_adapter.h +++ b/frameworks/include/base/product_adapter.h @@ -86,6 +86,14 @@ enum TEDispatchingResult : uint8_t { ACCEPT_FAILED, // on forground, but TE event can not be received, vsync should be retried to send to ACE again }; +/** + * The wrapper data structure for get native memory pool info. + */ +struct ExtraPresetModulesHook { + VoidFuncHook loadingHandler; + VoidFuncHook unloadingHandler; +}; + /** * The wrapper class for some product feature implementation, since some interfaces are provided by specific product. */ @@ -111,6 +119,7 @@ public: static void SetDefaultFontStyle(const char *defaultFontFamily, uint8_t defaultFontSize); static void SetScreenSize(uint16_t width, uint16_t height); static void RegSetScreenOnVisibleHandler(SetScreenOnVisibleHandler handler); + static void RegExtraPresetModulesHook(ExtraPresetModulesHook hook); // wrapper functions, for ace internal calling static void PrintEventTrace(uint8_t info2, uint8_t info3, uint8_t info4); @@ -126,6 +135,8 @@ public: static void UpdateRenderTickAcceptable(bool acceptable); static void GetScreenSize(uint16_t &width, uint16_t &height); static bool SetScreenOnVisible(bool visible); + static void LoadExtraPresetModules(); + static void UnloadExtraPresetModules(); }; } // namespace ACELite } // namespace OHOS diff --git a/frameworks/src/core/base/product_adapter.cpp b/frameworks/src/core/base/product_adapter.cpp index 893a512c8493d1d209a1b0230a50e16e6a0230ed..83ab5072e3830b053ced18e014d7376ce9d90cf4 100644 --- a/frameworks/src/core/base/product_adapter.cpp +++ b/frameworks/src/core/base/product_adapter.cpp @@ -52,6 +52,7 @@ static DFXWrapper g_dfxWrapper; static TEHandlingHooks g_teHandlingHooks = {nullptr, nullptr}; static TerminateAbilityHandler g_termiantingHandler = nullptr; static SetScreenOnVisibleHandler g_setScreenOnHandler = nullptr; +static ExtraPresetModulesHook g_extraPresetModulesHooks = {nullptr, nullptr}; // default font styles static char *g_defaultFontFamilyName = nullptr; static uint8_t g_defaultFontSize = 30; @@ -232,5 +233,25 @@ bool ProductAdapter::SetScreenOnVisible(bool visible) { return (g_setScreenOnHandler != nullptr) ? g_setScreenOnHandler(visible) : false; } + +void ProductAdapter::RegExtraPresetModulesHook(ExtraPresetModulesHook hook) +{ + g_extraPresetModulesHooks.loadingHandler = hook.loadingHandler; + g_extraPresetModulesHooks.unloadingHandler = hook.unloadingHandler; +} + +void ProductAdapter::LoadExtraPresetModules() +{ + if (g_extraPresetModulesHooks.loadingHandler != nullptr) { + g_extraPresetModulesHooks.loadingHandler(); + } +} + +void ProductAdapter::UnloadExtraPresetModules() +{ + if (g_extraPresetModulesHooks.unloadingHandler != nullptr) { + g_extraPresetModulesHooks.unloadingHandler(); + } +} } // namespace ACELite } // namespace OHOS diff --git a/frameworks/src/core/context/js_app_environment.cpp b/frameworks/src/core/context/js_app_environment.cpp index 93377f6177d09b0076521ab1615314c728924904..57e3e4109dcf4e3e6a25b83ee9c31edae9d310cc 100755 --- a/frameworks/src/core/context/js_app_environment.cpp +++ b/frameworks/src/core/context/js_app_environment.cpp @@ -33,6 +33,7 @@ #include "presets/require_module.h" #include "presets/timer_module.h" #include "presets/version_module.h" +#include "product_adapter.h" #ifdef JS_ENGINE_STATIC_MULTI_CONTEXTS_ENABLED extern "C" { #include "generate-bytecode.h" @@ -79,6 +80,7 @@ void JsAppEnvironment::InitJsFramework() const #endif // JSFWK_TEST AsyncTaskManager::GetInstance().Init(); LoadAceBuiltInModules(); + ProductAdapter::LoadExtraPresetModules(); LoadFramework(); LocalModule::Load(); STOP_TRACING(); @@ -116,6 +118,7 @@ void JsAppEnvironment::Cleanup() { Debugger::GetInstance().TearDownDebugger(); FeaAbilityModule::Release(); + ProductAdapter::UnloadExtraPresetModules(); // clean up engine, NOTE: all JS value must be released properly befor cleanup jerry_cleanup();