From 0521d677a894bc398d99c790ff42a9ecb0f31d8d Mon Sep 17 00:00:00 2001 From: jiadexiang Date: Wed, 11 Aug 2021 14:34:36 +0800 Subject: [PATCH] Description: support loading extra preset modules IssueNo:I43P8P Feature or Bugfix: Feature Binary Source:No Signed-off-by: jiadexiang --- frameworks/include/base/product_adapter.h | 11 ++++++++++ frameworks/src/core/base/product_adapter.cpp | 21 +++++++++++++++++++ .../src/core/context/js_app_environment.cpp | 3 +++ 3 files changed, 35 insertions(+) diff --git a/frameworks/include/base/product_adapter.h b/frameworks/include/base/product_adapter.h index cf3101a..adb928a 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 893a512..83ab507 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 93377f6..57e3e41 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();