From 0a184a9981888e307ae8986ecea1822931bb3584 Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Thu, 26 Jan 2023 14:48:15 -0800 Subject: [PATCH] Reorganize ActiveGestureLogs for ease-of-use Fixes: 268382209 Test: completed several gestures and checked the logs Change-Id: Ic08bfc553a39bda7401f6565ce5553933dbc0689 --- .../android/quickstep/AbsSwipeUpHandler.java | 2 + .../util/ActiveGestureErrorDetector.java | 542 +++++++++--------- .../quickstep/util/ActiveGestureLog.java | 20 +- 3 files changed, 285 insertions(+), 279 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 1b29a839be..d43894a63a 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -51,6 +51,7 @@ import static com.android.quickstep.GestureState.STATE_RECENTS_SCROLLING_FINISHE import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.CANCEL_RECENTS_ANIMATION; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.EXPECTING_TASK_APPEARED; +import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.LAUNCHER_DESTROYED; import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.ON_SETTLED_ON_END_TARGET; import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; @@ -182,6 +183,7 @@ public abstract class AbsSwipeUpHandler, if (mActivity != activity) { return; } + ActiveGestureLog.INSTANCE.addLog("Launcher destroyed", LAUNCHER_DESTROYED); mRecentsView = null; mActivity = null; } diff --git a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java index 60065fb16c..2964868aa0 100644 --- a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java +++ b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java @@ -20,7 +20,6 @@ import android.util.ArraySet; import androidx.annotation.NonNull; import java.io.PrintWriter; -import java.util.List; import java.util.Set; /** @@ -37,7 +36,7 @@ public class ActiveGestureErrorDetector { ON_SETTLED_ON_END_TARGET, START_RECENTS_ANIMATION, FINISH_RECENTS_ANIMATION, CANCEL_RECENTS_ANIMATION, SET_ON_PAGE_TRANSITION_END_CALLBACK, CANCEL_CURRENT_ANIMATION, CLEANUP_SCREENSHOT, SCROLLER_ANIMATION_ABORTED, TASK_APPEARED, EXPECTING_TASK_APPEARED, - FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER, + FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER, LAUNCHER_DESTROYED, /** * These GestureEvents are specifically associated to state flags that get set in @@ -68,288 +67,288 @@ public class ActiveGestureErrorDetector { protected static void analyseAndDump( @NonNull String prefix, @NonNull PrintWriter writer, - List eventLogs) { - writer.println(prefix + "ActiveGestureErrorDetector:"); - for (int i = 0; i < eventLogs.size(); i++) { - ActiveGestureLog.EventLog eventLog = eventLogs.get(i); - if (eventLog == null) { + @NonNull ActiveGestureLog.EventLog eventLog) { + writer.println(prefix + "Error messages for gesture ID: " + eventLog.logId); + + boolean errorDetected = false; + // Use a Set since the order is inherently checked in the loop. + final Set encounteredEvents = new ArraySet<>(); + // Set flags and check order of operations. + for (ActiveGestureLog.EventEntry eventEntry : eventLog.eventEntries) { + GestureEvent gestureEvent = eventEntry.getGestureEvent(); + if (gestureEvent == null) { continue; } - int gestureId = eventLog.logId; - writer.println(prefix + "\tError messages for gesture ID: " + gestureId); + encounteredEvents.add(gestureEvent); - boolean errorDetected = false; - // Use a Set since the order is inherently checked in the loop. - final Set encounteredEvents = new ArraySet<>(); - // Set flags and check order of operations. - for (ActiveGestureLog.EventEntry eventEntry : eventLog.eventEntries) { - GestureEvent gestureEvent = eventEntry.getGestureEvent(); - if (gestureEvent == null) { - continue; - } - encounteredEvents.add(gestureEvent); - switch (gestureEvent) { - case MOTION_UP: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.MOTION_DOWN), - prefix, - /* errorMessage= */ "Motion up detected before/without" - + " motion down.", - writer); - break; - case ON_SETTLED_ON_END_TARGET: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.SET_END_TARGET), - prefix, - /* errorMessage= */ "onSettledOnEndTarget called " - + "before/without setEndTarget.", - writer); - break; - case FINISH_RECENTS_ANIMATION: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.START_RECENTS_ANIMATION), - prefix, - /* errorMessage= */ "finishRecentsAnimation called " - + "before/without startRecentsAnimation.", - writer); - break; - case CANCEL_RECENTS_ANIMATION: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.START_RECENTS_ANIMATION), - prefix, - /* errorMessage= */ "cancelRecentsAnimation called " - + "before/without startRecentsAnimation.", - writer); - break; - case CLEANUP_SCREENSHOT: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.STATE_SCREENSHOT_CAPTURED), - prefix, - /* errorMessage= */ "recents activity screenshot was " - + "cleaned up before/without STATE_SCREENSHOT_CAPTURED " - + "being set.", - writer); - break; - case SCROLLER_ANIMATION_ABORTED: - errorDetected |= printErrorIfTrue( - encounteredEvents.contains(GestureEvent.SET_END_TARGET_HOME) - && !encounteredEvents.contains( - GestureEvent.ON_SETTLED_ON_END_TARGET), - prefix, - /* errorMessage= */ "recents view scroller animation " - + "aborted after setting end target HOME, but before" - + " settling on end target.", - writer); - break; - case TASK_APPEARED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.SET_END_TARGET_NEW_TASK), - prefix, - /* errorMessage= */ "onTasksAppeared called " - + "before/without setting end target to new task", - writer); - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.EXPECTING_TASK_APPEARED), - prefix, - /* errorMessage= */ "onTasksAppeared was not expected to be called", - writer); - break; - case EXPECTING_TASK_APPEARED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.SET_END_TARGET_NEW_TASK), - prefix, - /* errorMessage= */ "expecting onTasksAppeared to be called " - + "before/without setting end target to new task", - writer); - break; - case STATE_GESTURE_COMPLETED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.MOTION_UP), - prefix, - /* errorMessage= */ "STATE_GESTURE_COMPLETED set " - + "before/without motion up.", - writer); - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED), - prefix, - /* errorMessage= */ "STATE_GESTURE_COMPLETED set " - + "before/without STATE_GESTURE_STARTED.", - writer); - break; - case STATE_GESTURE_CANCELLED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.MOTION_UP), - prefix, - /* errorMessage= */ "STATE_GESTURE_CANCELLED set " - + "before/without motion up.", - writer); - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED), - prefix, - /* errorMessage= */ "STATE_GESTURE_CANCELLED set " - + "before/without STATE_GESTURE_STARTED.", - writer); - break; - case STATE_SCREENSHOT_CAPTURED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.STATE_CAPTURE_SCREENSHOT), - prefix, - /* errorMessage= */ "STATE_SCREENSHOT_CAPTURED set " - + "before/without STATE_CAPTURE_SCREENSHOT.", - writer); - break; - case STATE_RECENTS_SCROLLING_FINISHED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains( - GestureEvent.SET_ON_PAGE_TRANSITION_END_CALLBACK), - prefix, - /* errorMessage= */ "STATE_RECENTS_SCROLLING_FINISHED " - + "set before/without calling " - + "setOnPageTransitionEndCallback.", - writer); - break; - case STATE_RECENTS_ANIMATION_CANCELED: - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains( - GestureEvent.START_RECENTS_ANIMATION), - prefix, - /* errorMessage= */ "STATE_RECENTS_ANIMATION_CANCELED " - + "set before/without startRecentsAnimation.", - writer); - break; - case MOTION_DOWN: - case SET_END_TARGET: - case SET_END_TARGET_HOME: - case SET_END_TARGET_NEW_TASK: - case START_RECENTS_ANIMATION: - case SET_ON_PAGE_TRANSITION_END_CALLBACK: - case CANCEL_CURRENT_ANIMATION: - case FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER: - case STATE_GESTURE_STARTED: - case STATE_END_TARGET_ANIMATION_FINISHED: - case STATE_CAPTURE_SCREENSHOT: - case STATE_HANDLER_INVALIDATED: - case STATE_LAUNCHER_DRAWN: - default: - // No-Op - } + switch (gestureEvent) { + case MOTION_UP: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.MOTION_DOWN), + prefix, + /* errorMessage= */ "Motion up detected before/without" + + " motion down.", + writer); + break; + case ON_SETTLED_ON_END_TARGET: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.SET_END_TARGET), + prefix, + /* errorMessage= */ "onSettledOnEndTarget called " + + "before/without setEndTarget.", + writer); + break; + case FINISH_RECENTS_ANIMATION: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.START_RECENTS_ANIMATION), + prefix, + /* errorMessage= */ "finishRecentsAnimation called " + + "before/without startRecentsAnimation.", + writer); + break; + case CANCEL_RECENTS_ANIMATION: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.START_RECENTS_ANIMATION), + prefix, + /* errorMessage= */ "cancelRecentsAnimation called " + + "before/without startRecentsAnimation.", + writer); + break; + case CLEANUP_SCREENSHOT: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.STATE_SCREENSHOT_CAPTURED), + prefix, + /* errorMessage= */ "recents activity screenshot was " + + "cleaned up before/without STATE_SCREENSHOT_CAPTURED " + + "being set.", + writer); + break; + case SCROLLER_ANIMATION_ABORTED: + errorDetected |= printErrorIfTrue( + encounteredEvents.contains(GestureEvent.SET_END_TARGET_HOME) + && !encounteredEvents.contains( + GestureEvent.ON_SETTLED_ON_END_TARGET), + prefix, + /* errorMessage= */ "recents view scroller animation " + + "aborted after setting end target HOME, but before" + + " settling on end target.", + writer); + break; + case TASK_APPEARED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.SET_END_TARGET_NEW_TASK), + prefix, + /* errorMessage= */ "onTasksAppeared called " + + "before/without setting end target to new task", + writer); + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.EXPECTING_TASK_APPEARED), + prefix, + /* errorMessage= */ "onTasksAppeared was not expected to be called", + writer); + break; + case EXPECTING_TASK_APPEARED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.SET_END_TARGET_NEW_TASK), + prefix, + /* errorMessage= */ "expecting onTasksAppeared to be called " + + "before/without setting end target to new task", + writer); + break; + case LAUNCHER_DESTROYED: + errorDetected |= printErrorIfTrue( + true, + prefix, + /* errorMessage= */ "Launcher destroyed mid-gesture", + writer); + break; + case STATE_GESTURE_COMPLETED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.MOTION_UP), + prefix, + /* errorMessage= */ "STATE_GESTURE_COMPLETED set " + + "before/without motion up.", + writer); + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED), + prefix, + /* errorMessage= */ "STATE_GESTURE_COMPLETED set " + + "before/without STATE_GESTURE_STARTED.", + writer); + break; + case STATE_GESTURE_CANCELLED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.MOTION_UP), + prefix, + /* errorMessage= */ "STATE_GESTURE_CANCELLED set " + + "before/without motion up.", + writer); + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED), + prefix, + /* errorMessage= */ "STATE_GESTURE_CANCELLED set " + + "before/without STATE_GESTURE_STARTED.", + writer); + break; + case STATE_SCREENSHOT_CAPTURED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.STATE_CAPTURE_SCREENSHOT), + prefix, + /* errorMessage= */ "STATE_SCREENSHOT_CAPTURED set " + + "before/without STATE_CAPTURE_SCREENSHOT.", + writer); + break; + case STATE_RECENTS_SCROLLING_FINISHED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains( + GestureEvent.SET_ON_PAGE_TRANSITION_END_CALLBACK), + prefix, + /* errorMessage= */ "STATE_RECENTS_SCROLLING_FINISHED " + + "set before/without calling " + + "setOnPageTransitionEndCallback.", + writer); + break; + case STATE_RECENTS_ANIMATION_CANCELED: + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains( + GestureEvent.START_RECENTS_ANIMATION), + prefix, + /* errorMessage= */ "STATE_RECENTS_ANIMATION_CANCELED " + + "set before/without startRecentsAnimation.", + writer); + break; + case MOTION_DOWN: + case SET_END_TARGET: + case SET_END_TARGET_HOME: + case SET_END_TARGET_NEW_TASK: + case START_RECENTS_ANIMATION: + case SET_ON_PAGE_TRANSITION_END_CALLBACK: + case CANCEL_CURRENT_ANIMATION: + case FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER: + case STATE_GESTURE_STARTED: + case STATE_END_TARGET_ANIMATION_FINISHED: + case STATE_CAPTURE_SCREENSHOT: + case STATE_HANDLER_INVALIDATED: + case STATE_LAUNCHER_DRAWN: + default: + // No-Op } + } - // Check that all required events were found. - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.MOTION_DOWN), - prefix, - /* errorMessage= */ "Motion down never detected.", - writer); - errorDetected |= printErrorIfTrue( - !encounteredEvents.contains(GestureEvent.MOTION_UP), - prefix, - /* errorMessage= */ "Motion up never detected.", - writer); + // Check that all required events were found. + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.MOTION_DOWN), + prefix, + /* errorMessage= */ "Motion down never detected.", + writer); + errorDetected |= printErrorIfTrue( + !encounteredEvents.contains(GestureEvent.MOTION_UP), + prefix, + /* errorMessage= */ "Motion up never detected.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) - && !encounteredEvents.contains(GestureEvent.ON_SETTLED_ON_END_TARGET), - prefix, - /* errorMessage= */ "setEndTarget was called, but " - + "onSettledOnEndTarget wasn't.", - writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) - && !encounteredEvents.contains( - GestureEvent.STATE_END_TARGET_ANIMATION_FINISHED), - prefix, - /* errorMessage= */ "setEndTarget was called, but " - + "STATE_END_TARGET_ANIMATION_FINISHED was never set.", - writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) - && !encounteredEvents.contains( - GestureEvent.STATE_RECENTS_SCROLLING_FINISHED), - prefix, - /* errorMessage= */ "setEndTarget was called, but " - + "STATE_RECENTS_SCROLLING_FINISHED was never set.", - writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.STATE_END_TARGET_ANIMATION_FINISHED) - && encounteredEvents.contains( - GestureEvent.STATE_RECENTS_SCROLLING_FINISHED) - && !encounteredEvents.contains(GestureEvent.ON_SETTLED_ON_END_TARGET), - prefix, - /* errorMessage= */ "STATE_END_TARGET_ANIMATION_FINISHED and " - + "STATE_RECENTS_SCROLLING_FINISHED were set, but onSettledOnEndTarget " - + "wasn't called.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) + && !encounteredEvents.contains(GestureEvent.ON_SETTLED_ON_END_TARGET), + prefix, + /* errorMessage= */ "setEndTarget was called, but " + + "onSettledOnEndTarget wasn't.", + writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) + && !encounteredEvents.contains( + GestureEvent.STATE_END_TARGET_ANIMATION_FINISHED), + prefix, + /* errorMessage= */ "setEndTarget was called, but " + + "STATE_END_TARGET_ANIMATION_FINISHED was never set.", + writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains(GestureEvent.SET_END_TARGET) + && !encounteredEvents.contains( + GestureEvent.STATE_RECENTS_SCROLLING_FINISHED), + prefix, + /* errorMessage= */ "setEndTarget was called, but " + + "STATE_RECENTS_SCROLLING_FINISHED was never set.", + writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.STATE_END_TARGET_ANIMATION_FINISHED) + && encounteredEvents.contains( + GestureEvent.STATE_RECENTS_SCROLLING_FINISHED) + && !encounteredEvents.contains(GestureEvent.ON_SETTLED_ON_END_TARGET), + prefix, + /* errorMessage= */ "STATE_END_TARGET_ANIMATION_FINISHED and " + + "STATE_RECENTS_SCROLLING_FINISHED were set, but onSettledOnEndTarget " + + "wasn't called.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.START_RECENTS_ANIMATION) - && !encounteredEvents.contains(GestureEvent.FINISH_RECENTS_ANIMATION) - && !encounteredEvents.contains(GestureEvent.CANCEL_RECENTS_ANIMATION), - prefix, - /* errorMessage= */ "startRecentsAnimation was called, but " - + "finishRecentsAnimation and cancelRecentsAnimation weren't.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.START_RECENTS_ANIMATION) + && !encounteredEvents.contains(GestureEvent.FINISH_RECENTS_ANIMATION) + && !encounteredEvents.contains(GestureEvent.CANCEL_RECENTS_ANIMATION), + prefix, + /* errorMessage= */ "startRecentsAnimation was called, but " + + "finishRecentsAnimation and cancelRecentsAnimation weren't.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED) - && !encounteredEvents.contains(GestureEvent.STATE_GESTURE_COMPLETED) - && !encounteredEvents.contains(GestureEvent.STATE_GESTURE_CANCELLED), - prefix, - /* errorMessage= */ "STATE_GESTURE_STARTED was set, but " - + "STATE_GESTURE_COMPLETED and STATE_GESTURE_CANCELLED weren't.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains(GestureEvent.STATE_GESTURE_STARTED) + && !encounteredEvents.contains(GestureEvent.STATE_GESTURE_COMPLETED) + && !encounteredEvents.contains(GestureEvent.STATE_GESTURE_CANCELLED), + prefix, + /* errorMessage= */ "STATE_GESTURE_STARTED was set, but " + + "STATE_GESTURE_COMPLETED and STATE_GESTURE_CANCELLED weren't.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.STATE_CAPTURE_SCREENSHOT) - && !encounteredEvents.contains(GestureEvent.STATE_SCREENSHOT_CAPTURED), - prefix, - /* errorMessage= */ "STATE_CAPTURE_SCREENSHOT was set, but " - + "STATE_SCREENSHOT_CAPTURED wasn't.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.STATE_CAPTURE_SCREENSHOT) + && !encounteredEvents.contains(GestureEvent.STATE_SCREENSHOT_CAPTURED), + prefix, + /* errorMessage= */ "STATE_CAPTURE_SCREENSHOT was set, but " + + "STATE_SCREENSHOT_CAPTURED wasn't.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.SET_ON_PAGE_TRANSITION_END_CALLBACK) - && !encounteredEvents.contains( - GestureEvent.STATE_RECENTS_SCROLLING_FINISHED), - prefix, - /* errorMessage= */ "setOnPageTransitionEndCallback called, but " - + "STATE_RECENTS_SCROLLING_FINISHED wasn't set.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.SET_ON_PAGE_TRANSITION_END_CALLBACK) + && !encounteredEvents.contains( + GestureEvent.STATE_RECENTS_SCROLLING_FINISHED), + prefix, + /* errorMessage= */ "setOnPageTransitionEndCallback called, but " + + "STATE_RECENTS_SCROLLING_FINISHED wasn't set.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER) - && !encounteredEvents.contains(GestureEvent.CANCEL_CURRENT_ANIMATION) - && !encounteredEvents.contains(GestureEvent.STATE_HANDLER_INVALIDATED), - prefix, - /* errorMessage= */ "AbsSwipeUpHandler.cancelCurrentAnimation " - + "wasn't called and STATE_HANDLER_INVALIDATED wasn't set.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER) + && !encounteredEvents.contains(GestureEvent.CANCEL_CURRENT_ANIMATION) + && !encounteredEvents.contains(GestureEvent.STATE_HANDLER_INVALIDATED), + prefix, + /* errorMessage= */ "AbsSwipeUpHandler.cancelCurrentAnimation " + + "wasn't called and STATE_HANDLER_INVALIDATED wasn't set.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.STATE_RECENTS_ANIMATION_CANCELED) - && !encounteredEvents.contains(GestureEvent.CLEANUP_SCREENSHOT), - prefix, - /* errorMessage= */ "STATE_RECENTS_ANIMATION_CANCELED was set but " - + "the task screenshot wasn't cleaned up.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.STATE_RECENTS_ANIMATION_CANCELED) + && !encounteredEvents.contains(GestureEvent.CLEANUP_SCREENSHOT), + prefix, + /* errorMessage= */ "STATE_RECENTS_ANIMATION_CANCELED was set but " + + "the task screenshot wasn't cleaned up.", + writer); - errorDetected |= printErrorIfTrue( - /* condition= */ encounteredEvents.contains( - GestureEvent.EXPECTING_TASK_APPEARED) - && !encounteredEvents.contains(GestureEvent.TASK_APPEARED), - prefix, - /* errorMessage= */ "onTaskAppeared was expected to be called but wasn't.", - writer); + errorDetected |= printErrorIfTrue( + /* condition= */ encounteredEvents.contains( + GestureEvent.EXPECTING_TASK_APPEARED) + && !encounteredEvents.contains(GestureEvent.TASK_APPEARED), + prefix, + /* errorMessage= */ "onTaskAppeared was expected to be called but wasn't.", + writer); - if (!errorDetected) { - writer.println(prefix + "\t\tNo errors detected."); - } + if (!errorDetected) { + writer.println(prefix + "\tNo errors detected."); } } @@ -358,7 +357,8 @@ public class ActiveGestureErrorDetector { if (!condition) { return false; } - writer.println(prefix + "\t\t- " + errorMessage); + writer.println(prefix + "\t- " + errorMessage); + return true; } } diff --git a/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java b/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java index 23fdd58877..e05d85c2de 100644 --- a/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java +++ b/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java @@ -155,19 +155,27 @@ public class ActiveGestureLog { } public void dump(String prefix, PrintWriter writer) { + if (FeatureFlags.ENABLE_GESTURE_ERROR_DETECTION.get()) { + writer.println(prefix + "ActiveGestureErrorDetector:"); + for (int i = 0; i < logs.length; i++) { + EventLog eventLog = logs[(nextIndex + i) % logs.length]; + if (eventLog == null) { + continue; + } + ActiveGestureErrorDetector.analyseAndDump(prefix + '\t', writer, eventLog); + } + } + writer.println(prefix + "ActiveGestureLog history:"); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSSZ ", Locale.US); Date date = new Date(); - ArrayList eventLogs = new ArrayList<>(); - for (int i = 0; i < logs.length; i++) { EventLog eventLog = logs[(nextIndex + i) % logs.length]; if (eventLog == null) { continue; } - eventLogs.add(eventLog); - writer.println(prefix + "\tLogs for logId: " + eventLog.logId); + writer.println(prefix + "\tLogs for logId: " + eventLog.logId); for (EventEntry eventEntry : eventLog.eventEntries) { date.setTime(eventEntry.time); @@ -199,10 +207,6 @@ public class ActiveGestureLog { writer.println(msg); } } - - if (FeatureFlags.ENABLE_GESTURE_ERROR_DETECTION.get()) { - ActiveGestureErrorDetector.analyseAndDump(prefix + '\t', writer, eventLogs); - } } /**