Invoke a padding round in certain use-cases.
* In some use-cases, it is possible that there are
no AppBuffer layers on the external/virtual layer-list
during which all the pipes will be allocated to the
primary. When layers do comeup on external/virtual
layer-list, subsequent overlay sets fail.
* This change ensures that in such cases, we invoke a
padding round on all the displays to free up the
hw resources which can be used in subsequent cycles.
Change-Id: Ifac0b8f51a8719eb55b11010d05b8d11352db054
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 4f6099e..53d614f 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -419,8 +419,8 @@
__FUNCTION__);
ret = false;
} else if(ctx->isPaddingRound) {
- ctx->isPaddingRound = false;
- ALOGD_IF(isDebug(), "%s: padding round",__FUNCTION__);
+ ALOGD_IF(isDebug(), "%s: padding round invoked for dpy %d",
+ __FUNCTION__,mDpy);
ret = false;
}
return ret;
@@ -1410,11 +1410,10 @@
const int numLayers = ctx->listStats[mDpy].numAppLayers;
MDPVersion& mdpVersion = qdutils::MDPVersion::getInstance();
- //number of app layers exceeds MAX_NUM_APP_LAYERS fall back to GPU
- //do not cache the information for next draw cycle.
- if(numLayers > MAX_NUM_APP_LAYERS) {
- ALOGI("%s: Number of App layers exceeded the limit ",
- __FUNCTION__);
+ //Do not cache the information for next draw cycle.
+ if(numLayers > MAX_NUM_APP_LAYERS or (!numLayers)) {
+ ALOGI("%s: Unsupported layer count for mdp composition",
+ __FUNCTION__);
mCachedFrame.reset();
return -1;
}