From d7af3cc784faea5dd88221bd21f0bc8b127db630 Mon Sep 17 00:00:00 2001 From: Thiru Ramasamy Date: Thu, 3 Mar 2022 16:39:08 -0800 Subject: [PATCH] Add support for logging multiple attributes per item. This change will make use of new attributes field in LauncherAtoms to log multiple item attributes by converting them int array and then writes proto bytes into statsd. Test: wwdebug && wwlogcat http://gpaste/5985977337118720 Change-Id: Iabda0b14100558f5625d01ba829d3ad96a6419fc --- protos/launcher_atom.proto | 11 ++++++- .../logging/StatsLogCompatManager.java | 29 +++++++++++-------- .../launcher3/model/data/FolderInfo.java | 2 +- .../model/data/LauncherAppWidgetInfo.java | 2 +- .../widget/PendingAddWidgetInfo.java | 2 +- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto index 84892f190a..8ce23eaba7 100644 --- a/protos/launcher_atom.proto +++ b/protos/launcher_atom.proto @@ -23,6 +23,8 @@ import "launcher_atom_extension.proto"; // // ItemInfos message ItemInfo { + reserved 8; + oneof Item { Application application = 1; Task task = 2; @@ -42,7 +44,14 @@ message ItemInfo { optional ContainerInfo container_info = 7; // Stores the origin of the Item - optional Attribute attribute = 8; + repeated Attribute item_attributes = 12; +} + +message LauncherAttributes{ + + // Integer value of item attribute enum + // (e.g. SUGGESTED_LABEL, ALL_APPS_SEARCH_RESULT_SETTING etc) + repeated int32 item_attributes = 1; } // Represents various launcher surface where items are placed. diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java index 1b6f39eb68..bd726009aa 100644 --- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java @@ -42,10 +42,12 @@ import androidx.slice.SliceItem; import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; import com.android.launcher3.logger.LauncherAtom; +import com.android.launcher3.logger.LauncherAtom.Attribute; import com.android.launcher3.logger.LauncherAtom.ContainerInfo; import com.android.launcher3.logger.LauncherAtom.FolderContainer.ParentContainerCase; import com.android.launcher3.logger.LauncherAtom.FolderIcon; import com.android.launcher3.logger.LauncherAtom.FromState; +import com.android.launcher3.logger.LauncherAtom.LauncherAttributes; import com.android.launcher3.logger.LauncherAtom.ToState; import com.android.launcher3.logger.LauncherAtomExtensions.DeviceSearchResultContainer; import com.android.launcher3.logger.LauncherAtomExtensions.DeviceSearchResultContainer.SearchAttributes; @@ -88,7 +90,6 @@ public class StatsLogCompatManager extends StatsLogManager { private static final int FOLDER_HIERARCHY_OFFSET = 100; private static final int SEARCH_RESULT_HIERARCHY_OFFSET = 200; private static final int EXTENDED_CONTAINERS_HIERARCHY_OFFSET = 300; - private static final int ATTRIBUTE_MULTIPLIER = 100; /** * Flags for converting SearchAttribute to integer value. @@ -128,8 +129,7 @@ public class StatsLogCompatManager extends StatsLogManager { } SysUiStatsLog.write(SysUiStatsLog.LAUNCHER_SNAPSHOT, LAUNCHER_WORKSPACE_SNAPSHOT.getId() /* event_id */, - info.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER - + info.getItemCase().getNumber() /* target_id */, + info.getItemCase().getNumber() /* target_id */, instanceId.getId() /* instance_id */, 0 /* uid */, getPackageName(info) /* package_name */, @@ -142,15 +142,22 @@ public class StatsLogCompatManager extends StatsLogManager { getParentPageId(info) /* page_id_parent */, getHierarchy(info) /* hierarchy */, info.getIsWork() /* is_work_profile */, - info.getAttribute().getNumber() /* origin */, + 0 /* origin */, getCardinality(info) /* cardinality */, info.getWidget().getSpanX(), info.getWidget().getSpanY(), getFeatures(info), - null /* attributes */ + getAttributes(info) /* attributes */ ); } + private static byte[] getAttributes(LauncherAtom.ItemInfo itemInfo) { + LauncherAttributes.Builder responseBuilder = LauncherAttributes.newBuilder(); + itemInfo.getItemAttributesList().stream().map(Attribute::getNumber).forEach( + responseBuilder::addItemAttributes); + return responseBuilder.build().toByteArray(); + } + /** * Builds {@link StatsEvent} from {@link LauncherAtom.ItemInfo}. Used for pulled atom callback * implementation. @@ -160,8 +167,7 @@ public class StatsLogCompatManager extends StatsLogManager { return SysUiStatsLog.buildStatsEvent( SysUiStatsLog.LAUNCHER_LAYOUT_SNAPSHOT, // atom ID, LAUNCHER_WORKSPACE_SNAPSHOT.getId(), // event_id = 1; - info.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER - + info.getItemCase().getNumber(), // item_id = 2; + info.getItemCase().getNumber(), // item_id = 2; instanceId == null ? 0 : instanceId.getId(), //instance_id = 3; 0, //uid = 4 [(is_uid) = true]; getPackageName(info), // package_name = 5; @@ -174,11 +180,11 @@ public class StatsLogCompatManager extends StatsLogManager { getParentPageId(info), //page_id_parent = 12 [default = -2]; getHierarchy(info), // container_id = 13; info.getIsWork(), // is_work_profile = 14; - info.getAttribute().getNumber(), // attribute_id = 15; + 0, // attribute_id = 15; getCardinality(info), // cardinality = 16; info.getWidget().getSpanX(), // span_x = 17 [default = 1]; info.getWidget().getSpanY(), // span_y = 18 [default = 1]; - null /* attributes */ + getAttributes(info) /* attributes */ ); } @@ -401,8 +407,7 @@ public class StatsLogCompatManager extends StatsLogManager { null /* launcher extensions, deprecated */, false /* quickstep_enabled, deprecated */, event.getId() /* event_id */, - atomInfo.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER - + atomInfo.getItemCase().getNumber() /* target_id */, + atomInfo.getItemCase().getNumber() /* target_id */, instanceId.getId() /* instance_id TODO */, 0 /* uid TODO */, getPackageName(atomInfo) /* package_name */, @@ -422,7 +427,7 @@ public class StatsLogCompatManager extends StatsLogManager { getCardinality(atomInfo) /* cardinality */, getFeatures(atomInfo) /* features */, getSearchAttributes(atomInfo) /* searchAttributes */, - null /* attributes */ + getAttributes(atomInfo) /* attributes */ ); } } diff --git a/src/com/android/launcher3/model/data/FolderInfo.java b/src/com/android/launcher3/model/data/FolderInfo.java index cd2ef35a66..efebce342f 100644 --- a/src/com/android/launcher3/model/data/FolderInfo.java +++ b/src/com/android/launcher3/model/data/FolderInfo.java @@ -217,7 +217,7 @@ public class FolderInfo extends ItemInfo { return getDefaultItemInfoBuilder() .setFolderIcon(folderIcon) .setRank(rank) - .setAttribute(getLabelState().mLogAttribute) + .addItemAttributes(getLabelState().mLogAttribute) .setContainerInfo(getContainerInfo()) .build(); } diff --git a/src/com/android/launcher3/model/data/LauncherAppWidgetInfo.java b/src/com/android/launcher3/model/data/LauncherAppWidgetInfo.java index 0283d5f398..e57a895ddd 100644 --- a/src/com/android/launcher3/model/data/LauncherAppWidgetInfo.java +++ b/src/com/android/launcher3/model/data/LauncherAppWidgetInfo.java @@ -288,7 +288,7 @@ public class LauncherAppWidgetInfo extends ItemInfo { LauncherAtom.ItemInfo info = super.buildProto(folderInfo); return info.toBuilder() .setWidget(info.getWidget().toBuilder().setWidgetFeatures(widgetFeatures)) - .setAttribute(getAttribute(sourceContainer)) + .addItemAttributes(getAttribute(sourceContainer)) .build(); } } diff --git a/src/com/android/launcher3/widget/PendingAddWidgetInfo.java b/src/com/android/launcher3/widget/PendingAddWidgetInfo.java index cbec6427a6..470a800366 100644 --- a/src/com/android/launcher3/widget/PendingAddWidgetInfo.java +++ b/src/com/android/launcher3/widget/PendingAddWidgetInfo.java @@ -70,7 +70,7 @@ public class PendingAddWidgetInfo extends PendingAddItemInfo { public LauncherAtom.ItemInfo buildProto(FolderInfo folderInfo) { LauncherAtom.ItemInfo info = super.buildProto(folderInfo); return info.toBuilder() - .setAttribute(LauncherAppWidgetInfo.getAttribute(sourceContainer)) + .addItemAttributes(LauncherAppWidgetInfo.getAttribute(sourceContainer)) .build(); } }