Loading core/proto/android/server/windowmanagerservice.proto +2 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,8 @@ message WindowStateProto { optional bool removed = 36; optional bool is_on_screen = 37; optional bool is_visible = 38; optional bool pending_forced_seamless_rotation = 39; optional int64 finished_forced_seamless_rotation_frame = 40; } message IdentifierProto { Loading services/core/java/com/android/server/wm/ForcedSeamlessRotator.java +20 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ import android.view.DisplayInfo; import com.android.server.wm.utils.CoordinateTransforms; import java.io.PrintWriter; import java.io.StringWriter; /** * Helper class for forced seamless rotation. * Loading @@ -36,8 +39,13 @@ public class ForcedSeamlessRotator { private final Matrix mTransform = new Matrix(); private final float[] mFloat9 = new float[9]; private final int mOldRotation; private final int mNewRotation; public ForcedSeamlessRotator(int oldRotation, int newRotation, DisplayInfo info) { mOldRotation = oldRotation; mNewRotation = newRotation; final boolean flipped = info.rotation == ROTATION_90 || info.rotation == ROTATION_270; final int h = flipped ? info.logicalWidth : info.logicalHeight; final int w = flipped ? info.logicalHeight : info.logicalWidth; Loading Loading @@ -74,4 +82,16 @@ public class ForcedSeamlessRotator { win.mWinAnimator.mSurfaceController.mSurfaceControl.getHandle(), win.getFrameNumber()); } public void dump(PrintWriter pw) { pw.print("{old="); pw.print(mOldRotation); pw.print(", new="); pw.print(mNewRotation); pw.print("}"); } @Override public String toString() { StringWriter sw = new StringWriter(); dump(new PrintWriter(sw)); return "ForcedSeamlessRotator" + sw.toString(); } } services/core/java/com/android/server/wm/WindowManagerService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1886,6 +1886,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mPendingForcedSeamlessRotate != null && !mWaitingForConfig) { win.mPendingForcedSeamlessRotate.finish(win.mToken, win); win.mFinishForcedSeamlessRotateFrameNumber = win.getFrameNumber(); win.mPendingForcedSeamlessRotate = null; } Loading services/core/java/com/android/server/wm/WindowState.java +18 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ import static com.android.server.wm.WindowStateProto.DECOR_FRAME; import static com.android.server.wm.WindowStateProto.DESTROYING; import static com.android.server.wm.WindowStateProto.DISPLAY_FRAME; import static com.android.server.wm.WindowStateProto.DISPLAY_ID; import static com.android.server.wm.WindowStateProto.FINISHED_FORCED_SEAMLESS_ROTATION_FRAME; import static com.android.server.wm.WindowStateProto.FRAME; import static com.android.server.wm.WindowStateProto.GIVEN_CONTENT_INSETS; import static com.android.server.wm.WindowStateProto.HAS_SURFACE; Loading @@ -137,6 +138,7 @@ import static com.android.server.wm.WindowStateProto.OUTSET_FRAME; import static com.android.server.wm.WindowStateProto.OVERSCAN_FRAME; import static com.android.server.wm.WindowStateProto.OVERSCAN_INSETS; import static com.android.server.wm.WindowStateProto.PARENT_FRAME; import static com.android.server.wm.WindowStateProto.PENDING_FORCED_SEAMLESS_ROTATION; import static com.android.server.wm.WindowStateProto.REMOVED; import static com.android.server.wm.WindowStateProto.REMOVE_ON_EXIT; import static com.android.server.wm.WindowStateProto.REQUESTED_HEIGHT; Loading Loading @@ -287,6 +289,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP */ final boolean mForceSeamlesslyRotate; ForcedSeamlessRotator mPendingForcedSeamlessRotate; long mFinishForcedSeamlessRotateFrameNumber; private RemoteCallbackList<IWindowFocusObserver> mFocusCallbacks; Loading Loading @@ -3305,6 +3308,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP proto.write(REMOVED, mRemoved); proto.write(IS_ON_SCREEN, isOnScreen()); proto.write(IS_VISIBLE, isVisible()); if (mForceSeamlesslyRotate) { proto.write(PENDING_FORCED_SEAMLESS_ROTATION, mPendingForcedSeamlessRotate != null); proto.write(FINISHED_FORCED_SEAMLESS_ROTATION_FRAME, mFinishForcedSeamlessRotateFrameNumber); } proto.end(token); } Loading Loading @@ -3481,6 +3489,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP pw.print(prefix); pw.print("mLastFreezeDuration="); TimeUtils.formatDuration(mLastFreezeDuration, pw); pw.println(); } if (mForceSeamlesslyRotate) { pw.print(prefix); pw.print("forceSeamlesslyRotate: pending="); if (mPendingForcedSeamlessRotate != null) { mPendingForcedSeamlessRotate.dump(pw); } else { pw.print("null"); } pw.print(" finishedFrameNumber="); pw.print(mFinishForcedSeamlessRotateFrameNumber); pw.println(); } if (mHScale != 1 || mVScale != 1) { pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); pw.print(" mVScale="); pw.println(mVScale); Loading Loading
core/proto/android/server/windowmanagerservice.proto +2 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,8 @@ message WindowStateProto { optional bool removed = 36; optional bool is_on_screen = 37; optional bool is_visible = 38; optional bool pending_forced_seamless_rotation = 39; optional int64 finished_forced_seamless_rotation_frame = 40; } message IdentifierProto { Loading
services/core/java/com/android/server/wm/ForcedSeamlessRotator.java +20 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ import android.view.DisplayInfo; import com.android.server.wm.utils.CoordinateTransforms; import java.io.PrintWriter; import java.io.StringWriter; /** * Helper class for forced seamless rotation. * Loading @@ -36,8 +39,13 @@ public class ForcedSeamlessRotator { private final Matrix mTransform = new Matrix(); private final float[] mFloat9 = new float[9]; private final int mOldRotation; private final int mNewRotation; public ForcedSeamlessRotator(int oldRotation, int newRotation, DisplayInfo info) { mOldRotation = oldRotation; mNewRotation = newRotation; final boolean flipped = info.rotation == ROTATION_90 || info.rotation == ROTATION_270; final int h = flipped ? info.logicalWidth : info.logicalHeight; final int w = flipped ? info.logicalHeight : info.logicalWidth; Loading Loading @@ -74,4 +82,16 @@ public class ForcedSeamlessRotator { win.mWinAnimator.mSurfaceController.mSurfaceControl.getHandle(), win.getFrameNumber()); } public void dump(PrintWriter pw) { pw.print("{old="); pw.print(mOldRotation); pw.print(", new="); pw.print(mNewRotation); pw.print("}"); } @Override public String toString() { StringWriter sw = new StringWriter(); dump(new PrintWriter(sw)); return "ForcedSeamlessRotator" + sw.toString(); } }
services/core/java/com/android/server/wm/WindowManagerService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1886,6 +1886,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mPendingForcedSeamlessRotate != null && !mWaitingForConfig) { win.mPendingForcedSeamlessRotate.finish(win.mToken, win); win.mFinishForcedSeamlessRotateFrameNumber = win.getFrameNumber(); win.mPendingForcedSeamlessRotate = null; } Loading
services/core/java/com/android/server/wm/WindowState.java +18 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ import static com.android.server.wm.WindowStateProto.DECOR_FRAME; import static com.android.server.wm.WindowStateProto.DESTROYING; import static com.android.server.wm.WindowStateProto.DISPLAY_FRAME; import static com.android.server.wm.WindowStateProto.DISPLAY_ID; import static com.android.server.wm.WindowStateProto.FINISHED_FORCED_SEAMLESS_ROTATION_FRAME; import static com.android.server.wm.WindowStateProto.FRAME; import static com.android.server.wm.WindowStateProto.GIVEN_CONTENT_INSETS; import static com.android.server.wm.WindowStateProto.HAS_SURFACE; Loading @@ -137,6 +138,7 @@ import static com.android.server.wm.WindowStateProto.OUTSET_FRAME; import static com.android.server.wm.WindowStateProto.OVERSCAN_FRAME; import static com.android.server.wm.WindowStateProto.OVERSCAN_INSETS; import static com.android.server.wm.WindowStateProto.PARENT_FRAME; import static com.android.server.wm.WindowStateProto.PENDING_FORCED_SEAMLESS_ROTATION; import static com.android.server.wm.WindowStateProto.REMOVED; import static com.android.server.wm.WindowStateProto.REMOVE_ON_EXIT; import static com.android.server.wm.WindowStateProto.REQUESTED_HEIGHT; Loading Loading @@ -287,6 +289,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP */ final boolean mForceSeamlesslyRotate; ForcedSeamlessRotator mPendingForcedSeamlessRotate; long mFinishForcedSeamlessRotateFrameNumber; private RemoteCallbackList<IWindowFocusObserver> mFocusCallbacks; Loading Loading @@ -3305,6 +3308,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP proto.write(REMOVED, mRemoved); proto.write(IS_ON_SCREEN, isOnScreen()); proto.write(IS_VISIBLE, isVisible()); if (mForceSeamlesslyRotate) { proto.write(PENDING_FORCED_SEAMLESS_ROTATION, mPendingForcedSeamlessRotate != null); proto.write(FINISHED_FORCED_SEAMLESS_ROTATION_FRAME, mFinishForcedSeamlessRotateFrameNumber); } proto.end(token); } Loading Loading @@ -3481,6 +3489,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP pw.print(prefix); pw.print("mLastFreezeDuration="); TimeUtils.formatDuration(mLastFreezeDuration, pw); pw.println(); } if (mForceSeamlesslyRotate) { pw.print(prefix); pw.print("forceSeamlesslyRotate: pending="); if (mPendingForcedSeamlessRotate != null) { mPendingForcedSeamlessRotate.dump(pw); } else { pw.print("null"); } pw.print(" finishedFrameNumber="); pw.print(mFinishForcedSeamlessRotateFrameNumber); pw.println(); } if (mHScale != 1 || mVScale != 1) { pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); pw.print(" mVScale="); pw.println(mVScale); Loading