提交 58b4dd3c 编写于 作者: H handyohos

feat: optimize bootstage hookmgr

1) 为bootstage单独创建命名的hookmgr
2)该hookmgr在启动完成后就销毁掉。
Signed-off-by: Nhandyohos <zhangxiaotian@huawei.com>
Change-Id: Iae97807aeda296fd370d898aa937be74d0a683d7
上级 81ca740b
......@@ -33,34 +33,36 @@ enum INIT_BOOTSTAGE {
INIT_POST_CFG_LOAD = 50
};
HOOK_MGR *GetBootStageHookMgr();
inline int InitAddGlobalInitHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_GLOBAL_INIT, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_GLOBAL_INIT, prio, hook);
}
inline int InitAddPreParamServiceHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_PRE_PARAM_SERVICE, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_PRE_PARAM_SERVICE, prio, hook);
}
inline int InitAddPreParamLoadHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_PRE_PARAM_LOAD, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_PRE_PARAM_LOAD, prio, hook);
}
inline int InitAddPreCfgLoadHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_PRE_CFG_LOAD, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_PRE_CFG_LOAD, prio, hook);
}
inline int InitAddPostCfgLoadHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_POST_CFG_LOAD, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_POST_CFG_LOAD, prio, hook);
}
inline int InitAddPostPersistParamLoadHook(int prio, OhosHook hook)
{
return HookMgrAdd(NULL, INIT_POST_PERSIST_PARAM_LOAD, prio, hook);
return HookMgrAdd(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, prio, hook);
}
#ifdef __cplusplus
#if __cplusplus
......
......@@ -249,6 +249,14 @@ void SystemLoadSelinux(void)
#endif // WITH_SELINUX
}
#define INIT_BOOTSTAGE_HOOK_NAME "bootstage"
static HOOK_MGR *bootStageHookMgr = NULL;
HOOK_MGR *GetBootStageHookMgr()
{
return bootStageHookMgr;
}
static void BootStateChange(const char *content)
{
INIT_LOGI("boot start %s finish.", content);
......@@ -259,7 +267,8 @@ static void BootStateChange(const char *content)
if (strcmp("post-init", content) == 0) {
StartAllServices(START_MODE_NARMAL);
// Destroy all hooks
HookMgrDestroy(NULL);
HookMgrDestroy(bootStageHookMgr);
bootStageHookMgr = NULL;
return;
}
}
......@@ -350,10 +359,16 @@ void SystemConfig(void)
options.preHook = InitPreHook;
options.postHook = InitPostHook;
HookMgrExecute(NULL, INIT_GLOBAL_INIT, (void *)&timingStat, (void *)&options);
/*
* Create bootstage hook manager for booting only.
* When boot completed, this manager will be destroyed.
*/
bootStageHookMgr = HookMgrCreate(INIT_BOOTSTAGE_HOOK_NAME);
HookMgrExecute(GetBootStageHookMgr(), INIT_GLOBAL_INIT, (void *)&timingStat, (void *)&options);
InitServiceSpace();
HookMgrExecute(NULL, INIT_PRE_PARAM_SERVICE, (void *)&timingStat, (void *)&options);
HookMgrExecute(GetBootStageHookMgr(), INIT_PRE_PARAM_SERVICE, (void *)&timingStat, (void *)&options);
InitParamService();
InitParseGroupCfg();
RegisterBootStateChange(BootStateChange);
......@@ -362,13 +377,13 @@ void SystemConfig(void)
// Do not move position!
SystemLoadSelinux();
// parse parameters
HookMgrExecute(NULL, INIT_PRE_PARAM_LOAD, (void *)&timingStat, (void *)&options);
HookMgrExecute(GetBootStageHookMgr(), INIT_PRE_PARAM_LOAD, (void *)&timingStat, (void *)&options);
InitLoadParamFiles();
// read config
HookMgrExecute(NULL, INIT_PRE_CFG_LOAD, (void *)&timingStat, (void *)&options);
HookMgrExecute(GetBootStageHookMgr(), INIT_PRE_CFG_LOAD, (void *)&timingStat, (void *)&options);
ReadConfig();
INIT_LOGI("Parse init config file done.");
HookMgrExecute(NULL, INIT_POST_CFG_LOAD, (void *)&timingStat, (void *)&options);
HookMgrExecute(GetBootStageHookMgr(), INIT_POST_CFG_LOAD, (void *)&timingStat, (void *)&options);
// dump config
#if defined(OHOS_SERVICE_DUMP)
......
......@@ -175,7 +175,7 @@ static void DoLoadPersistParams(const struct CmdArgs *ctx)
{
INIT_LOGV("LoadPersistParams");
LoadPersistParams();
HookMgrExecute(NULL, INIT_POST_PERSIST_PARAM_LOAD, NULL, NULL);
HookMgrExecute(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, NULL, NULL);
}
static void DoTriggerCmd(const struct CmdArgs *ctx)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册