summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoen Chen <joenchen@google.com>2023-03-03 05:31:24 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-03-03 05:31:24 +0000
commit3773176ab0244629ec2bcd2c8e13a28853ee9c11 (patch)
tree7872b1673d353b83aaeb06bf6752d294c6e85343
parent37f04313505f51a58c862586dd423d421c510dbf (diff)
parent8fdd2fc7aef56dd0c1590175c831da44c6770397 (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.cpp1
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.h14
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.cpp11
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.h1
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;