From becc91d6b0b5fc59f3231ba7f1584eb9e2f3a313 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 23 Aug 2011 21:09:41 -0700 Subject: [PATCH] Fix an issue where Surface::lock() would never update the output region this bug was introduced recently. in some situations Surface::lock() is not able to preserve the content of the back buffer and needs to tell the caller to redraw everything. Bug: 5186460 Change-Id: I14e03939ddfc1b7ad2a8b99ad79435314c60e78e --- libs/gui/Surface.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 54d04aada8b1d..ff45fa34706ba 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -351,13 +351,13 @@ int Surface::query(int what, int* value) const { // ---------------------------------------------------------------------------- -status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) { +status_t Surface::lock(SurfaceInfo* other, Region* inOutDirtyRegion) { ANativeWindow_Buffer outBuffer; ARect temp; ARect* inOutDirtyBounds = NULL; - if (dirtyIn) { - temp = dirtyIn->getBounds(); + if (inOutDirtyRegion) { + temp = inOutDirtyRegion->getBounds(); inOutDirtyBounds = &temp; } @@ -371,6 +371,11 @@ status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) { other->format = uint32_t(outBuffer.format); other->bits = outBuffer.bits; } + + if (inOutDirtyRegion) { + inOutDirtyRegion->set( static_cast(temp) ); + } + return err; }