From 790454b7c53b2922dc54c753ee44d3462f19c618 Mon Sep 17 00:00:00 2001 From: yangkan Date: Mon, 9 Dec 2024 15:09:13 +0800 Subject: [PATCH] =?UTF-8?q?OnSetLayerZorder=E5=A2=9E=E5=8A=A0buffer?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yangkan --- .../composer/cache_manager/device_cache.cpp | 4 -- .../composer/cache_manager/layer_cache.cpp | 10 ++++- display/composer/cache_manager/layer_cache.h | 1 + .../display_command/display_cmd_responser.h | 39 +++++++++++++++---- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/display/composer/cache_manager/device_cache.cpp b/display/composer/cache_manager/device_cache.cpp index bcd8b945..53667a93 100644 --- a/display/composer/cache_manager/device_cache.cpp +++ b/display/composer/cache_manager/device_cache.cpp @@ -151,8 +151,6 @@ int32_t DeviceCache::SetDisplayClientBuffer(BufferHandle*& buffer, uint32_t seqN HDF_LOGE("%{public}s: call NativeBufferCache fail", __func__)); auto ret = realFunc(*handle); if (ret != HDF_SUCCESS) { - clientBufferCaches_->EraseCache(seqNo); - buffer = nullptr; HDF_LOGE("%{public}s: call realFunc fail", __func__); } @@ -170,8 +168,6 @@ int32_t DeviceCache::SetVirtualDisplayBuffer(BufferHandle*& buffer, uint32_t seq HDF_LOGE("%{public}s: call NativeBufferCache fail", __func__)); ret = realFunc(*handle); if (ret != HDF_SUCCESS) { - outputBufferCaches_->EraseCache(seqNo); - buffer = nullptr; HDF_LOGE("%{public}s: call realFunc fail", __func__); } } else { diff --git a/display/composer/cache_manager/layer_cache.cpp b/display/composer/cache_manager/layer_cache.cpp index 9d153b6a..bd0ffd25 100644 --- a/display/composer/cache_manager/layer_cache.cpp +++ b/display/composer/cache_manager/layer_cache.cpp @@ -50,6 +50,14 @@ LayerCache::~LayerCache() { } +bool LayerCache::IsBufferCacheNotExist() +{ + if (bufferCaches_ == nullptr) { + return true; + } + return bufferCaches_->Size() == 0; +} + int32_t LayerCache::Init() { bufferCaches_.reset(new CacheManager()); @@ -84,8 +92,6 @@ int32_t LayerCache::SetLayerBuffer(BufferHandle*& buffer, uint32_t seqNo, bool & HDF_LOGE("%{public}s: call NativeBufferCache fail", __func__)); int32_t ret = realFunc(*handle); if (ret != HDF_SUCCESS) { - bufferCaches_->EraseCache(seqNo); - buffer = nullptr; HDF_LOGE("%{public}s: call realFunc fail", __func__); } diff --git a/display/composer/cache_manager/layer_cache.h b/display/composer/cache_manager/layer_cache.h index aa171ce7..c850d6d6 100644 --- a/display/composer/cache_manager/layer_cache.h +++ b/display/composer/cache_manager/layer_cache.h @@ -38,6 +38,7 @@ public: const std::vector& deletingList, std::function realFunc); int32_t SetBufferCacheMaxCount(uint32_t cacheCount); int32_t ResetLayerBuffer(); + bool IsBufferCacheNotExist(); void Dump() const; static void NativeBufferInit(sptr& buffer); static void NativeBufferCleanUp(sptr& buffer); 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 76304acb..d039ed04 100755 --- a/display/composer/v1_0/display_command/display_cmd_responser.h +++ b/display/composer/v1_0/display_command/display_cmd_responser.h @@ -440,10 +440,6 @@ EXIT: #endif // DISPLAY_COMMUNITY if (ret != HDF_SUCCESS) { HDF_LOGE("%{public}s, SetDisplayClientBuffer error", __func__); - if (data.isValidBuffer && data.buffer != nullptr) { - FreeBufferHandle(data.buffer); - data.buffer = nullptr; - } errMaps_.emplace(REQUEST_CMD_SET_DISPLAY_CLIENT_BUFFER, ret); } } @@ -635,6 +631,37 @@ EXIT: return; } + int32_t CheckBufferNotExist(uint32_t devId, uint32_t layerId) + { + if (cacheMgr_ == nullptr) { + HDF_LOGE("%{public}s, cacheMgr_ is null, devId:%{public}d, layerId:%{public}d", + __func__, devId, layerId); + return HDF_FAILURE; + } + + std::lock_guard lock(cacheMgr_->GetCacheMgrMutex()); + DeviceCache* devCache = cacheMgr_->DeviceCacheInstance(devId); + if (devCache == nullptr) { + HDF_LOGE("%{public}s, devCache is null, devId:%{public}d, layerId:%{public}d", + __func__, devId, layerId); + return HDF_FAILURE; + } + + LayerCache* layerCache = devCache->LayerCacheInstance(layerId); + if (layerCache == nullptr) { + HDF_LOGE("%{public}s, layerCache is null, devId:%{public}d, layerId:%{public}d", + __func__, devId, layerId); + return HDF_FAILURE; + } + + if (layerCache->IsBufferCacheNotExist()) { + HDF_LOGE("%{public}s, no buffer in devId:%{public}d, layerId:%{public}d", + __func__, devId, layerId); + return HDF_FAILURE; + } + return HDF_SUCCESS; + } + void OnSetLayerZorder(CommandDataUnpacker& unpacker) { DISPLAY_TRACE; @@ -898,10 +925,6 @@ EXIT: #endif // DISPLAY_COMMUNITY if (ret != HDF_SUCCESS) { HDF_LOGE("%{public}s, SetLayerBuffer error", __func__); - if (data.isValidBuffer && data.buffer != nullptr) { - FreeBufferHandle(data.buffer); - data.buffer = nullptr; - } errMaps_.emplace(REQUEST_CMD_SET_DISPLAY_CLIENT_BUFFER, ret); } -- Gitee