From db4850c01ff02bf7f936aa427e1fa8af9abc8f22 Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Thu, 25 Jun 2015 16:10:18 -0700 Subject: libgui: Fix handling of rotated surface damage Incoming surface damage was not aware that the EGL implementation was rotating buffers in response to SurfaceFlinger's transform hint. This didn't affect all cases because the effect was to apply a 90 degree rotation instead of a 270 degree rotation. For full-screen updates, things more or less worked, but in other cases this caused corruption. This fixes that by correctly undoing the effect of rotated buffers on the incoming surface damage, and then passing that damage down untouched to HWC. Bug: 22068334 Change-Id: I226ecfc7a91fe2e16edd2aa6d9149f0d26b529d6 --- services/surfaceflinger/Layer.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'services/surfaceflinger/Layer.cpp') diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 39b80ec23f..91f80b60e6 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -551,14 +551,7 @@ void Layer::setPerFrameData(const sp& hw, const Transform& tr = hw->getTransform(); Region visible = tr.transform(visibleRegion.intersect(hw->getViewport())); layer.setVisibleRegionScreen(visible); - - // Pass full-surface damage down untouched - if (surfaceDamageRegion.isRect() && - surfaceDamageRegion.getBounds() == Rect::INVALID_RECT) { - layer.setSurfaceDamage(surfaceDamageRegion); - } else { - layer.setSurfaceDamage(tr.transform(surfaceDamageRegion)); - } + layer.setSurfaceDamage(surfaceDamageRegion); if (mSidebandStream.get()) { layer.setSidebandStream(mSidebandStream); -- cgit v1.2.3-59-g8ed1b