summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2011-10-21 16:00:00 -0700
committer Android Git Automerger <android-git-automerger@android.com> 2011-10-21 16:00:00 -0700
commit9ec98cd134a3d698bc3ee7a62c02c7818e8b02af (patch)
treea8fcae858bb1e3ede31bd25c45b325ab36af62e7 /services/surfaceflinger/SurfaceFlinger.cpp
parent1625b2af03640e810230c09953f6fbc381fb50b9 (diff)
parentaa938c8d9c0e71c9b556657cb33794210ce6ebf8 (diff)
am aa938c8d: Merge "mDirtyRegion is single threaded, but could be accessed from a hwc thread" into ics-mr0
* commit 'aa938c8d9c0e71c9b556657cb33794210ce6ebf8': mDirtyRegion is single threaded, but could be accessed from a hwc thread
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index dc47a0360ceb..e869ba259c8a 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -742,6 +742,8 @@ void SurfaceFlinger::handlePageFlip()
}
unlockPageFlip(currentLayers);
+
+ mDirtyRegion.orSelf(getAndClearInvalidateRegion());
mDirtyRegion.andSelf(screenRegion);
}
@@ -1716,12 +1718,24 @@ status_t SurfaceFlinger::onTransact(
}
void SurfaceFlinger::repaintEverything() {
- Mutex::Autolock _l(mStateLock);
const DisplayHardware& hw(graphicPlane(0).displayHardware());
- mDirtyRegion.set(hw.bounds());
+ const Rect bounds(hw.getBounds());
+ setInvalidateRegion(Region(bounds));
signalEvent();
}
+void SurfaceFlinger::setInvalidateRegion(const Region& reg) {
+ Mutex::Autolock _l(mInvalidateLock);
+ mInvalidateRegion = reg;
+}
+
+Region SurfaceFlinger::getAndClearInvalidateRegion() {
+ Mutex::Autolock _l(mInvalidateLock);
+ Region reg(mInvalidateRegion);
+ mInvalidateRegion.clear();
+ return reg;
+}
+
// ---------------------------------------------------------------------------
status_t SurfaceFlinger::renderScreenToTexture(DisplayID dpy,