Merge "Add rotation history in dumpsys"
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
|
||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
||||
import static android.util.RotationUtils.deltaRotation;
|
||||
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
|
||||
@@ -39,7 +40,6 @@ import static com.android.server.wm.WindowManagerService.WINDOW_FREEZE_TIMEOUT_D
|
||||
|
||||
import android.annotation.AnimRes;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.UserIdInt;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -50,7 +50,6 @@ import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
import android.hardware.power.Boost;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemProperties;
|
||||
@@ -58,6 +57,7 @@ import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseArray;
|
||||
import android.util.TimeUtils;
|
||||
import android.util.proto.ProtoOutputStream;
|
||||
import android.view.IDisplayWindowRotationCallback;
|
||||
import android.view.IWindowManager;
|
||||
@@ -77,6 +77,7 @@ import com.android.server.statusbar.StatusBarManagerInternal;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayDeque;
|
||||
|
||||
/**
|
||||
* Defines the mapping between orientation and rotation of a display.
|
||||
@@ -106,6 +107,7 @@ public class DisplayRotation {
|
||||
private final int mDeskDockRotation;
|
||||
private final int mUndockedHdmiRotation;
|
||||
private final RotationAnimationPair mTmpRotationAnim = new RotationAnimationPair();
|
||||
private final RotationHistory mRotationHistory = new RotationHistory();
|
||||
|
||||
private OrientationListener mOrientationListener;
|
||||
private StatusBarManagerInternal mStatusBarManagerInternal;
|
||||
@@ -139,6 +141,8 @@ public class DisplayRotation {
|
||||
@VisibleForTesting
|
||||
int mUpsideDownRotation; // "other" portrait
|
||||
|
||||
int mLastSensorRotation = -1;
|
||||
|
||||
private boolean mAllowSeamlessRotationDespiteNavBarMoving;
|
||||
|
||||
private int mDeferredRotationPauseCount;
|
||||
@@ -351,6 +355,7 @@ public class DisplayRotation {
|
||||
}
|
||||
|
||||
void applyCurrentRotation(@Surface.Rotation int rotation) {
|
||||
mRotationHistory.addRecord(this, rotation);
|
||||
if (mOrientationListener != null) {
|
||||
mOrientationListener.setCurrentRotation(rotation);
|
||||
}
|
||||
@@ -1149,6 +1154,7 @@ public class DisplayRotation {
|
||||
int sensorRotation = mOrientationListener != null
|
||||
? mOrientationListener.getProposedRotation() // may be -1
|
||||
: -1;
|
||||
mLastSensorRotation = sensorRotation;
|
||||
if (sensorRotation < 0) {
|
||||
sensorRotation = lastRotation;
|
||||
}
|
||||
@@ -1537,6 +1543,15 @@ public class DisplayRotation {
|
||||
pw.println(" mUndockedHdmiRotation=" + Surface.rotationToString(mUndockedHdmiRotation));
|
||||
pw.println(prefix + " mLidOpenRotation=" + Surface.rotationToString(mLidOpenRotation));
|
||||
pw.println(prefix + " mFixedToUserRotation=" + isFixedToUserRotation());
|
||||
|
||||
if (!mRotationHistory.mRecords.isEmpty()) {
|
||||
pw.println();
|
||||
pw.println(prefix + " RotationHistory");
|
||||
prefix = " " + prefix;
|
||||
for (RotationHistory.Record r : mRotationHistory.mRecords) {
|
||||
r.dump(prefix, pw);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dumpDebug(ProtoOutputStream proto, long fieldId) {
|
||||
@@ -1650,9 +1665,69 @@ public class DisplayRotation {
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
interface ContentObserverRegister {
|
||||
void registerContentObserver(Uri uri, boolean notifyForDescendants,
|
||||
ContentObserver observer, @UserIdInt int userHandle);
|
||||
private static class RotationHistory {
|
||||
private static final int MAX_SIZE = 8;
|
||||
private static class Record {
|
||||
final @Surface.Rotation int mFromRotation;
|
||||
final @Surface.Rotation int mToRotation;
|
||||
final @Surface.Rotation int mUserRotation;
|
||||
final @WindowManagerPolicy.UserRotationMode int mUserRotationMode;
|
||||
final int mSensorRotation;
|
||||
final boolean mIgnoreOrientationRequest;
|
||||
final String mNonDefaultRequestingTaskDisplayArea;
|
||||
final String mLastOrientationSource;
|
||||
final @ActivityInfo.ScreenOrientation int mSourceOrientation;
|
||||
final long mTimestamp = System.currentTimeMillis();
|
||||
|
||||
Record(DisplayRotation dr, int fromRotation, int toRotation) {
|
||||
mFromRotation = fromRotation;
|
||||
mToRotation = toRotation;
|
||||
mUserRotation = dr.mUserRotation;
|
||||
mUserRotationMode = dr.mUserRotationMode;
|
||||
final OrientationListener listener = dr.mOrientationListener;
|
||||
mSensorRotation = (listener == null || !listener.mEnabled)
|
||||
? -2 /* disabled */ : dr.mLastSensorRotation;
|
||||
final DisplayContent dc = dr.mDisplayContent;
|
||||
mIgnoreOrientationRequest = dc.mIgnoreOrientationRequest;
|
||||
final TaskDisplayArea requestingTda = dc.getOrientationRequestingTaskDisplayArea();
|
||||
mNonDefaultRequestingTaskDisplayArea = requestingTda == null
|
||||
? "none" : requestingTda != dc.getDefaultTaskDisplayArea()
|
||||
? requestingTda.toString() : null;
|
||||
final WindowContainer<?> source = dc.getLastOrientationSource();
|
||||
if (source != null) {
|
||||
mLastOrientationSource = source.toString();
|
||||
mSourceOrientation = source.mOrientation;
|
||||
} else {
|
||||
mLastOrientationSource = null;
|
||||
mSourceOrientation = SCREEN_ORIENTATION_UNSET;
|
||||
}
|
||||
}
|
||||
|
||||
void dump(String prefix, PrintWriter pw) {
|
||||
pw.println(prefix + TimeUtils.logTimeOfDay(mTimestamp)
|
||||
+ " " + Surface.rotationToString(mFromRotation)
|
||||
+ " to " + Surface.rotationToString(mToRotation));
|
||||
pw.println(prefix + " source=" + mLastOrientationSource
|
||||
+ " " + ActivityInfo.screenOrientationToString(mSourceOrientation));
|
||||
pw.println(prefix + " mode="
|
||||
+ WindowManagerPolicy.userRotationModeToString(mUserRotationMode)
|
||||
+ " user=" + Surface.rotationToString(mUserRotation)
|
||||
+ " sensor=" + Surface.rotationToString(mSensorRotation));
|
||||
if (mIgnoreOrientationRequest) pw.println(prefix + " ignoreRequest=true");
|
||||
if (mNonDefaultRequestingTaskDisplayArea != null) {
|
||||
pw.println(prefix + " requestingTda=" + mNonDefaultRequestingTaskDisplayArea);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final ArrayDeque<Record> mRecords = new ArrayDeque<>(MAX_SIZE);
|
||||
|
||||
void addRecord(DisplayRotation dr, int toRotation) {
|
||||
if (mRecords.size() >= MAX_SIZE) {
|
||||
mRecords.removeFirst();
|
||||
}
|
||||
final int fromRotation = dr.mDisplayContent.getWindowConfiguration().getRotation();
|
||||
mRecords.addLast(new Record(dr, fromRotation, toRotation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user