From 1453cd77dbd2bdb2ab84477731b859db7727348b Mon Sep 17 00:00:00 2001 From: eager1 Date: Thu, 14 Aug 2025 17:34:07 +0800 Subject: [PATCH] resource update by instanceId Signed-off-by: eager1 Change-Id: I2817541719061631a917b78e98bdec95ca28144f --- .../core/common/resource/resource_manager.cpp | 34 +++++++++++++++ .../core/common/resource/resource_manager.h | 41 ++++++------------- .../common/resource/resource_manager_test.cpp | 4 +- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/frameworks/core/common/resource/resource_manager.cpp b/frameworks/core/common/resource/resource_manager.cpp index dc6d01098c4..2feac3eb67b 100644 --- a/frameworks/core/common/resource/resource_manager.cpp +++ b/frameworks/core/common/resource/resource_manager.cpp @@ -55,6 +55,40 @@ void ResourceManager::RegisterMainResourceAdapter(const std::string& bundleName, resourceAdapters_.emplace(key, resAdapter); } +void ResourceManager::UpdateResourceConfig(const std::string& /*bundleName*/, const std::string& /*moduleName*/, + int32_t instanceId, const ResourceConfiguration& config, bool themeFlag) +{ + std::unique_lock lock(mutex_); + std::string compareId = std::to_string(instanceId); + for (auto iter = resourceAdapters_.begin(); iter != resourceAdapters_.end(); ++iter) { + if (GetCacheKeyInstanceId(iter->first) == compareId) { + iter->second->UpdateConfig(config, themeFlag); + } + } + for (auto iter = cacheList_.begin(); iter != cacheList_.end(); ++iter) { + if (GetCacheKeyInstanceId(iter->cacheKey) == compareId) { + iter->cacheObj->UpdateConfig(config, themeFlag); + } + } +} + +void ResourceManager::UpdateColorMode( + const std::string& /*bundleName*/, const std::string& /*moduleName*/, int32_t instanceId, ColorMode colorMode) +{ + std::unique_lock lock(mutex_); + std::string compareId = std::to_string(instanceId); + for (auto iter = resourceAdapters_.begin(); iter != resourceAdapters_.end(); ++iter) { + if (GetCacheKeyInstanceId(iter->first) == compareId) { + iter->second->UpdateColorMode(colorMode); + } + } + for (auto iter = cacheList_.begin(); iter != cacheList_.end(); ++iter) { + if (GetCacheKeyInstanceId(iter->cacheKey) == compareId) { + iter->cacheObj->UpdateColorMode(colorMode); + } + } +} + void ResourceManager::DumpResLoadError() { std::unique_lock lock(errorMutex_); diff --git a/frameworks/core/common/resource/resource_manager.h b/frameworks/core/common/resource/resource_manager.h index bbd2d101557..fa82bbee9b7 100644 --- a/frameworks/core/common/resource/resource_manager.h +++ b/frameworks/core/common/resource/resource_manager.h @@ -26,6 +26,7 @@ #include "base/memory/ace_type.h" #include "base/memory/referenced.h" +#include "base/utils/string_utils.h" #include "base/utils/resource_configuration.h" #include "core/common/resource/resource_object.h" #include "core/components/theme/resource_adapter.h" @@ -83,6 +84,7 @@ public: void UpdateMainResourceAdapter(const std::string& bundleName, const std::string& moduleName, int32_t instanceId, RefPtr& resourceAdapter) { + std::unique_lock lock(mutex_); auto defaultKey = MakeCacheKey("", "", instanceId); auto key = MakeCacheKey(bundleName, moduleName, instanceId); resourceAdapters_[key] = resourceAdapter; @@ -99,6 +101,13 @@ public: return cache_.find(key) != cache_.end(); } + std::string GetCacheKeyInstanceId(const std::string& key) + { + std::vector splitter; + StringUtils::StringSplitter(key, '.', splitter); + return splitter.back(); + } + RefPtr GetResourceAdapter( const std::string& bundleName, const std::string& moduleName, int32_t instanceId) { @@ -135,21 +144,8 @@ public: return nullptr; } - void UpdateResourceConfig(const std::string& bundleName, const std::string& moduleName, int32_t instanceId, - const ResourceConfiguration& config, bool themeFlag = false) - { - std::unique_lock lock(mutex_); - auto key = MakeCacheKey(bundleName, moduleName, instanceId); - auto iter = resourceAdapters_.find(key); - if (iter != resourceAdapters_.end()) { - iter->second->UpdateConfig(config, themeFlag); - } - auto cacheAdapter = - CountLimitLRU::GetCacheObjWithCountLimitLRU>(key, cacheList_, cache_); - if (cacheAdapter != nullptr) { - cacheAdapter->UpdateConfig(config, themeFlag); - } - } + void UpdateResourceConfig(const std::string& /*bundleName*/, const std::string& /*moduleName*/, int32_t instanceId, + const ResourceConfiguration& config, bool themeFlag = false); void RemoveResourceAdapter(const std::string& bundleName, const std::string& moduleName, int32_t instanceId) { @@ -172,20 +168,7 @@ public: } void UpdateColorMode( - const std::string& bundleName, const std::string& moduleName, int32_t instanceId, ColorMode colorMode) - { - std::unique_lock lock(mutex_); - auto key = MakeCacheKey(bundleName, moduleName, instanceId); - auto iter = resourceAdapters_.find(key); - if (iter != resourceAdapters_.end()) { - iter->second->UpdateColorMode(colorMode); - } - auto cacheAdapter = - CountLimitLRU::GetCacheObjWithCountLimitLRU>(key, cacheList_, cache_); - if (cacheAdapter != nullptr) { - cacheAdapter->UpdateColorMode(colorMode); - } - } + const std::string& /*bundleName*/, const std::string& /*moduleName*/, int32_t instanceId, ColorMode colorMode); void RegisterMainResourceAdapter(const std::string& bundleName, const std::string& moduleName, int32_t instanceId, const RefPtr& resAdapter); diff --git a/test/unittest/core/common/resource/resource_manager_test.cpp b/test/unittest/core/common/resource/resource_manager_test.cpp index ca44ebf11e7..2385133af48 100644 --- a/test/unittest/core/common/resource/resource_manager_test.cpp +++ b/test/unittest/core/common/resource/resource_manager_test.cpp @@ -251,7 +251,7 @@ HWTEST_F(ResourceManagerTest, ResourceManagerTest004, TestSize.Level1) * @tc.expect: resourceAdapters_ has a element. */ ResourceConfiguration resConfig; - ResourceManager::GetInstance().UpdateResourceConfig(bundleName, moduleName, DEFAULT_INSTANCE_ID, resConfig); + ResourceManager::GetInstance().UpdateResourceConfig("", "", DEFAULT_INSTANCE_ID, resConfig); EXPECT_EQ(ResourceManager::GetInstance().resourceAdapters_.size(), 1); /** @@ -260,7 +260,7 @@ HWTEST_F(ResourceManagerTest, ResourceManagerTest004, TestSize.Level1) * @tc.expect: resourceAdapters_ has a element. */ ColorMode colorMode = ColorMode::DARK; - ResourceManager::GetInstance().UpdateColorMode(bundleName, moduleName, DEFAULT_INSTANCE_ID, colorMode); + ResourceManager::GetInstance().UpdateColorMode("", "", DEFAULT_INSTANCE_ID, colorMode); EXPECT_EQ(ResourceManager::GetInstance().resourceAdapters_.size(), 1); } } // namespace OHOS::Ace \ No newline at end of file -- Gitee