Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0f45f66 authored by Haoran Zhang's avatar Haoran Zhang Committed by Android (Google) Code Review
Browse files

Merge "[Autofill Framework] Add some save related logging" into main

parents 90e59ff2 2348439d
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -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);
    }

+38 −2
Original line number Diff line number Diff line
@@ -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.
   */
@@ -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() {