diff options
author | joenchen <joenchen@google.com> | 2022-12-06 15:49:10 +0000 |
---|---|---|
committer | joenchen <joenchen@google.com> | 2023-02-24 08:30:41 +0000 |
commit | fff8c812d5a46c38a62c8fd886fc42a58d1774ca (patch) | |
tree | c79fe9d8ad77c4bfb8b8856254ea1be7cd1804ed | |
parent | 15c9335dbbdb23fc1705203772e68d5f3ea0febe (diff) |
libhwc2.1: fix wrong overrinding of TDM
calculateHWResourceAmount() function needs overrinding for
each device implementation. It fixes wrong function parameters.
Bug: 191421040
Test: test multiple scaling/rotation layers by hwc-tester
Signed-off-by: YongWook Shin <yongwook.shin@samsung.com>
Change-Id: Icc91734b014a4bb7bad6ebe6d08baa2ebe0d404d
-rw-r--r-- | libhwc2.1/libdevice/ExynosDevice.cpp | 1 | ||||
-rw-r--r-- | libhwc2.1/libdevice/ExynosDisplay.h | 14 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.cpp | 6 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.h | 1 |
4 files changed, 11 insertions, 11 deletions
diff --git a/libhwc2.1/libdevice/ExynosDevice.cpp b/libhwc2.1/libdevice/ExynosDevice.cpp index 3701d5c..ec4d57a 100644 --- a/libhwc2.1/libdevice/ExynosDevice.cpp +++ b/libhwc2.1/libdevice/ExynosDevice.cpp @@ -227,6 +227,7 @@ void ExynosDevice::initDeviceInterface(uint32_t interfaceType) display->mDisplayInterface) != NO_ERROR) { ALOGD("Remove display[%d], Failed to initialize display interface", i); mDisplays.removeAt(i); + mDisplayMap.erase(display->mDisplayId); delete display; } else { i++; diff --git a/libhwc2.1/libdevice/ExynosDisplay.h b/libhwc2.1/libdevice/ExynosDisplay.h index 0f12ab9..1479989 100644 --- a/libhwc2.1/libdevice/ExynosDisplay.h +++ b/libhwc2.1/libdevice/ExynosDisplay.h @@ -286,20 +286,20 @@ class ExynosSortedLayer : public Vector <ExynosLayer*> static int compare(ExynosLayer * const *lhs, ExynosLayer *const *rhs); }; -class displayTDMInfo { +class DisplayTDMInfo { public: /* Could be extended */ - typedef struct resourceAmount { + typedef struct ResourceAmount { uint32_t totalAmount; - } resourceAmount_t; - std::map<tdm_attr_t, resourceAmount_t> mAmount; + } ResourceAmount_t; + std::map<tdm_attr_t, ResourceAmount_t> mAmount; - uint32_t initTDMInfo(resourceAmount_t amount, tdm_attr_t attr) { + uint32_t initTDMInfo(ResourceAmount_t amount, tdm_attr_t attr) { mAmount[attr] = amount; return 0; } - resourceAmount_t getAvailableAmount(tdm_attr_t attr) { return mAmount[attr]; } + ResourceAmount_t getAvailableAmount(tdm_attr_t attr) { return mAmount[attr]; } }; class ExynosCompositionInfo : public ExynosMPPSource { @@ -1530,7 +1530,7 @@ class ExynosDisplay { virtual bool isEnabled() { return mPlugState; } // Resource TDM (Time-Division Multiplexing) - std::map<uint32_t, displayTDMInfo> mDisplayTDMInfo; + std::map<uint32_t, DisplayTDMInfo> mDisplayTDMInfo; class RotatingLogFileWriter { public: diff --git a/libhwc2.1/libresource/ExynosResourceManager.cpp b/libhwc2.1/libresource/ExynosResourceManager.cpp index 085af47..1078478 100644 --- a/libhwc2.1/libresource/ExynosResourceManager.cpp +++ b/libhwc2.1/libresource/ExynosResourceManager.cpp @@ -386,7 +386,7 @@ int32_t ExynosResourceManager::assignResource(ExynosDisplay *display) HDEBUGLOGD(eDebugTDM, "%s layer's calculation start", __func__); for (uint32_t i = 0; i < display->mLayers.size(); i++) { display->mLayers[i]->resetValidateData(); - calculateHWResourceAmount(display->mLayers[i]); + calculateHWResourceAmount(display, display->mLayers[i]); } display->initializeValidateInfos(); @@ -1010,7 +1010,7 @@ int32_t ExynosResourceManager::assignCompositionTarget(ExynosDisplay * display, compositionInfo->setExynosImage(src_img, dst_img); compositionInfo->setExynosMidImage(dst_img); HDEBUGLOGD(eDebugTDM, "%s M2M target calculation start", __func__); - calculateHWResourceAmount(compositionInfo); + calculateHWResourceAmount(display, compositionInfo); isSupported = mOtfMPPs[i]->isSupported(*display, src_img, dst_img); if (isSupported == NO_ERROR) @@ -1584,7 +1584,7 @@ int32_t ExynosResourceManager::assignLayer(ExynosDisplay *display, ExynosLayer * HDEBUGLOGD(eDebugTDM, "%s Composition target calculation start (candidates)", __func__); - calculateHWResourceAmount(&dpuSrcInfo); + calculateHWResourceAmount(display, &dpuSrcInfo); isAssignableFlag = isAssignable(mOtfMPPs[k], display, otf_src_img, otf_dst_img, &dpuSrcInfo); diff --git a/libhwc2.1/libresource/ExynosResourceManager.h b/libhwc2.1/libresource/ExynosResourceManager.h index a844bf6..e996554 100644 --- a/libhwc2.1/libresource/ExynosResourceManager.h +++ b/libhwc2.1/libresource/ExynosResourceManager.h @@ -239,7 +239,6 @@ class ExynosResourceManager { } virtual uint32_t setDisplaysTDMInfo() { return 0; } virtual uint32_t initDisplaysTDMInfo() { return 0; } - virtual uint32_t calculateHWResourceAmount(ExynosMPPSource __unused *mppSrc) { return 0; } virtual uint32_t calculateHWResourceAmount(ExynosDisplay __unused *display, ExynosMPPSource __unused *mppSrc) { return 0; |