summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorBaldev Sahu <bsahu@codeaurora.org>2015-01-23 14:00:34 +0530
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:22:27 -0600
commita1288c979df92ab7b1a8cae7e0710cda3451c8df (patch)
tree2ba73482591a9aaf9c665973488c4d4199d72046 /libs
parent8760f1673ea9c2aca0181827808cbd6981a5a2ee (diff)
downloadframeworks_native-a1288c979df92ab7b1a8cae7e0710cda3451c8df.zip
frameworks_native-a1288c979df92ab7b1a8cae7e0710cda3451c8df.tar.gz
frameworks_native-a1288c979df92ab7b1a8cae7e0710cda3451c8df.tar.bz2
libgui: Copyback all region except dirty region for newly allocated buffer
Inside Surface::lock if new buffer is allocated and DirtyRegion does not cover complete buffer bounds then copyback may not cover all remaining area as it copyback only area covered by dirty regions from other buffers. This will lead to left out black area which may cause flicker. Change-Id: I4a3f7a56fc5fbaf4af926584919577d8d34bed57
Diffstat (limited to 'libs')
-rw-r--r--libs/gui/Surface.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index 4445442..1abb6c3 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -1033,9 +1033,13 @@ status_t Surface::lock(
if (canCopyBack) {
Mutex::Autolock lock(mMutex);
Region oldDirtyRegion;
- for(int i = 0 ; i < NUM_BUFFER_SLOTS; i++ ) {
- if(i != backBufferSlot && !mSlots[i].dirtyRegion.isEmpty())
- oldDirtyRegion.orSelf(mSlots[i].dirtyRegion);
+ if(mSlots[backBufferSlot].dirtyRegion.isEmpty()) {
+ oldDirtyRegion.set(bounds);
+ } else {
+ for(int i = 0 ; i < NUM_BUFFER_SLOTS; i++ ) {
+ if(i != backBufferSlot && !mSlots[i].dirtyRegion.isEmpty())
+ oldDirtyRegion.orSelf(mSlots[i].dirtyRegion);
+ }
}
const Region copyback(oldDirtyRegion.subtract(newDirtyRegion));
if (!copyback.isEmpty())