From d72c315d5eed3a684eee303364b97129cb821689 Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 5 Apr 2016 15:33:35 -0700 Subject: [PATCH] Adding more logging of the state to the bug report. Bug: 28009206 Change-Id: I0efc513bb6fc5ea4c9724b0a411ca5d60a71f27e --- .../systemui/recents/RecentsActivity.java | 19 ++++++++ .../systemui/recents/events/EventBus.java | 37 ++++++++++++--- .../systemui/recents/misc/Utilities.java | 10 ++++ .../android/systemui/recents/model/Task.java | 16 ++++++- .../systemui/recents/model/TaskStack.java | 31 +++++++++++-- .../systemui/recents/views/RecentsView.java | 22 +++++++++ .../views/TaskStackLayoutAlgorithm.java | 46 ++++++++++++++++++- .../systemui/recents/views/TaskStackView.java | 36 +++++++++++++++ .../recents/views/TaskStackViewScroller.java | 8 ++++ 9 files changed, 212 insertions(+), 13 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index 8060e07801bbd..b1d955573d19b 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -78,6 +78,9 @@ import com.android.systemui.recents.views.RecentsView; import com.android.systemui.recents.views.SystemBarScrimViews; import com.android.systemui.statusbar.BaseStatusBar; +import java.io.FileDescriptor; +import java.io.PrintWriter; + /** * The main Recents activity that is started from AlternateRecentsComponent. */ @@ -733,4 +736,20 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD }); return true; } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + super.dump(prefix, fd, writer, args); + String id = Integer.toHexString(System.identityHashCode(this)); + + writer.print(prefix); writer.print(TAG); + writer.print(" visible="); writer.print(mIsVisible ? "Y" : "N"); + writer.print(" [0x"); writer.print(id); writer.print("]"); + writer.println(); + + if (mRecentsView != null) { + mRecentsView.dump(prefix, writer); + } + EventBus.getDefault().dump(prefix, writer); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java b/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java index 0d56ae98a1657..38ad1c7107167 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java +++ b/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java @@ -30,6 +30,7 @@ import android.util.MutableBoolean; import com.android.systemui.recents.misc.ReferenceCountedTrigger; +import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -652,19 +653,43 @@ public class EventBus extends BroadcastReceiver { /** * @return a dump of the current state of the EventBus */ - public String dump() { + public void dump(String prefix, PrintWriter writer) { + writer.println(dumpInternal(prefix)); + } + + public String dumpInternal(String prefix) { + String innerPrefix = prefix + " "; + String innerInnerPrefix = innerPrefix + " "; StringBuilder output = new StringBuilder(); + output.append(prefix); output.append("Registered class types:"); output.append("\n"); - for (Class clz : mSubscriberTypeMap.keySet()) { - output.append("\t"); + ArrayList> subsciberTypes = new ArrayList<>(mSubscriberTypeMap.keySet()); + Collections.sort(subsciberTypes, new Comparator>() { + @Override + public int compare(Class o1, Class o2) { + return o1.getSimpleName().compareTo(o2.getSimpleName()); + } + }); + for (int i = 0; i < subsciberTypes.size(); i++) { + Class clz = subsciberTypes.get(i); + output.append(innerPrefix); output.append(clz.getSimpleName()); output.append("\n"); } + output.append(prefix); output.append("Event map:"); output.append("\n"); - for (Class clz : mEventTypeMap.keySet()) { - output.append("\t"); + ArrayList> classes = new ArrayList<>(mEventTypeMap.keySet()); + Collections.sort(classes, new Comparator>() { + @Override + public int compare(Class o1, Class o2) { + return o1.getSimpleName().compareTo(o2.getSimpleName()); + } + }); + for (int i = 0; i < classes.size(); i++) { + Class clz = classes.get(i); + output.append(innerPrefix); output.append(clz.getSimpleName()); output.append(" -> "); output.append("\n"); @@ -673,7 +698,7 @@ public class EventBus extends BroadcastReceiver { Object subscriber = handler.subscriber.getReference(); if (subscriber != null) { String id = Integer.toHexString(System.identityHashCode(subscriber)); - output.append("\t\t"); + output.append(innerInnerPrefix); output.append(subscriber.getClass().getSimpleName()); output.append(" [0x" + id + ", #" + handler.priority + "]"); output.append("\n"); diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java index e28612a3cff63..69d98af5a2b25 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java @@ -243,4 +243,14 @@ public class Utilities { public static float dpToPx(Resources res, float dp) { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics()); } + + /** + * Returns a lightweight dump of a rect. + */ + public static String dumpRect(Rect r) { + if (r == null) { + return "N:0,0-0,0"; + } + return r.left + "," + r.top + "-" + r.right + "," + r.bottom; + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java index 6668079340ec8..24eeaf27f0326 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java @@ -29,6 +29,7 @@ import com.android.systemui.recents.Recents; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.misc.Utilities; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Objects; @@ -37,6 +38,9 @@ import java.util.Objects; * A task represents the top most task in the system's task stack. */ public class Task { + + public static final String TAG = "Task"; + /* Task callbacks */ public interface TaskCallbacks { /* Notifies when a task has been bound */ @@ -100,7 +104,8 @@ public class Task { @Override public String toString() { - return "t" + id + ", s" + stackId + ", u" + userId; + return "id=" + id + " stackId=" + stackId + " user=" + userId + " lastActiveTime=" + + lastActiveTime; } private void updateHashCode() { @@ -306,4 +311,13 @@ public class Task { public String toString() { return "[" + key.toString() + "] " + title; } + + public void dump(String prefix, PrintWriter writer) { + writer.print(prefix); writer.print(key); + if (affiliationTaskId != key.id) { + writer.print(" "); writer.print("affTaskId=" + affiliationTaskId); + } + writer.print(" "); writer.print(title); + writer.println(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java index df3f56c7c3acc..fbb59870b2372 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java @@ -55,6 +55,7 @@ import com.android.systemui.recents.views.AnimationProps; import com.android.systemui.recents.views.DropTarget; import com.android.systemui.recents.views.TaskStackLayoutAlgorithm; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -208,6 +209,8 @@ class FilteredTaskList { */ public class TaskStack { + private static final String TAG = "TaskStack"; + /** Task stack callbacks */ public interface TaskStackCallbacks { /** @@ -725,7 +728,9 @@ public class TaskStack { /** Finds the task with the specified task id. */ public Task findTaskWithId(int taskId) { ArrayList tasks = computeAllTasksList(); - for (Task task : tasks) { + int taskCount = tasks.size(); + for (int i = 0; i < taskCount; i++) { + Task task = tasks.get(i); if (task.key.id == taskId) { return task; } @@ -880,7 +885,10 @@ public class TaskStack { ArraySet existingComponents = new ArraySet<>(); ArraySet removedComponents = new ArraySet<>(); ArrayList taskKeys = getTaskKeys(); - for (Task.TaskKey t : taskKeys) { + int taskKeyCount = taskKeys.size(); + for (int i = 0; i < taskKeyCount; i++) { + Task.TaskKey t = taskKeys.get(i); + // Skip if this doesn't apply to the current user if (t.userId != userId) continue; @@ -903,8 +911,10 @@ public class TaskStack { @Override public String toString() { String str = "Stack Tasks (" + mStackTaskList.size() + "):\n"; - for (Task t : mStackTaskList.getTasks()) { - str += " " + t.toString() + "\n"; + ArrayList tasks = mStackTaskList.getTasks(); + int taskCount = tasks.size(); + for (int i = 0; i < taskCount; i++) { + str += " " + tasks.get(i).toString() + "\n"; } return str; } @@ -921,4 +931,17 @@ public class TaskStack { } return map; } + + public void dump(String prefix, PrintWriter writer) { + String innerPrefix = prefix + " "; + + writer.print(prefix); writer.print(TAG); + writer.print(" numStackTasks="); writer.print(mStackTaskList.size()); + writer.println(); + ArrayList tasks = mStackTaskList.getTasks(); + int taskCount = tasks.size(); + for (int i = 0; i < taskCount; i++) { + tasks.get(i).dump(innerPrefix, writer); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index ef81f9ee28173..21a43d5c3e524 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -74,6 +74,8 @@ import com.android.systemui.recents.views.RecentsTransitionHelper.AnimationSpecC import com.android.systemui.stackdivider.WindowManagerProxy; import com.android.systemui.statusbar.FlingAnimationUtils; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -83,6 +85,8 @@ import java.util.List; */ public class RecentsView extends FrameLayout { + private static final String TAG = "RecentsView"; + private static final int DOCK_AREA_OVERLAY_TRANSITION_DURATION = 135; private static final int DEFAULT_UPDATE_SCRIM_DURATION = 200; private static final float DEFAULT_SCRIM_ALPHA = 0.33f; @@ -758,4 +762,22 @@ public class RecentsView extends FrameLayout { top + mStackActionButton.getMeasuredHeight()); return actionButtonRect; } + + public void dump(String prefix, PrintWriter writer) { + String innerPrefix = prefix + " "; + String id = Integer.toHexString(System.identityHashCode(this)); + + writer.print(prefix); writer.print(TAG); + writer.print(" awaitingFirstLayout="); writer.print(mAwaitingFirstLayout ? "Y" : "N"); + writer.print(" insets="); writer.print(Utilities.dumpRect(mSystemInsets)); + writer.print(" [0x"); writer.print(id); writer.print("]"); + writer.println(); + + if (mStack != null) { + mStack.dump(innerPrefix, writer); + } + if (mTaskStackView != null) { + mTaskStackView.dump(innerPrefix, writer); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java index c16a9be462253..b75a91e8c42bc 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -39,6 +39,7 @@ import com.android.systemui.recents.misc.Utilities; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskStack; +import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; @@ -109,6 +110,8 @@ class Range { */ public class TaskStackLayoutAlgorithm { + private static final String TAG = "TaskStackLayoutAlgorithm"; + // The distribution of view bounds alpha // XXX: This is a hack because you can currently set the max alpha to be > 1f public static final float OUTLINE_ALPHA_MIN_VALUE = 0f; @@ -684,7 +687,6 @@ public class TaskStackLayoutAlgorithm { } /** - * * Returns the current stack state. */ public StackState getStackState() { @@ -1157,4 +1159,44 @@ public class TaskStackLayoutAlgorithm { mBackOfStackTransform.visible = true; mFrontOfStackTransform.visible = true; } -} + + public void dump(String prefix, PrintWriter writer) { + String innerPrefix = prefix + " "; + + writer.print(prefix); writer.print(TAG); + writer.write(" numStackTasks="); writer.write(mNumStackTasks); + writer.println(); + + writer.print(innerPrefix); + writer.print("insets="); writer.print(Utilities.dumpRect(mSystemInsets)); + writer.print(" stack="); writer.print(Utilities.dumpRect(mStackRect)); + writer.print(" task="); writer.print(Utilities.dumpRect(mTaskRect)); + writer.print(" freeform="); writer.print(Utilities.dumpRect(mFreeformRect)); + writer.print(" actionButton="); writer.print(Utilities.dumpRect(mStackActionButtonRect)); + writer.println(); + + writer.print(innerPrefix); + writer.print("minScroll="); writer.print(mMinScrollP); + writer.print(" maxScroll="); writer.print(mMaxScrollP); + writer.print(" initialScroll="); writer.print(mInitialScrollP); + writer.println(); + + writer.print(innerPrefix); + writer.print("focusState="); writer.print(mFocusState); + writer.println(); + + if (mTaskIndexOverrideMap.size() > 0) { + for (int i = mTaskIndexOverrideMap.size() - 1; i >= 0; i--) { + int taskId = mTaskIndexOverrideMap.keyAt(i); + float x = mTaskIndexMap.get(taskId); + float overrideX = mTaskIndexOverrideMap.get(taskId, 0f); + + writer.print(innerPrefix); + writer.print("taskId= "); writer.print(taskId); + writer.print(" x= "); writer.print(x); + writer.print(" overrideX= "); writer.print(overrideX); + writer.println(); + } + } + } +} \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index 5416a4897666a..13c8403ab0abd 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -90,6 +90,7 @@ import com.android.systemui.recents.misc.Utilities; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskStack; +import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; @@ -102,6 +103,8 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal TaskStackLayoutAlgorithm.TaskStackLayoutAlgorithmCallbacks, ViewPool.ViewPoolConsumer { + private static final String TAG = "TaskStackView"; + private final static String KEY_SAVED_STATE_SUPER = "saved_instance_state_super"; private final static String KEY_SAVED_STATE_LAYOUT_FOCUSED_STATE = "saved_instance_state_layout_focused_state"; @@ -2067,4 +2070,37 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal mScreenPinningEnabled = ssp.getSystemSetting(getContext(), Settings.System.LOCK_TO_APP_ENABLED) != 0; } + + public void dump(String prefix, PrintWriter writer) { + String innerPrefix = prefix + " "; + String id = Integer.toHexString(System.identityHashCode(this)); + + writer.print(prefix); writer.print(TAG); + writer.print(" hasDefRelayout="); + writer.print(mDeferredTaskViewLayoutAnimation != null ? "Y" : "N"); + writer.print(" clipDirty="); writer.print(mTaskViewsClipDirty ? "Y" : "N"); + writer.print(" awaitingFirstLayout="); writer.print(mAwaitingFirstLayout ? "Y" : "N"); + writer.print(" initialState="); writer.print(mInitialState); + writer.print(" inMeasureLayout="); writer.print(mInMeasureLayout ? "Y" : "N"); + writer.print(" enterAnimCompleted="); writer.print(mEnterAnimationComplete ? "Y" : "N"); + writer.print(" touchExplorationOn="); writer.print(mTouchExplorationEnabled ? "Y" : "N"); + writer.print(" screenPinningOn="); writer.print(mScreenPinningEnabled ? "Y" : "N"); + writer.print(" numIgnoreTasks="); writer.print(mIgnoreTasks.size()); + writer.print(" numViewPool="); writer.print(mViewPool.getViews().size()); + writer.print(" stableStackBounds="); writer.print(Utilities.dumpRect(mStableStackBounds)); + writer.print(" stackBounds="); writer.print(Utilities.dumpRect(mStackBounds)); + writer.print(" stableWindow="); writer.print(Utilities.dumpRect(mStableWindowRect)); + writer.print(" window="); writer.print(Utilities.dumpRect(mWindowRect)); + writer.print(" [0x"); writer.print(id); writer.print("]"); + writer.println(); + + if (mFocusedTask != null) { + writer.print(innerPrefix); + writer.print("Focused task: "); + mFocusedTask.dump(innerPrefix, writer); + } + + mLayoutAlgorithm.dump(innerPrefix, writer); + mStackScroller.dump(innerPrefix, writer); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java index 583fb88e40698..19b3c943ae657 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java @@ -30,6 +30,8 @@ import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.recents.misc.Utilities; +import java.io.PrintWriter; + /* The scrolling logic for a TaskStackView */ public class TaskStackViewScroller { @@ -246,4 +248,10 @@ public class TaskStackViewScroller { mScroller.abortAnimation(); } } + + public void dump(String prefix, PrintWriter writer) { + writer.print(prefix); writer.print(TAG); + writer.print(" stackScroll:"); writer.print(mStackScrollP); + writer.println(); + } } \ No newline at end of file