diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 8313e099bf..258f46504b 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1223,12 +1223,12 @@ public abstract class AbsSwipeUpHandler, : null; ActiveGestureLog.INSTANCE.addLog( new ActiveGestureLog.CompoundString("calculateEndTarget: velocities=(x=") - .append(Float.toString(dpiFromPx(velocityPxPerMs.x))) + .append(dpiFromPx(velocityPxPerMs.x)) .append("dp/ms, y=") - .append(Float.toString(dpiFromPx(velocityPxPerMs.y))) + .append(dpiFromPx(velocityPxPerMs.y)) .append("dp/ms), angle=") - .append(Double.toString(Math.toDegrees(Math.atan2( - -velocityPxPerMs.y, velocityPxPerMs.x)))), gestureEvent); + .append(Math.toDegrees(Math.atan2( + -velocityPxPerMs.y, velocityPxPerMs.x))), gestureEvent); if (mGestureState.isHandlingAtomicEvent()) { // Button mode, this is only used to go to recents. diff --git a/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java b/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java index 6f4b6cb0b1..278ca56081 100644 --- a/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java +++ b/quickstep/src/com/android/quickstep/util/ActiveGestureLog.java @@ -18,6 +18,8 @@ package com.android.quickstep.util; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.launcher3.util.Preconditions; + import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -43,14 +45,6 @@ public class ActiveGestureLog { */ public static final String INTENT_EXTRA_LOG_TRACE_ID = "INTENT_EXTRA_LOG_TRACE_ID"; - private static final int TYPE_ONE_OFF = 0; - private static final int TYPE_FLOAT = 1; - private static final int TYPE_INTEGER = 2; - private static final int TYPE_BOOL_TRUE = 3; - private static final int TYPE_BOOL_FALSE = 4; - private static final int TYPE_COMPOUND_STRING = 5; - private static final int TYPE_GESTURE_EVENT = 6; - private final EventLog[] logs; private int nextIndex; private int mCurrentLogId = 100; @@ -67,9 +61,12 @@ public class ActiveGestureLog { * execution. */ public void trackEvent(@Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { - addLog(TYPE_GESTURE_EVENT, "", 0, CompoundString.NO_OP, gestureEvent); + addLog(CompoundString.NO_OP, gestureEvent); } + /** + * Adds a log to be printed at log-dump-time. + */ public void addLog(String event) { addLog(event, null); } @@ -82,54 +79,35 @@ public class ActiveGestureLog { addLog(event, extras, null); } - public void addLog(CompoundString compoundString) { - if (compoundString == CompoundString.NO_OP) return; - addLog(TYPE_COMPOUND_STRING, "", 0, compoundString, null); - } - - public void addLog( - CompoundString compoundString, - @Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { - if (compoundString == CompoundString.NO_OP) { - trackEvent(gestureEvent); - return; - } - addLog(TYPE_COMPOUND_STRING, "", 0, compoundString, gestureEvent); - } - /** - * Adds a log and track the associated event for error detection. + * Adds a log to be printed at log-dump-time and track the associated event for error detection. * * @param gestureEvent GestureEvent representing the event being logged. */ public void addLog( String event, @Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { - addLog(TYPE_ONE_OFF, event, 0, CompoundString.NO_OP, gestureEvent); + addLog(new CompoundString(event), gestureEvent); } public void addLog( String event, int extras, @Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { - addLog(TYPE_INTEGER, event, extras, CompoundString.NO_OP, gestureEvent); + addLog(new CompoundString(event).append(": ").append(extras), gestureEvent); } public void addLog( String event, boolean extras, @Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { - addLog( - extras ? TYPE_BOOL_TRUE : TYPE_BOOL_FALSE, - event, - 0, - CompoundString.NO_OP, - gestureEvent); + addLog(new CompoundString(event).append(": ").append(extras), gestureEvent); } - private void addLog( - int type, - String event, - float extras, + public void addLog(CompoundString compoundString) { + addLog(compoundString, null); + } + + public void addLog( CompoundString compoundString, @Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) { EventLog lastEventLog = logs[(nextIndex + logs.length - 1) % logs.length]; @@ -137,7 +115,7 @@ public class ActiveGestureLog { EventLog eventLog = new EventLog(mCurrentLogId, mIsFullyGesturalNavMode); EventEntry eventEntry = new EventEntry(); - eventEntry.update(type, event, extras, compoundString, gestureEvent); + eventEntry.update(compoundString, gestureEvent); eventLog.eventEntries.add(eventEntry); logs[nextIndex] = eventLog; nextIndex = (nextIndex + 1) % logs.length; @@ -146,17 +124,17 @@ public class ActiveGestureLog { // Update the last EventLog List lastEventEntries = lastEventLog.eventEntries; - EventEntry lastEntry = lastEventEntries.size() > 0 + EventEntry lastEntry = !lastEventEntries.isEmpty() ? lastEventEntries.get(lastEventEntries.size() - 1) : null; // Update the last EventEntry if it's a duplicate - if (isEntrySame(lastEntry, type, event, extras, compoundString, gestureEvent)) { + if (isEntrySame(lastEntry, compoundString, gestureEvent)) { lastEntry.duplicateCount++; return; } EventEntry eventEntry = new EventEntry(); - eventEntry.update(type, event, extras, compoundString, gestureEvent); + eventEntry.update(compoundString, gestureEvent); lastEventEntries.add(eventEntry); } @@ -181,30 +159,14 @@ public class ActiveGestureLog { writer.println(prefix + "\tLogs for logId: " + eventLog.logId); for (EventEntry eventEntry : eventLog.eventEntries) { + if (eventEntry.mCompoundString.mIsNoOp) { + continue; + } date.setTime(eventEntry.time); - StringBuilder msg = new StringBuilder(prefix + "\t\t").append(sdf.format(date)) - .append(eventEntry.event); - switch (eventEntry.type) { - case TYPE_BOOL_FALSE: - msg.append(": false"); - break; - case TYPE_BOOL_TRUE: - msg.append(": true"); - break; - case TYPE_FLOAT: - msg.append(": ").append(eventEntry.extras); - break; - case TYPE_INTEGER: - msg.append(": ").append((int) eventEntry.extras); - break; - case TYPE_COMPOUND_STRING: - msg.append(eventEntry.mCompoundString); - break; - case TYPE_GESTURE_EVENT: - continue; - default: // fall out - } + StringBuilder msg = new StringBuilder(prefix + "\t\t") + .append(sdf.format(date)) + .append(eventEntry.mCompoundString); if (eventEntry.duplicateCount > 0) { msg.append(" & ").append(eventEntry.duplicateCount).append(" similar events"); } @@ -232,15 +194,9 @@ public class ActiveGestureLog { private boolean isEntrySame( EventEntry entry, - int type, - String event, - float extras, CompoundString compoundString, ActiveGestureErrorDetector.GestureEvent gestureEvent) { return entry != null - && entry.type == type - && entry.event.equals(event) - && Float.compare(entry.extras, extras) == 0 && entry.mCompoundString.equals(compoundString) && entry.gestureEvent == gestureEvent; } @@ -248,9 +204,6 @@ public class ActiveGestureLog { /** A single event entry. */ protected static class EventEntry { - private int type; - private String event; - private float extras; @NonNull private CompoundString mCompoundString; private ActiveGestureErrorDetector.GestureEvent gestureEvent; private long time; @@ -264,14 +217,8 @@ public class ActiveGestureLog { } private void update( - int type, - String event, - float extras, @NonNull CompoundString compoundString, ActiveGestureErrorDetector.GestureEvent gestureEvent) { - this.type = type; - this.event = event; - this.extras = extras; this.mCompoundString = compoundString; this.gestureEvent = gestureEvent; time = System.currentTimeMillis(); @@ -302,6 +249,7 @@ public class ActiveGestureLog { public static final CompoundString NO_OP = new CompoundString(); private final List mSubstrings; + private final List mArgs; private final boolean mIsNoOp; @@ -313,10 +261,12 @@ public class ActiveGestureLog { mIsNoOp = substring == null; if (mIsNoOp) { mSubstrings = null; + mArgs = null; return; } mSubstrings = new ArrayList<>(); mSubstrings.add(substring); + mArgs = new ArrayList<>(); } public CompoundString append(CompoundString substring) { @@ -338,19 +288,41 @@ public class ActiveGestureLog { } public CompoundString append(int num) { - if (mIsNoOp) { - return this; - } - mSubstrings.add(Integer.toString(num)); + mArgs.add(num); - return this; + return append("%d"); + } + + public CompoundString append(float num) { + mArgs.add(num); + + return append("%.2f"); + } + + public CompoundString append(double num) { + mArgs.add(num); + + return append("%.2f"); + } + + public CompoundString append(boolean bool) { + mArgs.add(bool); + + return append("%b"); + } + + public Object[] getArgs() { + return mArgs.toArray(); } @Override public String toString() { - if (mIsNoOp) { - return "ERROR: cannot use No-Op compound string"; - } + return String.format(toUnformattedString(), getArgs()); + } + + public String toUnformattedString() { + Preconditions.assertTrue(!mIsNoOp); + StringBuilder sb = new StringBuilder(); for (String substring : mSubstrings) { sb.append(substring); diff --git a/src/com/android/launcher3/util/Preconditions.java b/src/com/android/launcher3/util/Preconditions.java index 63d56e47ee..0e5ab9a763 100644 --- a/src/com/android/launcher3/util/Preconditions.java +++ b/src/com/android/launcher3/util/Preconditions.java @@ -51,6 +51,12 @@ public class Preconditions { } } + public static void assertTrue(boolean condition) { + if (FeatureFlags.IS_STUDIO_BUILD && !condition) { + throw new IllegalStateException(); + } + } + private static boolean isSameLooper(Looper looper) { return Looper.myLooper() == looper; }