From 147e89051f4f3600ec6c643d19224c65b746b163 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 11:41:01 +0000 Subject: [PATCH 1/9] update display/composer/cache_manager/BUILD.gn. Signed-off-by: pxd2022 --- display/composer/cache_manager/BUILD.gn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/display/composer/cache_manager/BUILD.gn b/display/composer/cache_manager/BUILD.gn index 11e68573..c4efa847 100644 --- a/display/composer/cache_manager/BUILD.gn +++ b/display/composer/cache_manager/BUILD.gn @@ -25,6 +25,8 @@ ohos_shared_library("libcomposer_buffer_cache") { "../", ] + deps = [ "../../buffer/v1_0:libdisplay_buffer_stub_1.0" ] + external_deps = [ "c_utils:utils", "hdf_core:libhdi", -- Gitee From f6ecf8c77df476aefa89d23b00b454c0cc84d01e Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 11:57:52 +0000 Subject: [PATCH 2/9] update display/composer/cache_manager/cache_manager.h. Signed-off-by: pxd2022 --- .../composer/cache_manager/cache_manager.h | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/display/composer/cache_manager/cache_manager.h b/display/composer/cache_manager/cache_manager.h index 1532299f..f7d14a51 100644 --- a/display/composer/cache_manager/cache_manager.h +++ b/display/composer/cache_manager/cache_manager.h @@ -36,13 +36,21 @@ namespace Composer { template class CacheManager : public NoCopyable { public: - CacheManager() : cacheCountMax_(0) + CacheManager() + : cacheCountMax_ { 0 }, + cleanUpFunc_ { nullptr }, + initFunc_ { nullptr } { } virtual ~CacheManager() { std::lock_guard lock(mutex_); + if (cleanUpFunc_) { + for (auto& cache : caches_) { + cleanUpFunc_(cache.second); + } + } caches_.clear(); } @@ -71,32 +79,41 @@ public: bool InsertCache(IdType id, CacheType* cache) { - if (SearchCache(id) != nullptr) { + std::lock_guard lock(mutex_); + auto cacheItem = caches_.find(id); + if (cacheItem != caches_.end()) { HDF_LOGI("%{public}s: intend to insert a existing cache, SeqNo=%{public}d", __func__, id); + cacheItem->second = std::move(*(new std::unique_ptr(cache))); } else { if (cacheCountMax_ != 0 && Size() >= cacheCountMax_) { HDF_LOGE("%{public}s: Caches is full, new seqNo:%{public}d can't be inserted", __func__, id); return false; } + caches_[id] = std::move(*(new std::unique_ptr(cache))); + } + + if (initFunc_) { + initFunc_(caches_[id]); } - std::lock_guard lock(mutex_); - caches_[id] = std::move(*(new std::unique_ptr(cache))); return true; } bool EraseCache(IdType id) { - bool ret = false; - if (SearchCache(id) != nullptr) { - std::lock_guard lock(mutex_); - caches_.erase(id); - ret = true; - } else { + std::lock_guard lock(mutex_); + auto cacheItem = caches_.find(id); + if (cacheItem == caches_.end() || cacheItem->second == nullptr) { HDF_LOGE("%{public}s: Cache %{public}d is not existing\n", __func__, id); + return false; } - return ret; + if (cleanUpFunc_) { + cleanUpFunc_(cacheItem->second); + } + + caches_.erase(cacheItem); + return true; } CacheType* SearchCache(IdType id) @@ -118,9 +135,21 @@ public: } } + void SetCleanUpFunc(void (*func)(std::unique_ptr&)) + { + cleanUpFunc_ = func; + } + + void SetInitFunc(void (*func)(std::unique_ptr&)) + { + initFunc_ = func; + } + private: uint32_t cacheCountMax_; std::unordered_map> caches_; + void (*cleanUpFunc_)(std::unique_ptr&); + void (*initFunc_)(std::unique_ptr&); std::mutex mutex_; }; } // namespace Composer -- Gitee From 8aacd18bce7aef304b3d2ec7a1ee81fd52deab70 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 12:00:55 +0000 Subject: [PATCH 3/9] update display/composer/cache_manager/device_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/device_cache.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/display/composer/cache_manager/device_cache.cpp b/display/composer/cache_manager/device_cache.cpp index e5402760..79c35aca 100644 --- a/display/composer/cache_manager/device_cache.cpp +++ b/display/composer/cache_manager/device_cache.cpp @@ -58,10 +58,16 @@ int32_t DeviceCache::Init() DISPLAY_CHK_RETURN(clientBufferCaches_ == nullptr, HDF_FAILURE, HDF_LOGE("%{public}s: create client buffer caches failed", __func__)); + clientBufferCaches_->SetInitFunc(LayerCache::NativeBufferInit); + clientBufferCaches_->SetCleanUpFunc(LayerCache::NativeBufferCleanUp); + outputBufferCaches_.reset(new CacheManager()); DISPLAY_CHK_RETURN(outputBufferCaches_ == nullptr, HDF_FAILURE, HDF_LOGE("%{public}s: create output buffer caches failed", __func__)); + outputBufferCaches_->SetInitFunc(LayerCache::NativeBufferInit); + outputBufferCaches_->SetCleanUpFunc(LayerCache::NativeBufferCleanUp); + return HDF_SUCCESS; } -- Gitee From d083cfe16863b220c53cc91928a7a384eff95e32 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 12:13:58 +0000 Subject: [PATCH 4/9] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- .../composer/cache_manager/layer_cache.cpp | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 834557ca..167c554e 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -54,6 +54,9 @@ int32_t LayerCache::Init() DISPLAY_CHK_RETURN(bufferCaches_ == nullptr, HDF_FAILURE, HDF_LOGE("%{public}s: create buffer caches failed", __func__)); + bufferCaches_->SetInitFunc(NativeBufferInit); + bufferCaches_->SetCleanUpFunc(NativeBufferCleanUp); + return HDF_SUCCESS; } @@ -90,6 +93,77 @@ void LayerCache::Dump() const HDF_LOGE("layerId-%{public}d, buffer[%{public}d]: %{public}s", layerId_, id, info.c_str()); }); } + +void LayerCache::NativeBufferInit(std::unique_ptr& buffer) +{ + int32_t ret = Mmap(buffer); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%{public}s: Mmap failed with %{public}d!", __func__, ret); + } +} + +void LayerCache::NativeBufferCleanUp(std::unique_ptr& buffer) +{ + int32_t ret = Unmap(buffer); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%{public}s: Unmap failed with %{public}d!", __func__, ret); + } +} + +sptr LayerCache::GetMapperService() +{ + static sptr mapperService; + if (mapperService == nullptr) { + mapperService = Buffer::V1_0::IMapper::Get(true); + } + return mapperService; +} + +int32_t LayerCache::Mmap(std::unique_ptr& buffer) +{ + if (buffer == nullptr || buffer.get() == nullptr) { + return HDF_SUCCESS; + } + + auto mapperService = GetMapperService(); + if (mapperService == nullptr) { + HDF_LOGE("GetMapperService failed!"); + retufn HDF_FAILURE; + } + + sptr nativeBuffer(new NativeBuffer); + if (nativeBuffer == nullptr) { + HDF_LOGE("new NativeBuffer failed!"); + retufn HDF_FAILURE; + } + + nativeBuffer->SetBufferHandle(buffer.get()->GetBufferHandle(), false); + + return mapperService->Mmap(nativeBuffer); +} + +int32_t LayerCache::Unmap(std::unique_ptr& buffer) +{ + if (buffer == nullptr || buffer.get() == nullptr) { + return HDF_SUCCESS; + } + + auto mapperService = GetMapperService(); + if (mapperService == nullptr) { + HDF_LOGE("GetMapperService failed!"); + retufn HDF_FAILURE; + } + + sptr nativeBuffer(new NativeBuffer); + if (nativeBuffer == nullptr) { + HDF_LOGE("new NativeBuffer failed!"); + retufn HDF_FAILURE; + } + + nativeBuffer->SetBufferHandle(buffer.get()->GetBufferHandle(), false); + + return mapperService->Unmap(nativeBuffer); +} } // namespace Composer } // namespace Display } // namespace HDI -- Gitee From a62314776296371fac96bb6e4930256dd2c2402c Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 12:17:35 +0000 Subject: [PATCH 5/9] update display/composer/cache_manager/layer_cache.h. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/display/composer/cache_manager/layer_cache.h b/display/composer/cache_manager/layer_cache.h index 06169fa8..ad49104a 100644 --- a/display/composer/cache_manager/layer_cache.h +++ b/display/composer/cache_manager/layer_cache.h @@ -22,6 +22,7 @@ #include "base/native_buffer.h" #include "cache_manager.h" #include "nocopyable.h" +#include "v1_0/mapper_stub.h" namespace OHOS { namespace HDI { @@ -36,9 +37,14 @@ public: const std::vector& deletingList, std::function realFunc); int32_t SetBufferCacheMaxCount(uint32_t cacheCount); void Dump() const; + static void NativeBUfferInit(std::unique_ptr& buffer); + static void NativeBUfferCleanUp(std::unique_ptr& buffer); private: explicit LayerCache(uint32_t id); int32_t Init(); + static sptr GetMapperService(); + static int32_t Mmap(std::unique_ptr& buffer); + static int32_t Unmap(std::unique_ptr& buffer); uint32_t layerId_; std::shared_ptr> bufferCaches_; -- Gitee From dc29b99c72e289efd90c8a56df43a07230b809b4 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 12:27:01 +0000 Subject: [PATCH 6/9] update display/composer/v1_0/display_command/display_cmd_responser.h. Signed-off-by: pxd2022 --- .../composer/v1_0/display_command/display_cmd_responser.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/display/composer/v1_0/display_command/display_cmd_responser.h b/display/composer/v1_0/display_command/display_cmd_responser.h index 10f83b4e..70f8a91e 100755 --- a/display/composer/v1_0/display_command/display_cmd_responser.h +++ b/display/composer/v1_0/display_command/display_cmd_responser.h @@ -386,6 +386,12 @@ EXIT: HDF_LOGE("%{public}s, FileDescriptorUnpack error", __func__); return HDF_FAILURE; } + + if (RegisterBuffer(data.buffer) != HDF_SUCCESS) { + HDF_LOGE("%{public}s, RegisterBuffer error", __func__); + return HDF_FAILURE; + } + if (data.buffer != nullptr) { int32_t ret = RegisterBuffer(data.buffer); DISPLAY_CHK_RETURN(ret != HDF_SUCCESS && ret != DISPLAY_NOT_SUPPORT, HDF_FAILURE, -- Gitee From 3e3a8b75fd077ce8a1f6f455a874fd55382d04f3 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Mon, 22 Apr 2024 13:56:01 +0000 Subject: [PATCH 7/9] update display/composer/cache_manager/cache_manager.h. Signed-off-by: pxd2022 --- display/composer/cache_manager/cache_manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/display/composer/cache_manager/cache_manager.h b/display/composer/cache_manager/cache_manager.h index f7d14a51..c90c2cce 100644 --- a/display/composer/cache_manager/cache_manager.h +++ b/display/composer/cache_manager/cache_manager.h @@ -83,13 +83,13 @@ public: auto cacheItem = caches_.find(id); if (cacheItem != caches_.end()) { HDF_LOGI("%{public}s: intend to insert a existing cache, SeqNo=%{public}d", __func__, id); - cacheItem->second = std::move(*(new std::unique_ptr(cache))); + cacheItem->second.reset(cache); } else { if (cacheCountMax_ != 0 && Size() >= cacheCountMax_) { HDF_LOGE("%{public}s: Caches is full, new seqNo:%{public}d can't be inserted", __func__, id); return false; } - caches_[id] = std::move(*(new std::unique_ptr(cache))); + caches_[id] = std::move(std::unique_ptr(cache)); } if (initFunc_) { -- Gitee From dfcd50337802183943955b73e258a524424fb7eb Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 23 Apr 2024 13:23:03 +0000 Subject: [PATCH 8/9] update display/composer/cache_manager/layer_cache.h. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/display/composer/cache_manager/layer_cache.h b/display/composer/cache_manager/layer_cache.h index ad49104a..2dd18843 100644 --- a/display/composer/cache_manager/layer_cache.h +++ b/display/composer/cache_manager/layer_cache.h @@ -37,8 +37,8 @@ public: const std::vector& deletingList, std::function realFunc); int32_t SetBufferCacheMaxCount(uint32_t cacheCount); void Dump() const; - static void NativeBUfferInit(std::unique_ptr& buffer); - static void NativeBUfferCleanUp(std::unique_ptr& buffer); + static void NativeBufferInit(std::unique_ptr& buffer); + static void NativeBufferCleanUp(std::unique_ptr& buffer); private: explicit LayerCache(uint32_t id); int32_t Init(); -- Gitee From 1e1425500b6d051eea7f0cb11157fae8c776d44f Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 23 Apr 2024 14:55:04 +0000 Subject: [PATCH 9/9] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 167c554e..56d2e193 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -128,13 +128,13 @@ int32_t LayerCache::Mmap(std::unique_ptr& buffer) auto mapperService = GetMapperService(); if (mapperService == nullptr) { HDF_LOGE("GetMapperService failed!"); - retufn HDF_FAILURE; + return HDF_FAILURE; } sptr nativeBuffer(new NativeBuffer); if (nativeBuffer == nullptr) { HDF_LOGE("new NativeBuffer failed!"); - retufn HDF_FAILURE; + return HDF_FAILURE; } nativeBuffer->SetBufferHandle(buffer.get()->GetBufferHandle(), false); @@ -151,13 +151,13 @@ int32_t LayerCache::Unmap(std::unique_ptr& buffer) auto mapperService = GetMapperService(); if (mapperService == nullptr) { HDF_LOGE("GetMapperService failed!"); - retufn HDF_FAILURE; + return HDF_FAILURE; } sptr nativeBuffer(new NativeBuffer); if (nativeBuffer == nullptr) { HDF_LOGE("new NativeBuffer failed!"); - retufn HDF_FAILURE; + return HDF_FAILURE; } nativeBuffer->SetBufferHandle(buffer.get()->GetBufferHandle(), false); -- Gitee