hwc: Implement idle-fallback for videos
In case of videos, do a fallback using 2 pipes per mixer at most.
This redraw will happen only once to reduce pipes from at most 4
to at most 2 and never draw again until there is an update.
Change-Id: I78c0dc2af4e3bd7e9128994e507e777187b4e247
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index b88674f..22d9042 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -366,11 +366,7 @@
ctx->isPaddingRound = false;
ALOGD_IF(isDebug(), "%s: padding round",__FUNCTION__);
ret = false;
- } else if(sIdleFallBack) {
- ALOGD_IF(isDebug(), "%s: idle fallback",__FUNCTION__);
- ret = false;
}
-
return ret;
}
@@ -381,6 +377,11 @@
const int numAppLayers = ctx->listStats[mDpy].numAppLayers;
+ if(sIdleFallBack) {
+ ALOGD_IF(isDebug(), "%s: Idle fallback dpy %d",__FUNCTION__, mDpy);
+ return false;
+ }
+
if(mDpy > HWC_DISPLAY_PRIMARY){
ALOGD_IF(isDebug(), "%s: Cannot support External display(s)",
__FUNCTION__);
@@ -856,7 +857,7 @@
}
/* reset Invalidator */
- if(idleInvalidator && mCurrentFrame.mdpCount)
+ if(idleInvalidator && !sIdleFallBack && mCurrentFrame.mdpCount)
idleInvalidator->markForSleep();
overlay::Overlay& ov = *ctx->mOverlay;
@@ -1024,7 +1025,7 @@
}
/* reset Invalidator */
- if(idleInvalidator && mCurrentFrame.mdpCount)
+ if(idleInvalidator && !sIdleFallBack && mCurrentFrame.mdpCount)
idleInvalidator->markForSleep();
overlay::Overlay& ov = *ctx->mOverlay;