author | baocheng sun <baocheng.sun@amlogic.com> | 2019-12-27 02:14:35 (GMT) |
---|---|---|
committer | sky zhou <sky.zhou@amlogic.com> | 2020-05-21 11:10:45 (GMT) |
commit | 0ab16d0b478cab423c10072a2efb6a027899012a (patch) | |
tree | b24b4a5936cbe68ec7b4b2c337120d4f2a153403 | |
parent | 0250e75ebab1e04d848f0fc3232e3e5de00a51cb (diff) | |
download | hwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.zip hwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.tar.gz hwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.tar.bz2 |
hwc: release all ComposerHandleCache when drm video exit [1/1]
PD#SWPL-19149
Problem:
When drm video exit playing, codec keeper memory not released
Solution:
Release all composerHandleCache when drm video exit
Verify:
verify on newton
Change-Id: I03ea8503cd6e5862dbcd6796077f2e89728017e6
Signed-off-by: baocheng sun <baocheng.sun@amlogic.com>
-rw-r--r-- | service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h b/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h index 2a06130..ba864f4 100644 --- a/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h +++ b/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h @@ -208,7 +208,6 @@ class ComposerHandleCache { // release cache Error releaseCache(uint32_t slot) { if (slot >= 0 && slot < mHandles.size()) { - slot++; switch (mHandleType) { case HandleType::BUFFER: for (; slot < mHandles.size(); slot++) { @@ -243,12 +242,16 @@ class ComposerHandleCache { } else if (am_gralloc_get_width(handle) <= 1 && am_gralloc_get_height(handle) <= 1) { mFbType = DrmFbType::DRM_FB_DIM; } else if (am_gralloc_is_coherent_buffer(handle)) { - if (mFbType == DrmFbType::DRM_FB_VIDEO) { + if (mFbType == DrmFbType::DRM_FB_VIDEO || + mFbType == DrmFbType::DRM_FB_DIM || + mFbType == DrmFbType::DRM_FB_VIDEO_OVERLAY) { changed = true; } mFbType = DrmFbType::DRM_FB_SCANOUT; } else { - if (mFbType == DrmFbType::DRM_FB_VIDEO) { + if (mFbType == DrmFbType::DRM_FB_VIDEO || + mFbType == DrmFbType::DRM_FB_DIM || + mFbType == DrmFbType::DRM_FB_VIDEO_OVERLAY) { changed = true; } mFbType = DrmFbType::DRM_FB_RENDER; @@ -271,8 +274,10 @@ class ComposerHandleCache { if (mHandleType == HandleType::BUFFER) { bool changed = isChangedFromeVideoToUi(*outHandle); - if (changed) - releaseCache(slot); + if (changed) { + ALOGD("FB type changed from video to UI, release cache"); + releaseCache(0); + } } return error; |