Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aab09158 authored by Robert Carr's avatar Robert Carr
Browse files

Limit seamless rotation to TRANSFORM_INVERSE_DISPLAY children.

In what can only be called an unfortunate workaround we require
seamlessly rotated child windows to have the
TRANSFORM_TO_DISPLAY_INVERSE
flag. Due to limitations in the client API, there is no way for the
client to set this flag in a race free fashion. If we seamlessly rotate
a window which does not have this flag, but then it gains it,
we will have an incorrect visual result (rotated buffer contents). This
means if we want to support seamlessly rotating windows which could gain
this flag, we can't seamlessly rotate windows which don't have it. This
unfortunately limits seamless rotation in N to Camera framework users,
native code, and applications without child windows. This is unfortunate
but having the camera work was always our primary use case, and it's not
as if we are offering an API for it, it's a behind the scenes
enhancement of ROTATION_ANIMATION_JUMPCUT.

Bug: 30171992
Change-Id: I082e323ee569cfc1ff2559657cc22194c251c7ec
parent 1ccd4251
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -6772,6 +6772,20 @@ public class WindowManagerService extends IWindowManager.Stub
                    rotateSeamlessly = false;
                    break;
                }
                // In what can only be called an unfortunate workaround we require
                // seamlessly rotated child windows to have the TRANSFORM_TO_DISPLAY_INVERSE
                // flag. Due to limitations in the client API, there is no way for
                // the client to set this flag in a race free fashion. If we seamlessly rotate
                // a window which does not have this flag, but then gains it, we will get
                // an incorrect visual result (rotated viewfinder). This means if we want to
                // support seamlessly rotating windows which could gain this flag, we can't
                // rotate windows without it. This limits seamless rotation in N to camera framework
                // users, windows without children, and native code. This is unfortunate but
                // having the camera work is our primary goal.
                if (w.isChildWindow() & w.isVisibleNow() &&
                        !w.mWinAnimator.mSurfaceController.getTransformToDisplayInverse()) {
                    rotateSeamlessly = false;
                }
            }
        }