diff options
| author | 2024-05-09 19:04:29 +0000 | |
|---|---|---|
| committer | 2024-06-07 16:45:25 +0000 | |
| commit | 2348439d5f473ff9cfcc10738b43cbf2429af92c (patch) | |
| tree | e4a1181b5c46d3f238ab5bb412f85631fbe13b10 | |
| parent | f8e96bdd308418a3cd622e45b49f4503c15a6467 (diff) | |
[Autofill Framework] Add some save related logging
This change adds three log into session comit logger:
1. How many save infos there are in this session
2. How many save data types there are in this session
3. Whether the last fill response has save info
Currently framework is only checking the last fill response for save.
These logs added are for measuring how many benefits it brings for
framework to check previous save info also and whether it benefits to
show save dialogs for different types of data.
Autofill CTS module passes except a known failure:
https://android-build.corp.google.com/test_investigate/?invocationId=I21000010284871536
Bug: b/338600483
Test: atest CtsAutoFillServiceTestCases && local validation with debug
log
Change-Id: I30cd99dacd4d49b021ba66b560c4bce5a66609a3
| -rw-r--r-- | services/autofill/java/com/android/server/autofill/Session.java | 57 | ||||
| -rw-r--r-- | services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java | 40 |
2 files changed, 95 insertions, 2 deletions
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index c46464b7cac8..31b567ab3750 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -3222,6 +3222,58 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return saveInfo == null ? 0 : saveInfo.getFlags(); } + static class SaveInfoStats { + public int saveInfoCount; + public int saveDataTypeCount; + } + + /** + * Get statistic information of save info in current session. Specifically + * 1. how many save info the current session has. + * 2. How many distinct save data types current session has. + * + * @return SaveInfoStats returns the above two number in a SaveInfoStats object + */ + @GuardedBy("mLock") + private SaveInfoStats getSaveInfoStatsLocked() { + SaveInfoStats retSaveInfoStats = new SaveInfoStats(); + retSaveInfoStats.saveInfoCount = -1; + retSaveInfoStats.saveDataTypeCount = -1; + + if (mContexts == null) { + if (sVerbose) { + Slog.v(TAG, "getSaveInfoStatsLocked(): mContexts is null"); + } + } else if (mResponses == null) { + // Happens when the activity / session was finished before the service replied, or + // when the service cannot autofill it (and returned a null response). + if (sVerbose) { + Slog.v(TAG, "getSaveInfoStatsLocked(): mResponses is null"); + } + return retSaveInfoStats; + } else { + int numSaveInfos = 0; + int numSaveDataTypes = 0; + ArraySet<Integer> saveDataTypeSeen = new ArraySet<>(); + final int numResponses = mResponses.size(); + for (int responseNum = 0; responseNum < numResponses; responseNum++) { + final FillResponse response = mResponses.valueAt(responseNum); + if (response != null && response.getSaveInfo() != null) { + numSaveInfos += 1; + int saveDataType = response.getSaveInfo().getType(); + if (!saveDataTypeSeen.contains(saveDataType)) { + saveDataTypeSeen.add(saveDataType); + numSaveDataTypes += 1; + } + } + } + retSaveInfoStats.saveInfoCount = numSaveInfos; + retSaveInfoStats.saveDataTypeCount = numSaveDataTypes; + } + + return retSaveInfoStats; + } + /** * Generates a {@link android.service.autofill.FillEventHistory.Event#TYPE_CONTEXT_COMMITTED} * when necessary. @@ -3258,6 +3310,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mSessionCommittedEventLogger.maybeSetCommitReason(commitReason); mSessionCommittedEventLogger.maybeSetRequestCount(mRequestCount); + SaveInfoStats saveInfoStats = getSaveInfoStatsLocked(); + mSessionCommittedEventLogger.maybeSetSaveInfoCount(saveInfoStats.saveInfoCount); + mSessionCommittedEventLogger.maybeSetSaveDataTypeCount(saveInfoStats.saveDataTypeCount); + mSessionCommittedEventLogger.maybeSetLastFillResponseHasSaveInfo( + getSaveInfoLocked() != null); mSaveEventLogger.maybeSetSaveUiNotShownReason(NO_SAVE_REASON_NONE); } diff --git a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java index 1be8548c788f..8f3c8803154d 100644 --- a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java +++ b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java @@ -94,6 +94,33 @@ public final class SessionCommittedEventLogger { } /** + * Set how many save infos there are in current session as long as mEventInternal presents. + */ + public void maybeSetSaveInfoCount(int saveInfoCount) { + mEventInternal.ifPresent(event -> { + event.mSaveInfoCount = saveInfoCount; + }); + } + + /** + * Set how many save data types there are in current session as long as mEventInternal presents. + */ + public void maybeSetSaveDataTypeCount(int saveDataTypeCount) { + mEventInternal.ifPresent(event -> { + event.mSaveDataTypeCount = saveDataTypeCount; + }); + } + + /** + * Set whether last fill response in session has save info as long as mEventInternal presents. + */ + public void maybeSetLastFillResponseHasSaveInfo(boolean lastFillResponseHasSaveInfo) { + mEventInternal.ifPresent(event -> { + event.mLastFillResponseHasSaveInfo = lastFillResponseHasSaveInfo; + }); + } + + /** * Log an AUTOFILL_SESSION_COMMITTED event. */ public void logAndEndEvent() { @@ -109,7 +136,10 @@ public final class SessionCommittedEventLogger { + " mRequestCount=" + event.mRequestCount + " mCommitReason=" + event.mCommitReason + " mSessionDurationMillis=" + event.mSessionDurationMillis - + " mServiceUid=" + event.mServiceUid); + + " mServiceUid=" + event.mServiceUid + + " mSaveInfoCount=" + event.mSaveInfoCount + + " mSaveDataTypeCount=" + event.mSaveDataTypeCount + + " mLastFillResponseHasSaveInfo=" + event.mLastFillResponseHasSaveInfo); } FrameworkStatsLog.write( AUTOFILL_SESSION_COMMITTED, @@ -118,7 +148,10 @@ public final class SessionCommittedEventLogger { event.mRequestCount, event.mCommitReason, event.mSessionDurationMillis, - event.mServiceUid); + event.mServiceUid, + event.mSaveInfoCount, + event.mSaveDataTypeCount, + event.mLastFillResponseHasSaveInfo); mEventInternal = Optional.empty(); } @@ -127,6 +160,9 @@ public final class SessionCommittedEventLogger { int mRequestCount = 0; int mCommitReason = COMMIT_REASON_UNKNOWN; long mSessionDurationMillis = 0; + int mSaveInfoCount = -1; + int mSaveDataTypeCount = -1; + boolean mLastFillResponseHasSaveInfo = false; int mServiceUid = -1; SessionCommittedEventInternal() { |