summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2009-06-28 02:54:16 -0700
committerMathias Agopian <mathias@google.com>2009-06-29 14:44:11 -0700
commit0aed7e97a3efbeec23a4aa301df03036a67f8ea3 (patch)
tree4d3affe92460fce98c4215f486c988b65c6742af /libs/surfaceflinger/SurfaceFlinger.cpp
parent8c9687ae291a1e0a63d4236069066284f56192cd (diff)
downloadframeworks_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.cpp11
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);