hwc: fix shaking issue due to swap rect in mdp3
we should count the same dirtyRect and displayRect
min 3 times before enabling sawpRect feature.
Change-Id: I58524f0d1b9265e052a796f649e737765a1f8404
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 744195f..1cfcd6a 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -189,9 +189,10 @@
return -1;
}
}
- if(mFbCache.getUnchangedFbDRCount(dirtyRect) <
+ hwc_rect_t displayRect = list->hwLayers[changingLayerIndex].displayFrame;
+ if(mFbCache.getUnchangedFbDRCount(dirtyRect, displayRect) <
NUM_RENDER_BUFFERS) {
- mFbCache.insertAndUpdateFbCache(dirtyRect);
+ mFbCache.insertAndUpdateFbCache(dirtyRect, displayRect);
changingLayerIndex = -1;
}
} else {
@@ -1260,19 +1261,24 @@
}
void CopyBit::FbCache::reset() {
memset(&FbdirtyRect, 0, sizeof(FbdirtyRect));
+ memset(&FbdisplayRect, 0, sizeof(FbdisplayRect));
FbIndex =0;
}
-void CopyBit::FbCache::insertAndUpdateFbCache(hwc_rect_t dirtyRect) {
+void CopyBit::FbCache::insertAndUpdateFbCache(hwc_rect_t dirtyRect,
+ hwc_rect_t displayRect) {
FbIndex = FbIndex % NUM_RENDER_BUFFERS;
FbdirtyRect[FbIndex] = dirtyRect;
+ FbdisplayRect[FbIndex] = displayRect;
FbIndex++;
}
-int CopyBit::FbCache::getUnchangedFbDRCount(hwc_rect_t dirtyRect){
+int CopyBit::FbCache::getUnchangedFbDRCount(hwc_rect_t dirtyRect,
+ hwc_rect_t displayRect){
int sameDirtyCount = 0;
for (int i = 0 ; i < NUM_RENDER_BUFFERS ; i++ ){
- if( FbdirtyRect[i] == dirtyRect)
+ if( FbdirtyRect[i] == dirtyRect &&
+ FbdisplayRect[i] == displayRect)
sameDirtyCount++;
}
return sameDirtyCount;