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
This commit is contained in:
parent
a45836466c
commit
87a96ea9ea
@ -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;
|
ANativeWindow_Buffer outBuffer;
|
||||||
|
|
||||||
ARect temp;
|
ARect temp;
|
||||||
ARect* inOutDirtyBounds = NULL;
|
ARect* inOutDirtyBounds = NULL;
|
||||||
if (dirtyIn) {
|
if (inOutDirtyRegion) {
|
||||||
temp = dirtyIn->getBounds();
|
temp = inOutDirtyRegion->getBounds();
|
||||||
inOutDirtyBounds = &temp;
|
inOutDirtyBounds = &temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,6 +371,11 @@ status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn) {
|
|||||||
other->format = uint32_t(outBuffer.format);
|
other->format = uint32_t(outBuffer.format);
|
||||||
other->bits = outBuffer.bits;
|
other->bits = outBuffer.bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inOutDirtyRegion) {
|
||||||
|
inOutDirtyRegion->set( static_cast<Rect const&>(temp) );
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user