diff options
author | Joen Chen <joenchen@google.com> | 2023-03-03 05:31:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-03-03 05:31:24 +0000 |
commit | 3773176ab0244629ec2bcd2c8e13a28853ee9c11 (patch) | |
tree | 7872b1673d353b83aaeb06bf6752d294c6e85343 | |
parent | 37f04313505f51a58c862586dd423d421c510dbf (diff) | |
parent | 8fdd2fc7aef56dd0c1590175c831da44c6770397 (diff) |
Merge changes from topic "fixTDM" into udc-dev
* changes:
libhwc2.1: move calculateHWResourceAmount() after preProcessLayer()
libhwc2.1: fix wrong overrinding of TDM
-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 | 11 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.h | 1 |
4 files changed, 15 insertions, 12 deletions
diff --git a/libhwc2.1/libdevice/ExynosDevice.cpp b/libhwc2.1/libdevice/ExynosDevice.cpp index 8fe2e07..f2eddbf 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 2b876c0..aaae5cb 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 { @@ -1525,7 +1525,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..ec4db5f 100644 --- a/libhwc2.1/libresource/ExynosResourceManager.cpp +++ b/libhwc2.1/libresource/ExynosResourceManager.cpp @@ -383,10 +383,8 @@ int32_t ExynosResourceManager::assignResource(ExynosDisplay *display) return NO_ERROR; } - 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]); } display->initializeValidateInfos(); @@ -397,6 +395,11 @@ int32_t ExynosResourceManager::assignResource(ExynosDisplay *display) return ret; } + HDEBUGLOGD(eDebugTDM, "%s layer's calculation start", __func__); + for (uint32_t i = 0; i < display->mLayers.size(); i++) { + calculateHWResourceAmount(display, display->mLayers[i]); + } + if (mDevice->isFirstValidate()) { HDEBUGLOGD(eDebugResourceManager, "This is first validate"); if (exynosHWCControl.displayMode < DISPLAY_MODE_NUM) @@ -1010,7 +1013,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 +1587,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; |