Clarify costs in onTransactionReady
- Only print full info of Task for dumpsys, because shouldBeVisible is a bit heavy. Though it relates to the default enabled debug log for shell transition, that still reduces some noise of the overhead and uninterested long log. - Add a trace of createTaskSnapshot which is usually the major cost of onTransactionReady. - Simplify a bit for scheduleAnimation: - The initial order of RWC was changed to after WindowAnimator. So it is non-null. - WC#scheduleAnimation has never been overridden for a long time. So just call the implementation directly instead of traversing to top parent. Bug: 235323163 Test: CtsWindowManagerDeviceTestCases Change-Id: Idd026e08efa1714b9bc52d5aa203b955e2bcce87
This commit is contained in:
@@ -1238,11 +1238,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
|
||||
return "ROOT";
|
||||
}
|
||||
|
||||
@Override
|
||||
void scheduleAnimation() {
|
||||
mWmService.scheduleAnimationLocked();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void removeChild(DisplayContent dc) {
|
||||
super.removeChild(dc);
|
||||
|
||||
@@ -3619,30 +3619,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(" #");
|
||||
@@ -3657,11 +3662,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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1937,7 +1937,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
continue;
|
||||
}
|
||||
final Task rootTask = child.asTask();
|
||||
pw.println(doublePrefix + "* " + rootTask);
|
||||
pw.println(doublePrefix + "* " + rootTask.toFullString());
|
||||
rootTask.dump(pw, triplePrefix, dumpAll);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2581,6 +2581,32 @@ class TaskFragment extends WindowContainer<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<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<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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -2694,9 +2694,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
* will be applied.
|
||||
*/
|
||||
void scheduleAnimation() {
|
||||
if (mParent != null) {
|
||||
mParent.scheduleAnimation();
|
||||
}
|
||||
mWmService.scheduleAnimationLocked();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -3919,7 +3919,7 @@ class WindowState extends WindowContainer<WindowState> 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,
|
||||
|
||||
Reference in New Issue
Block a user