diff options
author | Mathias Agopian <mathias@google.com> | 2009-06-28 02:54:16 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2009-06-29 14:44:11 -0700 |
commit | 0aed7e97a3efbeec23a4aa301df03036a67f8ea3 (patch) | |
tree | 4d3affe92460fce98c4215f486c988b65c6742af /libs/surfaceflinger/SurfaceFlinger.cpp | |
parent | 8c9687ae291a1e0a63d4236069066284f56192cd (diff) | |
download | frameworks_base-0aed7e97a3efbeec23a4aa301df03036a67f8ea3.zip frameworks_base-0aed7e97a3efbeec23a4aa301df03036a67f8ea3.tar.gz frameworks_base-0aed7e97a3efbeec23a4aa301df03036a67f8ea3.tar.bz2 |
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 106af3f..17cff55 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); |