diff options
| -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 aa67ffed0b2d..e84220d4e20c 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -3215,6 +3215,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. @@ -3251,6 +3303,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() { |