summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java57
-rw-r--r--services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java40
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() {