From: Youngjae Cho Date: Tue, 25 Jun 2024 09:53:03 +0000 (+0900) Subject: halcc: Add cache not to open() file multiple times on a same module X-Git-Tag: accepted/tizen/unified/20240627.103703~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F50%2F313450%2F1;p=platform%2Fhal%2Fapi%2Fcommon.git halcc: Add cache not to open() file multiple times on a same module Change-Id: I623b0a7fd0fb223750aa24ea1737a2c7c2fe0a66 Signed-off-by: Youngjae Cho --- diff --git a/src/hal-api-compatibility-checker.c b/src/hal-api-compatibility-checker.c index 26f63e3..e4c2bfc 100644 --- a/src/hal-api-compatibility-checker.c +++ b/src/hal-api-compatibility-checker.c @@ -47,6 +47,7 @@ struct compatibility_info { int num_version_list; enum hal_common_backend_compatibility compatibility; }; +static struct compatibility_info g_compatibility_info[HAL_MODULE_END]; static const char *compatibility_result_path = HAL_CC_DEFAULT_COMPATIBILITY_RESULT_PATH; @@ -63,6 +64,11 @@ void unset_compatibility_result_path(void) compatibility_result_path = HAL_CC_DEFAULT_COMPATIBILITY_RESULT_PATH; } +void reset_compatibility_info(void) +{ + memset(g_compatibility_info, 0, sizeof(g_compatibility_info)); +} + static int get_module_by_name(const char *name, enum hal_module *module) { int ret; @@ -421,6 +427,11 @@ static int load_module_compatibility_info(enum hal_module module, if (!info) return -EINVAL; + if (g_compatibility_info[module].initialized) { + *info = g_compatibility_info[module]; + return 0; + } + fd = open(compatibility_result_path, O_RDONLY, 0); if (fd == -1) return -errno; @@ -438,6 +449,8 @@ static int load_module_compatibility_info(enum hal_module module, if (!info->initialized) return -ENODATA; + memcpy(&g_compatibility_info[module], info, sizeof(struct compatibility_info)); + return 0; } @@ -496,6 +509,7 @@ static int load_module_compatibility_info_fallback(enum hal_module module, if (!infos[index].initialized) continue; write_module_comaptibility_info(index, &infos[index]); + memcpy(&g_compatibility_info[module], &infos[index], sizeof(struct compatibility_info)); } return 0; diff --git a/src/hal-api-compatibility-checker.h b/src/hal-api-compatibility-checker.h index 4c897a7..fe9ee64 100644 --- a/src/hal-api-compatibility-checker.h +++ b/src/hal-api-compatibility-checker.h @@ -36,6 +36,7 @@ void set_compatibility_manifest_directory(const char *path); void unset_compatibility_manifest_directory(void); void set_compatibility_result_path(const char *path); void unset_compatibility_result_path(void); +void reset_compatibility_info(void); #ifdef __cplusplus } diff --git a/tests/unittest/test-hal-compatibility-checker.cc b/tests/unittest/test-hal-compatibility-checker.cc index be921b9..c944db3 100644 --- a/tests/unittest/test-hal-compatibility-checker.cc +++ b/tests/unittest/test-hal-compatibility-checker.cc @@ -274,6 +274,7 @@ TEST_F(HalccObjectTest, hal_create_result_file_success) unlink(g_compatibility_result_path); unset_compatibility_result_path(); + reset_compatibility_info(); unsetenv("SYSTEMD_SCOPE"); } @@ -291,6 +292,7 @@ TEST_F(HalccObjectTest, hal_create_result_file_fail) ASSERT_EQ(ret, -1); unset_compatibility_result_path(); + reset_compatibility_info(); } TEST_F(HalccObjectTest, hal_check_compatibility_on_generator_context) @@ -323,6 +325,7 @@ TEST_F(HalccObjectTest, hal_check_compatibility_on_generator_context) unlink(g_compatibility_result_path); unset_compatibility_result_path(); + reset_compatibility_info(); unsetenv("SYSTEMD_SCOPE"); } @@ -443,6 +446,7 @@ TEST_F(HalccObjectTest, hal_get_backend_without_generator_without_result_file) mock_hal_backend_data_unset_version(HAL_MODULE_DEVICE_DISPLAY); unset_compatibility_result_path(); + reset_compatibility_info(); } TEST_F(HalccObjectTest, hal_get_backend_with_generator_without_result_file) @@ -518,6 +522,7 @@ TEST_F(HalccObjectTest, hal_get_manifest_version_success_with_result_file) unlink(g_compatibility_result_path); unset_compatibility_result_path(); + reset_compatibility_info(); unsetenv("SYSTEMD_SCOPE"); } @@ -542,4 +547,6 @@ TEST_F(HalccObjectTest, hal_get_manifest_version_success_without_result_file) free(vi.minor_versions); vi.minor_versions = NULL; + + reset_compatibility_info(); }