Add debug logs to ActivityTracker
Flag: N/A
Bug: 274280837
Test: checked logs during gestures and 3-button, and dumped Launcher logs
Change-Id: Icbb1edb0e59fa9cce9364e39823a664cda4ebf1b
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 0320f50..dc1c6a6 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -1002,7 +1002,7 @@
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "cancelRecentsAnimation",
/* gestureEvent= */ CANCEL_RECENTS_ANIMATION);
- mActivityInitListener.unregister();
+ mActivityInitListener.unregister("AbsSwipeUpHandler.onRecentsAnimationCanceled");
// Cache the recents animation controller so we can defer its cleanup to after having
// properly cleaned up the screenshot without accidentally using it.
mDeferredCleanupRecentsAnimationController = mRecentsAnimationController;
@@ -1964,7 +1964,7 @@
// Cleanup when switching handlers
mInputConsumerProxy.unregisterOnTouchDownCallback();
- mActivityInitListener.unregister();
+ mActivityInitListener.unregister("AbsSwipeUpHandler.cancelCurrentAnimation");
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
mActivityRestartListener);
mTaskSnapshotCache.clear();
@@ -1982,7 +1982,7 @@
mGestureEndCallback.run();
}
- mActivityInitListener.unregister();
+ mActivityInitListener.unregister("AbsSwipeUpHandler.invalidateHandler");
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
mActivityRestartListener);
mTaskSnapshotCache.clear();
@@ -2486,11 +2486,11 @@
/**
* Registers a callback to run when the activity is ready.
*/
- public void initWhenReady() {
+ public void initWhenReady(String reasonString) {
// Preload the plan
RecentsModel.INSTANCE.get(mContext).getTasks(null);
- mActivityInitListener.register();
+ mActivityInitListener.register(reasonString);
}
private boolean shouldFadeOutTargetsForKeyboardQuickSwitch(
diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
index 56c9a00..0db50bf 100644
--- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
+++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
@@ -310,7 +310,7 @@
.newHandler(gestureState, cmd.createTime);
interactionHandler.setGestureEndCallback(
() -> onTransitionComplete(cmd, interactionHandler));
- interactionHandler.initWhenReady();
+ interactionHandler.initWhenReady("OverviewCommandHelper: cmd.type=" + cmd.type);
RecentsAnimationListener recentAnimListener = new RecentsAnimationListener() {
@Override
diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
index 0f8ceba..fbbfc16 100644
--- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
+++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
@@ -394,7 +394,8 @@
mInteractionHandler = mHandlerFactory.newHandler(mGestureState, touchTimeMs);
mInteractionHandler.setGestureEndCallback(this::onInteractionGestureFinished);
mMotionPauseDetector.setOnMotionPauseListener(mInteractionHandler.getMotionPauseListener());
- mInteractionHandler.initWhenReady();
+ mInteractionHandler.initWhenReady(
+ "OtherActivityInputConsumer.startTouchTrackingForWindowAnimation");
if (mTaskAnimationManager.isRecentsAnimationRunning()) {
mActiveCallbacks = mTaskAnimationManager.continueRecentsAnimation(mGestureState);
diff --git a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java
index aeec36f..5efbb40 100644
--- a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java
+++ b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java
@@ -57,16 +57,16 @@
* Registers the activity-created listener. If the activity is already created, then the
* callback provided in the constructor will be called synchronously.
*/
- public void register() {
+ public void register(String reasonString) {
mIsRegistered = true;
- mActivityTracker.registerCallback(this);
+ mActivityTracker.registerCallback(this, reasonString);
}
/**
* After calling this, we won't {@link #init} even when the activity is ready.
*/
- public void unregister() {
- mActivityTracker.unregisterCallback(this);
+ public void unregister(String reasonString) {
+ mActivityTracker.unregisterCallback(this, reasonString);
mIsRegistered = false;
mOnInitListener = null;
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index e7d2843..269603c 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2651,6 +2651,7 @@
mModel.dumpState(prefix, fd, writer, args);
mOverlayManager.dump(prefix, writer);
+ ACTIVITY_TRACKER.dump(prefix, writer);
}
/**
diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java
index 213c458..29aa216 100644
--- a/src/com/android/launcher3/dragndrop/AddItemActivity.java
+++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java
@@ -258,7 +258,7 @@
.addCategory(Intent.CATEGORY_HOME)
.setPackage(getPackageName())
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Launcher.ACTIVITY_TRACKER.registerCallback(listener);
+ Launcher.ACTIVITY_TRACKER.registerCallback(listener, "AddItemActivity.onLongClick");
startActivity(homeIntent, ApiWrapper.createFadeOutAnimOptions(this).toBundle());
logCommand(LAUNCHER_ADD_EXTERNAL_ITEM_DRAGGED);
mFinishOnPause = true;
diff --git a/src/com/android/launcher3/util/ActivityTracker.java b/src/com/android/launcher3/util/ActivityTracker.java
index 405d2bb..95a0511 100644
--- a/src/com/android/launcher3/util/ActivityTracker.java
+++ b/src/com/android/launcher3/util/ActivityTracker.java
@@ -18,10 +18,13 @@
import static com.android.launcher3.testing.shared.TestProtocol.GET_FROM_RECENTS_FAILURE;
import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
+import android.util.Log;
+
import androidx.annotation.Nullable;
import com.android.launcher3.BaseActivity;
+import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -31,6 +34,8 @@
*/
public final class ActivityTracker<T extends BaseActivity> {
+ private static final String TAG = "ActivityTracker";
+
private WeakReference<T> mCurrentActivity = new WeakReference<>(null);
private CopyOnWriteArrayList<SchedulerCallback<T>> mCallbacks = new CopyOnWriteArrayList<>();
@@ -57,12 +62,13 @@
*
* @param callback The callback to call init() on when the activity is ready.
*/
- public void registerCallback(SchedulerCallback<T> callback) {
+ public void registerCallback(SchedulerCallback<T> callback, String reasonString) {
+ Log.d(TAG, "Registering callback: " + callback + ", reason=" + reasonString);
T activity = mCurrentActivity.get();
mCallbacks.add(callback);
if (activity != null) {
if (!callback.init(activity, activity.isStarted())) {
- unregisterCallback(callback);
+ unregisterCallback(callback, "ActivityTracker.registerCallback: Intent handled");
}
}
}
@@ -70,7 +76,8 @@
/**
* Unregisters a registered callback.
*/
- public void unregisterCallback(SchedulerCallback<T> callback) {
+ public void unregisterCallback(SchedulerCallback<T> callback, String reasonString) {
+ Log.d(TAG, "Unregistering callback: " + callback + ", reason=" + reasonString);
mCallbacks.remove(callback);
}
@@ -87,16 +94,25 @@
private boolean handleIntent(T activity, boolean alreadyOnHome) {
boolean handled = false;
+ if (!mCallbacks.isEmpty()) {
+ Log.d(TAG, "handleIntent: mCallbacks=" + mCallbacks);
+ }
for (SchedulerCallback<T> cb : mCallbacks) {
if (!cb.init(activity, alreadyOnHome)) {
// Callback doesn't want any more updates
- unregisterCallback(cb);
+ unregisterCallback(cb, "ActivityTracker.handleIntent: Intent handled");
}
handled = true;
}
return handled;
}
+ public void dump(String prefix, PrintWriter writer) {
+ writer.println(prefix + "ActivityTracker:");
+ writer.println(prefix + "\tmCurrentActivity=" + mCurrentActivity.get());
+ writer.println(prefix + "\tmCallbacks=" + mCallbacks);
+ }
+
public interface SchedulerCallback<T extends BaseActivity> {
/**