From c5953904ad6b6db1f48cf6d208ecf940f6a656d4 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 12 Aug 2011 17:09:09 -0700 Subject: [PATCH] fix an orientation change drawing artifact. a wrong orientation would be briefly shown when rotation the screen. this happened when the window manager set a custom transformation and the h/w composer was used. the custom transformation was applied twice in that case. Bug: 5037522 Change-Id: Ic1f87b63cd843f4475e4265d1624463825d775c4 --- services/surfaceflinger/Layer.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 55b354d6c..0425fc3ba 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -191,14 +191,13 @@ void Layer::setGeometry(hwc_layer_t* hwcl) * 1) buffer orientation/flip/mirror * 2) state transformation (window manager) * 3) layer orientation (screen orientation) + * mOrientation is already the composition of (2) and (3) * (NOTE: the matrices are multiplied in reverse order) */ const Transform bufferOrientation(mCurrentTransform); - const Transform& stateTransform(s.transform); const Transform layerOrientation(mOrientation); - - const Transform tr(layerOrientation * stateTransform * bufferOrientation); + const Transform tr(layerOrientation * bufferOrientation); // this gives us only the "orientation" component of the transform const uint32_t finalTransform = tr.getOrientation();