From 2aaa2e3048f1585c2c81a5ddec277c6ebd62c051 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 07:54:02 +0000 Subject: [PATCH 01/10] update display/composer/cache_manager/BUILD.gn. Signed-off-by: pxd2022 --- display/composer/cache_manager/BUILD.gn | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/display/composer/cache_manager/BUILD.gn b/display/composer/cache_manager/BUILD.gn index 11e68573..d5e56a93 100644 --- a/display/composer/cache_manager/BUILD.gn +++ b/display/composer/cache_manager/BUILD.gn @@ -25,6 +25,11 @@ ohos_shared_library("libcomposer_buffer_cache") { "../", ] + deps = [ + "//drivers/interface/display/buffer/v1_0:libdisplay_buffer_stub_1.0", + "//drivers/interface/display/buffer/v1_2:libdisplay_buffer_stub_1.2", + ] + external_deps = [ "c_utils:utils", "hdf_core:libhdi", -- Gitee From beb427fc50bfa2f908637203383563a0042947bc Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 07:57:01 +0000 Subject: [PATCH 02/10] update display/composer/cache_manager/cache_manager.h. Signed-off-by: pxd2022 --- .../composer/cache_manager/cache_manager.h | 56 ++++++++++++++----- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/display/composer/cache_manager/cache_manager.h b/display/composer/cache_manager/cache_manager.h index 1532299f..9143bb3f 100644 --- a/display/composer/cache_manager/cache_manager.h +++ b/display/composer/cache_manager/cache_manager.h @@ -36,13 +36,20 @@ 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 +78,39 @@ 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.reset(cache); } else { - if (cacheCountMax_ != 0 && Size() >= cacheCountMax_) { + if (cacheCountMax_ != 0 && caches_.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(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 +132,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 8a19f3634c1c9741b4610053e26394627a2ab2af Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 07:57:49 +0000 Subject: [PATCH 03/10] update display/composer/cache_manager/device_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/device_cache.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/display/composer/cache_manager/device_cache.cpp b/display/composer/cache_manager/device_cache.cpp index e5402760..23b49f90 100644 --- a/display/composer/cache_manager/device_cache.cpp +++ b/display/composer/cache_manager/device_cache.cpp @@ -58,10 +58,15 @@ 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 30954baab51e0a780b882be0645a50e7606447e5 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 07:59:25 +0000 Subject: [PATCH 04/10] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- .../composer/cache_manager/layer_cache.cpp | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 834557ca..8b7e77ed 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -54,6 +54,8 @@ 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; } @@ -83,6 +85,77 @@ int32_t LayerCache::SetLayerBuffer(const BufferHandle* buffer, uint32_t seqNo, b return HDF_SUCCESS; } +void LayerCache::NativeBufferInit(std::unique_ptr& buffer) +{ + if (buffer == nullptr) { + HDF_LOGW("NativeBufferInit buffer nullptr!"); + return; + } + 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) +{ + if (buffer == nullptr) { + HDF_LOGW("NativeBufferCleanUp buffer nullptr!"); + return; + } + 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_2::IMapper::Get(true); + } + return mapperService; +} + +int32_t LayerCache::Mmap(std::unique_ptr& buffer) +{ + auto mapperService = GetMapperService(); + if (mapperService == nullptr) { + HDF_LOGE("GetMapperService failed!"); + return HDF_FAILURE; + } + + sptr nativeBuffer(new NativeBuffer); + if (nativeBuffer == nullptr) { + HDF_LOGE("new NativeBuffer failed!"); + return HDF_FAILURE; + } + + nativeBuffer->SetBufferHandle(buffer->GetBufferHandle(), false); + + return mapperService->Mmap(nativeBuffer); +} + +int32_t LayerCache::Unmap(std::unique_ptr& buffer) +{ + auto mapperService = GetMapperService(); + if (mapperService == nullptr) { + HDF_LOGE("GetMapperService failed!"); + return HDF_FAILURE; + } + + sptr nativeBuffer(new NativeBuffer); + if (nativeBuffer == nullptr) { + HDF_LOGE("new NativeBuffer failed!"); + return HDF_FAILURE; + } + + nativeBuffer->SetBufferHandle(buffer->GetBufferHandle(), false); + + return mapperService->Unmap(nativeBuffer); +} + void LayerCache::Dump() const { bufferCaches_->TravelCaches([this](const int32_t id, const NativeBuffer& buffer)->void { -- Gitee From 028f877d48df731524f397db58fda620daf39235 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 08:06:02 +0000 Subject: [PATCH 05/10] 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..4326436b 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_2/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 46259e59a70d501e9b4d86d5b42a20c391460f53 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 09:21:53 +0000 Subject: [PATCH 06/10] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 8b7e77ed..8ad84929 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -87,6 +87,7 @@ int32_t LayerCache::SetLayerBuffer(const BufferHandle* buffer, uint32_t seqNo, b void LayerCache::NativeBufferInit(std::unique_ptr& buffer) { +#ifndef DISPLAY_COMMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferInit buffer nullptr!"); return; @@ -95,10 +96,12 @@ void LayerCache::NativeBufferInit(std::unique_ptr& buffer) if (ret != HDF_SUCCESS) { HDF_LOGE("%{public}s: Mmap failed with %{public}d!", __func__, ret); } +#endif } void LayerCache::NativeBufferCleanUp(std::unique_ptr& buffer) { +#ifndef DISPLAY_COMMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferCleanUp buffer nullptr!"); return; @@ -107,6 +110,7 @@ void LayerCache::NativeBufferCleanUp(std::unique_ptr& buffer) if (ret != HDF_SUCCESS) { HDF_LOGE("%{public}s: Unmap failed with %{public}d!", __func__, ret); } +#endif } sptr LayerCache::GetMapperService() -- Gitee From 607ffae5a2c9dca1b22d46fa44f2c53838998fcd Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 14:09:57 +0000 Subject: [PATCH 07/10] update display/composer/cache_manager/BUILD.gn. Signed-off-by: pxd2022 --- display/composer/cache_manager/BUILD.gn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/display/composer/cache_manager/BUILD.gn b/display/composer/cache_manager/BUILD.gn index d5e56a93..85db561c 100644 --- a/display/composer/cache_manager/BUILD.gn +++ b/display/composer/cache_manager/BUILD.gn @@ -25,6 +25,10 @@ ohos_shared_library("libcomposer_buffer_cache") { "../", ] + if (drivers_peripheral_display_community) { + display_defines = [ "DISPLAY_COMMUNITY" ] + } + deps = [ "//drivers/interface/display/buffer/v1_0:libdisplay_buffer_stub_1.0", "//drivers/interface/display/buffer/v1_2:libdisplay_buffer_stub_1.2", -- Gitee From 81b618c4e90662a0a6e2bacb0bcf8b94c708dd7f Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 15:07:26 +0000 Subject: [PATCH 08/10] update display/composer/cache_manager/BUILD.gn. Signed-off-by: pxd2022 --- display/composer/cache_manager/BUILD.gn | 4 ---- 1 file changed, 4 deletions(-) diff --git a/display/composer/cache_manager/BUILD.gn b/display/composer/cache_manager/BUILD.gn index 85db561c..d5e56a93 100644 --- a/display/composer/cache_manager/BUILD.gn +++ b/display/composer/cache_manager/BUILD.gn @@ -25,10 +25,6 @@ ohos_shared_library("libcomposer_buffer_cache") { "../", ] - if (drivers_peripheral_display_community) { - display_defines = [ "DISPLAY_COMMUNITY" ] - } - deps = [ "//drivers/interface/display/buffer/v1_0:libdisplay_buffer_stub_1.0", "//drivers/interface/display/buffer/v1_2:libdisplay_buffer_stub_1.2", -- Gitee From 608c4cf2d3674d5cca3acc25a4ee1ff19c8124a6 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 15:08:12 +0000 Subject: [PATCH 09/10] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 8ad84929..9efc303e 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -87,7 +87,7 @@ int32_t LayerCache::SetLayerBuffer(const BufferHandle* buffer, uint32_t seqNo, b void LayerCache::NativeBufferInit(std::unique_ptr& buffer) { -#ifndef DISPLAY_COMMUNITY +#ifdef DISPLAY_COMMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferInit buffer nullptr!"); return; @@ -101,7 +101,7 @@ void LayerCache::NativeBufferInit(std::unique_ptr& buffer) void LayerCache::NativeBufferCleanUp(std::unique_ptr& buffer) { -#ifndef DISPLAY_COMMUNITY +#ifdef DISPLAY_COMMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferCleanUp buffer nullptr!"); return; -- Gitee From 7183798868f123856adc5053968b9137de2d39c7 Mon Sep 17 00:00:00 2001 From: pxd2022 Date: Tue, 30 Apr 2024 15:47:22 +0000 Subject: [PATCH 10/10] update display/composer/cache_manager/layer_cache.cpp. Signed-off-by: pxd2022 --- display/composer/cache_manager/layer_cache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 9efc303e..1912e97c 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -87,7 +87,7 @@ int32_t LayerCache::SetLayerBuffer(const BufferHandle* buffer, uint32_t seqNo, b void LayerCache::NativeBufferInit(std::unique_ptr& buffer) { -#ifdef DISPLAY_COMMUNITY +#ifdef DISPLAY_COMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferInit buffer nullptr!"); return; @@ -101,7 +101,7 @@ void LayerCache::NativeBufferInit(std::unique_ptr& buffer) void LayerCache::NativeBufferCleanUp(std::unique_ptr& buffer) { -#ifdef DISPLAY_COMMUNITY +#ifdef DISPLAY_COMUNITY if (buffer == nullptr) { HDF_LOGW("NativeBufferCleanUp buffer nullptr!"); return; -- Gitee