diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java index 88895602dc..a950597e21 100644 --- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java @@ -22,6 +22,8 @@ import static com.android.launcher3.logger.LauncherAtom.ItemInfo.ItemCase.WIDGET import android.content.Context; import android.util.Log; +import androidx.annotation.Nullable; + import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; import com.android.launcher3.logger.LauncherAtom; @@ -43,9 +45,9 @@ import java.util.ArrayList; * This class calls StatsLog compile time generated methods. * * To see if the logs are properly sent to statsd, execute following command. - * $ adb root && adb shell statsd - * $ adb shell cmd stats print-logs - * $ adb logcat | grep statsd OR $ adb logcat -b stats + * $ wwdebug (to turn on the logcat printout) + * $ wwlogcat (see logcat with grep filter on) + * $ statsd_testdrive (see how ww is writing the proto to statsd buffer) */ public class StatsLogCompatManager extends StatsLogManager { @@ -54,10 +56,8 @@ public class StatsLogCompatManager extends StatsLogManager { private static Context sContext; - private static final int DEFAULT_WIDGET_SPAN_XY = 1; - private static final int DEFAULT_WORKSPACE_GRID_XY = -1; - private static final int DEFAULT_PAGE_INDEX = -2; private static final InstanceId DEFAULT_INSTANCE_ID = InstanceId.fakeInstanceId(0); + private static final int FOLDER_HIERARCHY_OFFSET = 100; public StatsLogCompatManager(Context context) { sContext = context; @@ -83,19 +83,22 @@ public class StatsLogCompatManager extends StatsLogManager { * Logs an event and accompanying {@link ItemInfo}. */ @Override - public void log(LauncherEvent event, LauncherAtom.ItemInfo itemInfo) { - log(event, DEFAULT_INSTANCE_ID, itemInfo); + public void log(LauncherEvent event, @Nullable LauncherAtom.ItemInfo info) { + logInternal(event, DEFAULT_INSTANCE_ID, info != null ? info + : LauncherAtom.ItemInfo.getDefaultInstance(), + SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__HOME, + SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND); } /** * Logs an event and accompanying {@link InstanceId} and {@link LauncherAtom.ItemInfo}. */ - @Override - public void log(LauncherEvent event, InstanceId instanceId, LauncherAtom.ItemInfo itemInfo) { + private void logInternal(LauncherEvent event, InstanceId instanceId, + LauncherAtom.ItemInfo info, int startState, int endState) { if (IS_VERBOSE) { Log.d(TAG, instanceId == DEFAULT_INSTANCE_ID - ? String.format("\n%s\n%s", event.name(), itemInfo) - : String.format("%s(InstanceId:%s)\n%s", event.name(), instanceId, itemInfo)); + ? String.format("\n%s\n%s", event.name(), info) + : String.format("%s(InstanceId:%s)\n%s", event.name(), instanceId, info)); } if (!Utilities.ATLEAST_R) { @@ -105,25 +108,25 @@ public class StatsLogCompatManager extends StatsLogManager { SysUiStatsLog.write( SysUiStatsLog.LAUNCHER_EVENT, SysUiStatsLog.LAUNCHER_UICHANGED__ACTION__DEFAULT_ACTION /* deprecated */, - SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__HOME /* TODO */, - SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND /* TODO */, + startState, + endState, null /* launcher extensions, deprecated */, false /* quickstep_enabled, deprecated */, event.getId() /* event_id */, - itemInfo.getItemCase().getNumber() /* target_id */, + info.getItemCase().getNumber() /* target_id */, instanceId.getId() /* instance_id TODO */, 0 /* uid TODO */, - getPackageName(itemInfo) /* package_name */, - getComponentName(itemInfo) /* component_name */, - getGridX(itemInfo, false) /* grid_x */, - getGridY(itemInfo, false) /* grid_y */, - getPageId(itemInfo, false) /* page_id */, - getGridX(itemInfo, true) /* grid_x_parent */, - getGridY(itemInfo, true) /* grid_y_parent */, - getPageId(itemInfo, true) /* page_id_parent */, - getHierarchy(itemInfo) /* hierarchy */, - itemInfo.getIsWork() /* is_work_profile */, - itemInfo.getRank() /* rank */, + getPackageName(info) /* package_name */, + getComponentName(info) /* component_name */, + getGridX(info, false) /* grid_x */, + getGridY(info, false) /* grid_y */, + getPageId(info, false) /* page_id */, + getGridX(info, true) /* grid_x_parent */, + getGridY(info, true) /* grid_y_parent */, + getPageId(info, true) /* page_id_parent */, + getHierarchy(info) /* hierarchy */, + info.getIsWork() /* is_work_profile */, + info.getRank() /* rank */, 0 /* fromState */, 0 /* toState */, null /* edittext */, @@ -164,144 +167,104 @@ public class StatsLogCompatManager extends StatsLogManager { } } - private static void writeSnapshot(LauncherAtom.ItemInfo itemInfo) { + private static void writeSnapshot(LauncherAtom.ItemInfo info) { if (IS_VERBOSE) { - Log.d(TAG, "\nwriteSnapshot:" + itemInfo); + Log.d(TAG, "\nwriteSnapshot:" + info); } if (!Utilities.ATLEAST_R) { return; } SysUiStatsLog.write(SysUiStatsLog.LAUNCHER_SNAPSHOT, 0 /* event_id */, - itemInfo.getItemCase().getNumber() /* target_id */, + info.getItemCase().getNumber() /* target_id */, 0 /* instance_id */, 0 /* uid */, - getPackageName(itemInfo) /* package_name */, - getComponentName(itemInfo) /* component_name */, - getGridX(itemInfo, false) /* grid_x */, - getGridY(itemInfo, false) /* grid_y */, - getPageId(itemInfo, false) /* page_id */, - getGridX(itemInfo, true) /* grid_x_parent */, - getGridY(itemInfo, true) /* grid_y_parent */, - getPageId(itemInfo, true) /* page_id_parent */, - getHierarchy(itemInfo) /* hierarchy */, - itemInfo.getIsWork() /* is_work_profile */, + getPackageName(info) /* package_name */, + getComponentName(info) /* component_name */, + getGridX(info, false) /* grid_x */, + getGridY(info, false) /* grid_y */, + getPageId(info, false) /* page_id */, + getGridX(info, true) /* grid_x_parent */, + getGridY(info, true) /* grid_y_parent */, + getPageId(info, true) /* page_id_parent */, + getHierarchy(info) /* hierarchy */, + info.getIsWork() /* is_work_profile */, 0 /* origin TODO */, 0 /* cardinality */, - getSpanX(itemInfo), - getSpanY(itemInfo)); + info.getWidget().getSpanX(), + info.getWidget().getSpanY()); } - private static int getSpanX(LauncherAtom.ItemInfo atomInfo) { - if (atomInfo.getItemCase() != WIDGET) { - return DEFAULT_WIDGET_SPAN_XY; - } - return atomInfo.getWidget().getSpanX(); - } - - private static int getSpanY(LauncherAtom.ItemInfo atomInfo) { - if (atomInfo.getItemCase() != WIDGET) { - return DEFAULT_WIDGET_SPAN_XY; - } - return atomInfo.getWidget().getSpanY(); - } - - private static String getPackageName(LauncherAtom.ItemInfo atomInfo) { - switch (atomInfo.getItemCase()) { + private static String getPackageName(LauncherAtom.ItemInfo info) { + switch (info.getItemCase()) { case APPLICATION: - return atomInfo.getApplication().getPackageName(); + return info.getApplication().getPackageName(); case SHORTCUT: - return atomInfo.getShortcut().getShortcutName(); + return info.getShortcut().getShortcutName(); case WIDGET: - return atomInfo.getWidget().getPackageName(); + return info.getWidget().getPackageName(); case TASK: - return atomInfo.getTask().getPackageName(); + return info.getTask().getPackageName(); default: return null; } } - private static String getComponentName(LauncherAtom.ItemInfo atomInfo) { - switch (atomInfo.getItemCase()) { + private static String getComponentName(LauncherAtom.ItemInfo info) { + switch (info.getItemCase()) { case APPLICATION: - return atomInfo.getApplication().getComponentName(); + return info.getApplication().getComponentName(); case SHORTCUT: - return atomInfo.getShortcut().getShortcutName(); + return info.getShortcut().getShortcutName(); case WIDGET: - return atomInfo.getWidget().getComponentName(); + return info.getWidget().getComponentName(); case TASK: - return atomInfo.getTask().getComponentName(); + return info.getTask().getComponentName(); default: return null; } } private static int getGridX(LauncherAtom.ItemInfo info, boolean parent) { - switch (info.getContainerInfo().getContainerCase()) { - case WORKSPACE: - if (parent) { - return DEFAULT_WORKSPACE_GRID_XY; - } else { - return info.getContainerInfo().getWorkspace().getGridX(); - } - case FOLDER: - if (parent) { - switch (info.getContainerInfo().getFolder().getParentContainerCase()) { - case WORKSPACE: - return info.getContainerInfo().getFolder().getWorkspace().getGridX(); - default: - return DEFAULT_WORKSPACE_GRID_XY; - } - } else { - return info.getContainerInfo().getFolder().getGridX(); - } - default: - return DEFAULT_WORKSPACE_GRID_XY; + if (info.getContainerInfo().getContainerCase() == FOLDER) { + if (parent) { + return info.getContainerInfo().getFolder().getWorkspace().getGridX(); + } else { + return info.getContainerInfo().getFolder().getGridX(); + } + } else { + return info.getContainerInfo().getWorkspace().getGridX(); } } private static int getGridY(LauncherAtom.ItemInfo info, boolean parent) { - switch (info.getContainerInfo().getContainerCase()) { - case WORKSPACE: - if (parent) { - return DEFAULT_WORKSPACE_GRID_XY; - } else { - return info.getContainerInfo().getWorkspace().getGridY(); - } - case FOLDER: - if (parent) { - switch (info.getContainerInfo().getFolder().getParentContainerCase()) { - case WORKSPACE: - return info.getContainerInfo().getFolder().getWorkspace().getGridY(); - default: - return DEFAULT_WORKSPACE_GRID_XY; - } - } else { - return info.getContainerInfo().getFolder().getGridY(); - } - default: - return DEFAULT_WORKSPACE_GRID_XY; + if (info.getContainerInfo().getContainerCase() == FOLDER) { + if (parent) { + return info.getContainerInfo().getFolder().getWorkspace().getGridY(); + } else { + return info.getContainerInfo().getFolder().getGridY(); + } + } else { + return info.getContainerInfo().getWorkspace().getGridY(); } } private static int getPageId(LauncherAtom.ItemInfo info, boolean parent) { - switch (info.getContainerInfo().getContainerCase()) { - case HOTSEAT: - return info.getContainerInfo().getHotseat().getIndex(); - case WORKSPACE: - return info.getContainerInfo().getWorkspace().getPageIndex(); - default: - return DEFAULT_PAGE_INDEX; + if (info.getContainerInfo().getContainerCase() == FOLDER) { + if (parent) { + return info.getContainerInfo().getFolder().getWorkspace().getPageIndex(); + } else { + return info.getContainerInfo().getFolder().getPageIndex(); + } + } else { + return info.getContainerInfo().getWorkspace().getPageIndex(); } } - /** - * - */ private static int getHierarchy(LauncherAtom.ItemInfo info) { - // TODO if (info.getContainerInfo().getContainerCase() == FOLDER) { - return info.getContainerInfo().getFolder().getParentContainerCase().getNumber() + 100; + return info.getContainerInfo().getFolder().getParentContainerCase().getNumber() + + FOLDER_HIERARCHY_OFFSET; } else { return info.getContainerInfo().getContainerCase().getNumber(); } diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java index 475305f65d..4c2c79d6dd 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -17,6 +17,8 @@ package com.android.launcher3.logging; import android.content.Context; +import androidx.annotation.Nullable; + import com.android.launcher3.R; import com.android.launcher3.logger.LauncherAtom.ItemInfo; import com.android.launcher3.logging.StatsLogUtils.LogStateProvider; @@ -125,13 +127,13 @@ public class StatsLogManager implements ResourceBasedOverride { /** * Logs an event and accompanying {@link ItemInfo}. */ - public void log(LauncherEvent event, ItemInfo itemInfo) { + public void log(LauncherEvent event, @Nullable ItemInfo info) { } /** * Logs an event and accompanying {@link InstanceId} and {@link ItemInfo}. */ - public void log(LauncherEvent event, InstanceId instanceId, ItemInfo itemInfo) { + public void log(LauncherEvent event, InstanceId instanceId, @Nullable ItemInfo info) { } /**