diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index e4337f2384988..db730e0cb3689 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -1238,11 +1238,6 @@ class RootWindowContainer extends WindowContainer return "ROOT"; } - @Override - void scheduleAnimation() { - mWmService.scheduleAnimationLocked(); - } - @Override protected void removeChild(DisplayContent dc) { super.removeChild(dc); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 64905c8fe2f3a..3d127742d7bd3 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3624,30 +3624,35 @@ class Task extends TaskFragment { } @Override - public String toString() { - StringBuilder sb = new StringBuilder(128); - if (stringName != null) { - sb.append(stringName); - sb.append(" U="); - sb.append(mUserId); - final Task rootTask = getRootTask(); - if (rootTask != this) { - sb.append(" rootTaskId="); - sb.append(rootTask.mTaskId); - } - sb.append(" visible="); - sb.append(shouldBeVisible(null /* starting */)); - sb.append(" visibleRequested="); - sb.append(isVisibleRequested()); - sb.append(" mode="); - sb.append(windowingModeToString(getWindowingMode())); - sb.append(" translucent="); - sb.append(isTranslucent(null /* starting */)); - sb.append(" sz="); - sb.append(getChildCount()); - sb.append('}'); - return sb.toString(); + String toFullString() { + final StringBuilder sb = new StringBuilder(192); + sb.append(this); + sb.setLength(sb.length() - 1); // Remove tail '}'. + sb.append(" U="); + sb.append(mUserId); + final Task rootTask = getRootTask(); + if (rootTask != this) { + sb.append(" rootTaskId="); + sb.append(rootTask.mTaskId); } + sb.append(" visible="); + sb.append(shouldBeVisible(null /* starting */)); + sb.append(" visibleRequested="); + sb.append(isVisibleRequested()); + sb.append(" mode="); + sb.append(windowingModeToString(getWindowingMode())); + sb.append(" translucent="); + sb.append(isTranslucent(null /* starting */)); + sb.append(" sz="); + sb.append(getChildCount()); + sb.append('}'); + return sb.toString(); + } + + @Override + public String toString() { + if (stringName != null) return stringName; + StringBuilder sb = new StringBuilder(128); sb.append("Task{"); sb.append(Integer.toHexString(System.identityHashCode(this))); sb.append(" #"); @@ -3662,11 +3667,9 @@ class Task extends TaskFragment { } else if (affinityIntent != null && affinityIntent.getComponent() != null) { sb.append(" aI="); sb.append(affinityIntent.getComponent().flattenToShortString()); - } else { - sb.append(" ??"); } - stringName = sb.toString(); - return toString(); + sb.append('}'); + return stringName = sb.toString(); } /** diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 02e796904b16a..36464b8244378 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1937,7 +1937,7 @@ final class TaskDisplayArea extends DisplayArea { continue; } final Task rootTask = child.asTask(); - pw.println(doublePrefix + "* " + rootTask); + pw.println(doublePrefix + "* " + rootTask.toFullString()); rootTask.dump(pw, triplePrefix, dumpAll); } } diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 391077636654c..61e484aaa5b51 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -2581,6 +2581,32 @@ class TaskFragment extends WindowContainer { return getWindowingMode() == WINDOWING_MODE_FULLSCREEN || matchParentBounds(); } + String toFullString() { + final StringBuilder sb = new StringBuilder(128); + sb.append(this); + sb.setLength(sb.length() - 1); // Remove tail '}'. + if (mTaskFragmentOrganizerUid != INVALID_UID) { + sb.append(" organizerUid="); + sb.append(mTaskFragmentOrganizerUid); + } + if (mTaskFragmentOrganizerProcessName != null) { + sb.append(" organizerProc="); + sb.append(mTaskFragmentOrganizerProcessName); + } + if (mAdjacentTaskFragment != null) { + sb.append(" adjacent="); + sb.append(mAdjacentTaskFragment); + } + sb.append('}'); + return sb.toString(); + } + + @Override + public String toString() { + return "TaskFragment{" + Integer.toHexString(System.identityHashCode(this)) + + " mode=" + WindowConfiguration.windowingModeToString(getWindowingMode()) + "}"; + } + boolean dump(String prefix, FileDescriptor fd, PrintWriter pw, boolean dumpAll, boolean dumpClient, String dumpPackage, final boolean needSep, Runnable header) { boolean printed = false; @@ -2619,7 +2645,7 @@ class TaskFragment extends WindowContainer { } void dumpInner(String prefix, PrintWriter pw, boolean dumpAll, String dumpPackage) { - pw.print(prefix); pw.print("* "); pw.println(this); + pw.print(prefix); pw.print("* "); pw.println(toFullString()); final Rect bounds = getRequestedOverrideBounds(); if (!bounds.isEmpty()) { pw.println(prefix + " mBounds=" + bounds); @@ -2640,10 +2666,11 @@ class TaskFragment extends WindowContainer { final String doublePrefix = prefix + " "; for (int i = mChildren.size() - 1; i >= 0; i--) { final WindowContainer child = mChildren.get(i); - pw.println(prefix + "* " + child); + final TaskFragment tf = child.asTaskFragment(); + pw.println(prefix + "* " + (tf != null ? tf.toFullString() : child)); // Only dump non-activity because full activity info is already printed by // RootWindowContainer#dumpActivities. - if (child.asActivityRecord() == null) { + if (tf != null) { child.dump(pw, doublePrefix, dumpAll); } } diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 814656db9fa0e..534616fb72071 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -47,6 +47,7 @@ import android.graphics.RenderNode; import android.hardware.HardwareBuffer; import android.os.Environment; import android.os.Handler; +import android.os.Trace; import android.util.ArraySet; import android.util.Pair; import android.util.Slog; @@ -391,8 +392,10 @@ class TaskSnapshotController { SurfaceControl.ScreenshotHardwareBuffer createTaskSnapshot(@NonNull Task task, TaskSnapshot.Builder builder) { Point taskSize = new Point(); + Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "createTaskSnapshot"); final SurfaceControl.ScreenshotHardwareBuffer taskSnapshot = createTaskSnapshot(task, mHighResTaskSnapshotScale, builder.getPixelFormat(), taskSize, builder); + Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); builder.setTaskSize(taskSize); return taskSnapshot; } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 59aed833f3f3c..66cc216fd0e20 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -2694,9 +2694,7 @@ class WindowContainer extends ConfigurationContainer< * will be applied. */ void scheduleAnimation() { - if (mParent != null) { - mParent.scheduleAnimation(); - } + mWmService.scheduleAnimationLocked(); } /** diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a48140eb0e046..5d2e34bb1b284 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6041,9 +6041,7 @@ public class WindowManagerService extends IWindowManager.Stub /** Note that Locked in this case is on mLayoutToAnim */ void scheduleAnimationLocked() { - if (mAnimator != null) { - mAnimator.scheduleAnimation(); - } + mAnimator.scheduleAnimation(); } boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 46cf5c9348cc2..b0cd074d9ad20 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3921,7 +3921,7 @@ class WindowState extends WindowContainer implements WindowManagerP mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration, getCompatInsetsState(), forceRelayout, alwaysConsumeSystemBars, displayId, mSyncSeqId, resizeMode); - if (drawPending && prevRotation != mLastReportedConfiguration + if (drawPending && prevRotation >= 0 && prevRotation != mLastReportedConfiguration .getMergedConfiguration().windowConfiguration.getRotation()) { mOrientationChangeRedrawRequestTime = SystemClock.elapsedRealtime(); ProtoLog.v(WM_DEBUG_ORIENTATION,