Loading services/autofill/java/com/android/server/autofill/Session.java +57 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); } Loading services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java +38 −2 Original line number Diff line number Diff line Loading @@ -93,6 +93,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. */ Loading @@ -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, Loading @@ -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(); } Loading @@ -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() { Loading Loading
services/autofill/java/com/android/server/autofill/Session.java +57 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); } Loading
services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java +38 −2 Original line number Diff line number Diff line Loading @@ -93,6 +93,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. */ Loading @@ -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, Loading @@ -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(); } Loading @@ -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() { Loading