Merge "Add debug logs to ActivityTracker" into main

This commit is contained in:
Schneider Victor-tulias
2024-03-26 17:02:13 +00:00
committed by Android (Google) Code Review
7 changed files with 34 additions and 16 deletions
@@ -1002,7 +1002,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
// Cleanup when switching handlers
mInputConsumerProxy.unregisterOnTouchDownCallback();
mActivityInitListener.unregister();
mActivityInitListener.unregister("AbsSwipeUpHandler.cancelCurrentAnimation");
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
mActivityRestartListener);
mTaskSnapshotCache.clear();
@@ -1982,7 +1982,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
mGestureEndCallback.run();
}
mActivityInitListener.unregister();
mActivityInitListener.unregister("AbsSwipeUpHandler.invalidateHandler");
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(
mActivityRestartListener);
mTaskSnapshotCache.clear();
@@ -2486,11 +2486,11 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
/**
* 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(
@@ -310,7 +310,7 @@ public class OverviewCommandHelper {
.newHandler(gestureState, cmd.createTime);
interactionHandler.setGestureEndCallback(
() -> onTransitionComplete(cmd, interactionHandler));
interactionHandler.initWhenReady();
interactionHandler.initWhenReady("OverviewCommandHelper: cmd.type=" + cmd.type);
RecentsAnimationListener recentAnimListener = new RecentsAnimationListener() {
@Override
@@ -394,7 +394,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
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);
@@ -57,16 +57,16 @@ public class ActivityInitListener<T extends BaseActivity> implements
* 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;
}
+1
View File
@@ -2651,6 +2651,7 @@ public class Launcher extends StatefulActivity<LauncherState>
mModel.dumpState(prefix, fd, writer, args);
mOverlayManager.dump(prefix, writer);
ACTIVITY_TRACKER.dump(prefix, writer);
}
/**
@@ -258,7 +258,7 @@ public class AddItemActivity extends BaseActivity
.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;
@@ -18,10 +18,13 @@ package com.android.launcher3.util;
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 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/
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 @@ public final class ActivityTracker<T extends BaseActivity> {
*
* @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 @@ public final class ActivityTracker<T extends BaseActivity> {
/**
* 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 @@ public final class ActivityTracker<T extends BaseActivity> {
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> {
/**