1.UI hang and adb is still alive when running LGE compliant monkey test with DUT for 771 Minutes
WindowManagerService主要修改点是在performLayoutAndPlacesurfaceLockedInner(主要用于系统UI刷新)这个方法
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index ec566bc..0cc29f6 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -10195,7 +10195,12 @@
// Don't remove this window until rotation has completed.
continue;
}
- win.reportResized();
+ if (!win.reportResized()) {
+ mInnerFields.mOrientationChangeComplete = true;
+ if (DEBUG_ORIENTATION && mDisplayFrozen) Slog.v(TAG,
+ "win: " + win + " Resize have exception, set orientationChangeComplete to "
+ + mInnerFields.mOrientationChangeComplete);
+ }
mResizingWindows.remove(i);
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index c2548de..5dd05c5 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1484,7 +1484,7 @@
}
}
- void reportResized() {
+ boolean reportResized() {
try {
if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG, "Reporting new frame to " + this
+ ": " + mCompatFrame);
@@ -1540,8 +1540,21 @@
mStableInsetsChanged = false;
mOutsetsChanged = false;
mWinAnimator.mSurfaceResized = false;
+ return true;
} catch (RemoteException e) {
mOrientationChanging = false;
+ if (DEBUG_RESIZE || DEBUG_ORIENTATION || DEBUG_CONFIGURATION) {
+ Slog.i(TAG, "Fail to resize window " + this + ": " + e);
+ }
+ mOverscanInsetsChanged = false;
+ mContentInsetsChanged = false;
+ mVisibleInsetsChanged = false;
+ mStableInsetsChanged = false;
+ mWinAnimator.mSurfaceResized = false;
+ mLastOverscanInsets.set(mOverscanInsets);
+ mLastContentInsets.set(mContentInsets);
+ mLastVisibleInsets.set(mVisibleInsets);
+ mLastStableInsets.set(mStableInsets);
mLastFreezeDuration = (int)(SystemClock.elapsedRealtime()
- mService.mDisplayFreezeTime);
// We are assuming the hosting process is dead or in a zombie state.
@@ -1549,6 +1562,7 @@
+ ", removing this window.");
mService.mPendingRemove.add(this);
mService.requestTraversalLocked();
+ return false;
}
}
死循环在哪里?
1、Window