SurfaceFlinger: Correct extra parent scaling with buffer transforms.
We need to account for the buffer transform when calculating the extra
parent scaling.
Bug: 37673612
Test: Regression test included in Transaction_test
Change-Id: Ice21f1ecf3789358646d95c753ee361f50c0d246
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 0e7c214..406debf 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -2627,10 +2627,19 @@
// or we will break the contract where WM can treat child surfaces as
// pixels in the parent surface.
if (p->isFixedSize()) {
+ int bufferWidth;
+ int bufferHeight;
+ if ((p->mCurrentTransform & NATIVE_WINDOW_TRANSFORM_ROT_90) == 0) {
+ bufferWidth = p->mActiveBuffer->getWidth();
+ bufferHeight = p->mActiveBuffer->getHeight();
+ } else {
+ bufferHeight = p->mActiveBuffer->getWidth();
+ bufferWidth = p->mActiveBuffer->getHeight();
+ }
float sx = p->getDrawingState().active.w /
- static_cast<float>(p->mActiveBuffer->getWidth());
+ static_cast<float>(bufferWidth);
float sy = p->getDrawingState().active.h /
- static_cast<float>(p->mActiveBuffer->getHeight());
+ static_cast<float>(bufferHeight);
Transform extraParentScaling;
extraParentScaling.set(sx, 0, 0, sy);
t = t * extraParentScaling;