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

Commit 27a90d23 authored by Adrian Roos's avatar Adrian Roos
Browse files

WM: Add debug information for forced seamless rotation

Bug: 111062294
Test: adb shell dumpsys window ScreenDecoration
Change-Id: I1c90c74d6c43209a35e56163b39192c04e453709
(cherry picked from commit 2cadc5cd)
parent e69a4919
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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.
 *
@@ -37,8 +40,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;
@@ -77,4 +85,16 @@ public class ForcedSeamlessRotator {
                    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();
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -1901,6 +1901,7 @@ public class WindowManagerService extends IWindowManager.Stub
            // TODO(b/111504081): Consolidate seamless rotation logic.
            if (win.mPendingForcedSeamlessRotate != null && !mWaitingForConfig) {
                win.mPendingForcedSeamlessRotate.finish(win.mToken, win);
                win.mFinishForcedSeamlessRotateFrameNumber = win.getFrameNumber();
                win.mPendingForcedSeamlessRotate = null;
            }

+18 −0
Original line number Diff line number Diff line
@@ -122,6 +122,7 @@ import static com.android.server.wm.WindowStateProto.CHILD_WINDOWS;
import static com.android.server.wm.WindowStateProto.CONTENT_INSETS;
import static com.android.server.wm.WindowStateProto.DESTROYING;
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.GIVEN_CONTENT_INSETS;
import static com.android.server.wm.WindowStateProto.HAS_SURFACE;
import static com.android.server.wm.WindowStateProto.IDENTIFIER;
@@ -130,6 +131,7 @@ import static com.android.server.wm.WindowStateProto.IS_READY_FOR_DISPLAY;
import static com.android.server.wm.WindowStateProto.IS_VISIBLE;
import static com.android.server.wm.WindowStateProto.OUTSETS;
import static com.android.server.wm.WindowStateProto.OVERSCAN_INSETS;
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;
@@ -281,6 +283,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
     */
    final boolean mForceSeamlesslyRotate;
    ForcedSeamlessRotator mPendingForcedSeamlessRotate;
    long mFinishForcedSeamlessRotateFrameNumber;

    private RemoteCallbackList<IWindowFocusObserver> mFocusCallbacks;

@@ -3294,6 +3297,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);
    }

@@ -3449,6 +3457,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);