diff options
| author | 2011-10-21 15:57:45 -0700 | |
|---|---|---|
| committer | 2011-10-21 15:57:45 -0700 | |
| commit | aa938c8d9c0e71c9b556657cb33794210ce6ebf8 (patch) | |
| tree | 9f2bb669436041d3c06de759ba9d6206af86f420 /services/surfaceflinger/SurfaceFlinger.cpp | |
| parent | 148d5bd855e4872bbe99870b0019462bcf73b72c (diff) | |
| parent | 6497eabf0eaba7eb239431043b32365fb0daa7a1 (diff) | |
Merge "mDirtyRegion is single threaded, but could be accessed from a hwc thread" into ics-mr0
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 4b2866cb67fc..ba8f6308b1a0 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -788,6 +788,8 @@ void SurfaceFlinger::handlePageFlip() } unlockPageFlip(currentLayers); + + mDirtyRegion.orSelf(getAndClearInvalidateRegion()); mDirtyRegion.andSelf(screenRegion); } @@ -1798,12 +1800,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, |