diff --git a/appspawn.gni b/appspawn.gni index 3ae081e4f967be7ad80bbacd2b0b67a1986c7fb8..e807264bf392d6c0c4efd23717be90f0c2e59f34 100644 --- a/appspawn.gni +++ b/appspawn.gni @@ -37,6 +37,7 @@ declare_args() { appspawn_allow_internet_permission = false appspawn_custom_sandbox = false appspawn_support_local_debugger = false + appspawn_hitrace_option = true } if (!defined(global_parts_info) || diff --git a/modules/common/BUILD.gn b/modules/common/BUILD.gn index 94ec1b57c86cb13bddd0c2c06ee7fa3c02ba5512..a8d347dcd1d5f4b213a1c996be9f2c39f6948809 100644 --- a/modules/common/BUILD.gn +++ b/modules/common/BUILD.gn @@ -50,6 +50,12 @@ ohos_shared_library("appspawn_common") { "init:libbegetutil", "netmanager_base:netsys_client", ] + + if (appspawn_hitrace_option == true) { + defines += [ "APPSPAWN_HITRACE_OPTION" ] + external_deps += [ "hitrace:libhitrace_option" ] + } + if (build_selinux) { defines += [ "WITH_SELINUX" ] external_deps += [ diff --git a/modules/common/appspawn_common.c b/modules/common/appspawn_common.c index 844f2833ed6c3f640814fc44847a85e24580066c..b1d4c1c00de9705f165351d20fbe02acb351e35a 100644 --- a/modules/common/appspawn_common.c +++ b/modules/common/appspawn_common.c @@ -47,6 +47,10 @@ #include "parameter.h" #include "securec.h" +#ifdef APPSPAWN_HITRACE_OPTION +#include "hitrace_option/hitrace_option.h" +#endif + #ifdef CODE_SIGNATURE_ENABLE // for xpm #include "code_sign_attr_utils.h" #endif @@ -472,8 +476,26 @@ static void SpawnLoadSilk(const AppSpawnMgr *content, const AppSpawningCtx *prop LoadSilkLibrary(processName); } +#ifdef APPSPAWN_HITRACE_OPTION +APPSPAWN_STATIC void FilterAppspawnTrace(AppSpawningCtx *property) +{ + const char *processName = GetProcessName(property); + if (processName != NULL) { + pid_t pid = getpid(); + APPSPAWN_LOGI("fanjingle AAAAA processName: %{public}s pid: %{public}d", processName, pid); + FilterAppTrace(processName, pid); + } else { + APPSPAWN_LOGI("fanjingle AAAAA processName is NULL"); + } +} +#endif + static int SpawnSetProperties(AppSpawnMgr *content, AppSpawningCtx *property) { + APPSPAWN_LOGI("fanjingle AAAAA ------"); +#ifdef APPSPAWN_HITRACE_OPTION + FilterAppspawnTrace(property); +#endif APPSPAWN_LOGV("Spawning: set child property"); SpawnLoadSilk(content, property); (void)umask(DEFAULT_UMASK); diff --git a/test/mock/app_spawn_stub.h b/test/mock/app_spawn_stub.h index 4aaced7181ed22f39c6c46f5b9818bdc27257b43..7ba69bc7964de1799c241f951b50033bb863f643 100644 --- a/test/mock/app_spawn_stub.h +++ b/test/mock/app_spawn_stub.h @@ -116,6 +116,11 @@ void RunAppSandbox(const char *ptyName); HOOK_MGR *GetAppSpawnHookMgr(void); int SpawnKickDogStart(AppSpawnMgr *mgrContent); int AddPermissionToEncaps(cJSON *extInfoJson, cJSON *encaps, uint32_t *permissionCount); + +#ifdef APPSPAWN_HITRACE_OPTION +void FilterAppspawnTrace(AppSpawningCtx *property); +#endif + #define STUB_NEED_CHECK 0x01 typedef int (*ExecvFunc)(const char *pathname, char *const argv[]); enum { diff --git a/test/unittest/app_spawn_client_test/BUILD.gn b/test/unittest/app_spawn_client_test/BUILD.gn index 7d874cfa1db83cc5fe5d234ebec90ccad6b0bcde..136553b5883c70d9cc27338ebb161da15993308e 100644 --- a/test/unittest/app_spawn_client_test/BUILD.gn +++ b/test/unittest/app_spawn_client_test/BUILD.gn @@ -92,6 +92,12 @@ ohos_unittest("AppSpawn_client_ut") { "hitrace:hitrace_meter", "init:libbegetutil", ] + + if (appspawn_hitrace_option == true) { + defines += [ "APPSPAWN_HITRACE_OPTION" ] + external_deps += [ "hitrace:libhitrace_option" ] + } + if (enable_appspawn_dump_catcher) { external_deps += [ "faultloggerd:libdfx_dumpcatcher" ] } diff --git a/test/unittest/app_spawn_standard_test/BUILD.gn b/test/unittest/app_spawn_standard_test/BUILD.gn index 92ece3b5cff4a02fbd1fa9e02dca15096dda55ba..3479dfdeaa5de93dc1c0cf08406c8e51a5e97b49 100644 --- a/test/unittest/app_spawn_standard_test/BUILD.gn +++ b/test/unittest/app_spawn_standard_test/BUILD.gn @@ -177,6 +177,12 @@ ohos_unittest("AppSpawn_ut") { "os_account:os_account_innerkits", "resource_management:global_resmgr", ] + + if (appspawn_hitrace_option == true) { + defines += [ "APPSPAWN_HITRACE_OPTION" ] + external_deps += [ "hitrace:libhitrace_option" ] + } + if (enable_appspawn_dump_catcher) { external_deps += [ "faultloggerd:libdfx_dumpcatcher" ] } diff --git a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp index e10b6d13d547a442a32be7b4a86108b7be4fc8e5..42dd4c24e38df19a3f4884947d6ebc1d64108650 100644 --- a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp +++ b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp @@ -812,4 +812,30 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_SetIsolateDir, TestSize.Level0) ASSERT_EQ(ret, 0); } +#ifdef APPSPAWN_HITRACE_OPTION +HWTEST_F(AppSpawnCommonTest, App_Spawn_SetIsolateDir, TestSize.Level0) +{ + AppSpawnClientHandle clientHandle = nullptr; + AppSpawnReqMsgHandle reqHandle = 0; + AppSpawningCtx *property = nullptr; + int ret = -1; + FilterAppspawnTrace(property); + EXPECT_EQ(property, nullptr); + + do { + ret = AppSpawnClientInit(APPSPAWN_SERVER_NAME, &clientHandle); + APPSPAWN_CHECK(ret == 0, break, "Failed to create reqMgr %{public}s", APPSPAWN_SERVER_NAME); + reqHandle = g_testHelper.CreateMsg(clientHandle, MSG_APP_SPAWN, 0); + APPSPAWN_CHECK(reqHandle != INVALID_REQ_HANDLE, break, + "Failed to create req %{public}s", APPSPAWN_SERVER_NAME); + property = g_testHelper.GetAppProperty(clientHandle, reqHandle); + APPSPAWN_CHECK_ONLY_EXPER(property != nullptr, break); + FilterAppspawnTrace(property); + } while (0); + + DeleteAppSpawningCtx(property); + AppSpawnClientDestroy(clientHandle); +} +#endif + } // namespace OHOS