From 4422472b23ce4ba7f4faaa4a3d24ae4a86244814 Mon Sep 17 00:00:00 2001 From: Simranjit Kohli Date: Fri, 12 May 2023 11:12:30 -0700 Subject: [PATCH] [Autofill PCC Metrics]: Update existing loggers Update existing loggers to accomodate fields for PCC metrics. Test: m Bug: 265037574 Change-Id: I18c18ea7542a6605150ff242bdf0aaa3c8e486cf --- .../autofill/FillResponseEventLogger.java | 36 ++++++-- .../PresentationStatsEventLogger.java | 87 ++++++++++++++++++- .../server/autofill/SaveEventLogger.java | 16 +++- 3 files changed, 129 insertions(+), 10 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/FillResponseEventLogger.java b/services/autofill/java/com/android/server/autofill/FillResponseEventLogger.java index 8f2ab714c4af1..ab46a6e27d848 100644 --- a/services/autofill/java/com/android/server/autofill/FillResponseEventLogger.java +++ b/services/autofill/java/com/android/server/autofill/FillResponseEventLogger.java @@ -17,16 +17,16 @@ package com.android.server.autofill; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__DIALOG; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__INLINE; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__MENU; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__UNKNOWN_AUTOFILL_DISPLAY_PRESENTATION_TYPE; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_RESULT__AUTHENTICATION_FAILURE; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_RESULT__AUTHENTICATION_RESULT_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_RESULT__AUTHENTICATION_SUCCESS; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_TYPE__AUTHENTICATION_TYPE_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_TYPE__DATASET_AUTHENTICATION; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__AUTHENTICATION_TYPE__FULL_AUTHENTICATION; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__DIALOG; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__INLINE; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__MENU; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__DISPLAY_PRESENTATION_TYPE__UNKNOWN_AUTOFILL_DISPLAY_PRESENTATION_TYPE; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__RESPONSE_STATUS__RESPONSE_STATUS_CANCELLED; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__RESPONSE_STATUS__RESPONSE_STATUS_FAILURE; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_FILL_RESPONSE_REPORTED__RESPONSE_STATUS__RESPONSE_STATUS_SESSION_DESTROYED; @@ -318,6 +318,24 @@ public final class FillResponseEventLogger { }); } + /** + * Set available_pcc_count. + */ + public void maybeSetAvailablePccCount(int val) { + mEventInternal.ifPresent(event -> { + event.mAvailablePccCount = val; + }); + } + + /** + * Set available_pcc_only_count. + */ + public void maybeSetAvailablePccOnlyCount(int val) { + mEventInternal.ifPresent(event -> { + event.mAvailablePccOnlyCount = val; + }); + } + /** * Log an AUTOFILL_FILL_RESPONSE_REPORTED event. @@ -344,7 +362,9 @@ public final class FillResponseEventLogger { + " mLatencyAuthenticationUiDisplayMillis=" + event.mLatencyAuthenticationUiDisplayMillis + " mLatencyDatasetDisplayMillis=" + event.mLatencyDatasetDisplayMillis + " mResponseStatus=" + event.mResponseStatus - + " mLatencyResponseProcessingMillis=" + event.mLatencyResponseProcessingMillis); + + " mLatencyResponseProcessingMillis=" + event.mLatencyResponseProcessingMillis + + " mAvailablePccCount=" + event.mAvailablePccCount + + " mAvailablePccOnlyCount=" + event.mAvailablePccOnlyCount); } FrameworkStatsLog.write( AUTOFILL_FILL_RESPONSE_REPORTED, @@ -361,7 +381,9 @@ public final class FillResponseEventLogger { event.mLatencyAuthenticationUiDisplayMillis, event.mLatencyDatasetDisplayMillis, event.mResponseStatus, - event.mLatencyResponseProcessingMillis); + event.mLatencyResponseProcessingMillis, + event.mAvailablePccCount, + event.mAvailablePccOnlyCount); mEventInternal = Optional.empty(); } @@ -379,6 +401,8 @@ public final class FillResponseEventLogger { int mLatencyDatasetDisplayMillis = 0; int mResponseStatus = RESPONSE_STATUS_UNKNOWN; int mLatencyResponseProcessingMillis = 0; + int mAvailablePccCount; + int mAvailablePccOnlyCount; FillResponseEventInternal() { } diff --git a/services/autofill/java/com/android/server/autofill/PresentationStatsEventLogger.java b/services/autofill/java/com/android/server/autofill/PresentationStatsEventLogger.java index ca743cbb18679..be31ce47109d2 100644 --- a/services/autofill/java/com/android/server/autofill/PresentationStatsEventLogger.java +++ b/services/autofill/java/com/android/server/autofill/PresentationStatsEventLogger.java @@ -46,6 +46,12 @@ import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_ import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__NONE_SHOWN_VIEW_CHANGED; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__NONE_SHOWN_VIEW_FOCUSED_BEFORE_FILL_DIALOG_RESPONSE; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__NONE_SHOWN_VIEW_FOCUS_CHANGED; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_NO_PCC; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PCC_DETECTION_ONLY; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PCC_DETECTION_PREFERRED_WITH_PROVIDER; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PROVIDER_DETECTION_ONLY; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PROVIDER_DETECTION_PREFERRED_WITH_PCC; +import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_UNKNOWN; import static com.android.server.autofill.Helper.sVerbose; import android.annotation.IntDef; @@ -116,6 +122,22 @@ public final class PresentationStatsEventLogger { public @interface AuthenticationResult { } + /** + * Reasons why the picked dataset was present. These are wrappers around + * {@link com.android.os.AtomsProto.AutofillPresentationEventReported.DatasetPickedReason}. + * This enum is similar to {@link android.service.autofill.Dataset.DatasetEligibleReason} + */ + @IntDef(prefix = {"PICK_REASON"}, value = { + PICK_REASON_UNKNOWN, + PICK_REASON_NO_PCC, + PICK_REASON_PROVIDER_DETECTION_ONLY, + PICK_REASON_PROVIDER_DETECTION_PREFERRED_WITH_PCC, + PICK_REASON_PCC_DETECTION_ONLY, + PICK_REASON_PCC_DETECTION_PREFERRED_WITH_PROVIDER, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface DatasetPickedReason {} + public static final int NOT_SHOWN_REASON_ANY_SHOWN = AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__ANY_SHOWN; public static final int NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED = @@ -151,6 +173,18 @@ public final class PresentationStatsEventLogger { public static final int AUTHENTICATION_RESULT_FAILURE = AUTOFILL_PRESENTATION_EVENT_REPORTED__AUTHENTICATION_RESULT__AUTHENTICATION_FAILURE; + public static final int PICK_REASON_UNKNOWN = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_UNKNOWN; + public static final int PICK_REASON_NO_PCC = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_NO_PCC; + public static final int PICK_REASON_PROVIDER_DETECTION_ONLY = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PROVIDER_DETECTION_ONLY; + public static final int PICK_REASON_PROVIDER_DETECTION_PREFERRED_WITH_PCC = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PROVIDER_DETECTION_PREFERRED_WITH_PCC; + public static final int PICK_REASON_PCC_DETECTION_ONLY = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PCC_DETECTION_ONLY; + public static final int PICK_REASON_PCC_DETECTION_PREFERRED_WITH_PROVIDER = + AUTOFILL_PRESENTATION_EVENT_REPORTED__SELECTED_DATASET_PICKED_REASON__PICK_REASON_PCC_DETECTION_PREFERRED_WITH_PROVIDER; private final int mSessionId; private Optional mEventInternal; @@ -375,6 +409,46 @@ public final class PresentationStatsEventLogger { }); } + /** + * Set available_pcc_count. + */ + public void maybeSetAvailablePccCount(int val) { + mEventInternal.ifPresent(event -> { + event.mAvailablePccCount = val; + }); + } + + /** + * Set available_pcc_only_count. + */ + public void maybeSetAvailablePccOnlyCount(int val) { + mEventInternal.ifPresent(event -> { + event.mAvailablePccOnlyCount = val; + }); + } + + /** + * Set selected_dataset_picked_reason. + */ + public void maybeSetSelectedDatasetPickReason(@Dataset.DatasetEligibleReason int val) { + mEventInternal.ifPresent(event -> { + event.mSelectedDatasetPickedReason = convertDatasetPickReason(val); + }); + } + + private int convertDatasetPickReason(@Dataset.DatasetEligibleReason int val) { + switch (val) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + return val; + } + return PICK_REASON_UNKNOWN; + } + public void logAndEndEvent() { if (!mEventInternal.isPresent()) { @@ -410,7 +484,10 @@ public final class PresentationStatsEventLogger { + " mAuthenticationResult=" + event.mAuthenticationResult + " mLatencyAuthenticationUiDisplayMillis=" + event.mLatencyAuthenticationUiDisplayMillis - + " mLatencyDatasetDisplayMillis=" + event.mLatencyDatasetDisplayMillis); + + " mLatencyDatasetDisplayMillis=" + event.mLatencyDatasetDisplayMillis + + " mAvailablePccCount=" + event.mAvailablePccCount + + " mAvailablePccOnlyCount=" + event.mAvailablePccOnlyCount + + " mSelectedDatasetPickedReason=" + event.mSelectedDatasetPickedReason); } // TODO(b/234185326): Distinguish empty responses from other no presentation reasons. @@ -443,7 +520,10 @@ public final class PresentationStatsEventLogger { event.mAuthenticationType, event.mAuthenticationResult, event.mLatencyAuthenticationUiDisplayMillis, - event.mLatencyDatasetDisplayMillis); + event.mLatencyDatasetDisplayMillis, + event.mAvailablePccCount, + event.mAvailablePccOnlyCount, + event.mSelectedDatasetPickedReason); mEventInternal = Optional.empty(); } @@ -472,6 +552,9 @@ public final class PresentationStatsEventLogger { int mAuthenticationResult = AUTHENTICATION_RESULT_UNKNOWN; int mLatencyAuthenticationUiDisplayMillis = -1; int mLatencyDatasetDisplayMillis = -1; + int mAvailablePccCount = -1; + int mAvailablePccOnlyCount = -1; + @DatasetPickedReason int mSelectedDatasetPickedReason = PICK_REASON_UNKNOWN; PresentationStatsEventInternal() {} } diff --git a/services/autofill/java/com/android/server/autofill/SaveEventLogger.java b/services/autofill/java/com/android/server/autofill/SaveEventLogger.java index e5435c2869fdc..28e8e3031a14d 100644 --- a/services/autofill/java/com/android/server/autofill/SaveEventLogger.java +++ b/services/autofill/java/com/android/server/autofill/SaveEventLogger.java @@ -251,6 +251,15 @@ public final class SaveEventLogger { }); } + /** + * Set is_framework_created_save_info as long as mEventInternal presents. + */ + public void maybeSetIsFrameworkCreatedSaveInfo(boolean val) { + mEventInternal.ifPresent(event -> { + event.mIsFrameworkCreatedSaveInfo = val; + }); + } + /** * Log an AUTOFILL_SAVE_EVENT_REPORTED event. */ @@ -277,7 +286,8 @@ public final class SaveEventLogger { + " mIsSaved=" + event.mIsSaved + " mLatencySaveUiDisplayMillis=" + event.mLatencySaveUiDisplayMillis + " mLatencySaveRequestMillis=" + event.mLatencySaveRequestMillis - + " mLatencySaveFinishMillis=" + event.mLatencySaveFinishMillis); + + " mLatencySaveFinishMillis=" + event.mLatencySaveFinishMillis + + " mIsFrameworkCreatedSaveInfo=" + event.mIsFrameworkCreatedSaveInfo); } FrameworkStatsLog.write( AUTOFILL_SAVE_EVENT_REPORTED, @@ -295,7 +305,8 @@ public final class SaveEventLogger { event.mIsSaved, event.mLatencySaveUiDisplayMillis, event.mLatencySaveRequestMillis, - event.mLatencySaveFinishMillis); + event.mLatencySaveFinishMillis, + event.mIsFrameworkCreatedSaveInfo); mEventInternal = Optional.empty(); } @@ -314,6 +325,7 @@ public final class SaveEventLogger { long mLatencySaveUiDisplayMillis = 0; long mLatencySaveRequestMillis = 0; long mLatencySaveFinishMillis = 0; + boolean mIsFrameworkCreatedSaveInfo = false; SaveEventInternal() { }