diff options
| author | 2009-06-28 02:54:16 -0700 | |
|---|---|---|
| committer | 2009-06-29 14:44:11 -0700 | |
| commit | a8d44f75e1934072713371a2dcd143c63ffcbe0e (patch) | |
| tree | abb09cfa5769da6fa403ed515ada22b8e3dbb35d /libs/surfaceflinger/SurfaceFlinger.cpp | |
| parent | b8a5560e1303cb10f5cd482af466fc04d2bdfcab (diff) | |
fix [1947273] the DimLayer causes the whole screen to update during transactions
Diffstat (limited to 'libs/surfaceflinger/SurfaceFlinger.cpp')
| -rw-r--r-- | libs/surfaceflinger/SurfaceFlinger.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp index 106af3f8bc..17cff553f9 100644 --- a/libs/surfaceflinger/SurfaceFlinger.cpp +++ b/libs/surfaceflinger/SurfaceFlinger.cpp @@ -725,10 +725,11 @@ void SurfaceFlinger::computeVisibleRegions( dirty.orSelf(layer->visibleRegionScreen); layer->contentDirty = false; } else { - // compute the exposed region - // dirty = what's visible now - what's wasn't covered before - // = what's visible now & what's was covered before - dirty = visibleRegion.intersect(layer->coveredRegionScreen); + /* compute the exposed region: + * exposed = what's VISIBLE and NOT COVERED now + * but was COVERED before + */ + dirty = (visibleRegion - coveredRegion) & layer->coveredRegionScreen; } dirty.subtractSelf(aboveOpaqueLayers); @@ -737,7 +738,7 @@ void SurfaceFlinger::computeVisibleRegions( // Update aboveOpaqueLayers/aboveCoveredLayers for next (lower) layer aboveOpaqueLayers.orSelf(opaqueRegion); - aboveCoveredLayers.orSelf(bounds); + aboveCoveredLayers.orSelf(visibleRegion); // Store the visible region is screen space layer->setVisibleRegion(visibleRegion); |