diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java index b669d981dcb98..f730ee3805dcd 100644 --- a/services/core/java/com/android/server/content/ContentService.java +++ b/services/core/java/com/android/server/content/ContentService.java @@ -77,6 +77,7 @@ import com.android.internal.os.BackgroundThread; import com.android.internal.os.BinderDeathDispatcher; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DumpUtils; +import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -1493,11 +1494,62 @@ public final class ContentService extends IContentService.Stub { return ContentResolver.SYNC_EXEMPTION_PROMOTE_BUCKET_WITH_TEMP; } if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND || isUidActive) { + FrameworkStatsLog.write(FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED, + callingUid, getProcStateForStatsd(procState), isUidActive); return ContentResolver.SYNC_EXEMPTION_PROMOTE_BUCKET; } return ContentResolver.SYNC_EXEMPTION_NONE; } + private int getProcStateForStatsd(int procState) { + switch (procState) { + case ActivityManager.PROCESS_STATE_UNKNOWN: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__UNKNOWN; + case ActivityManager.PROCESS_STATE_PERSISTENT: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__PERSISTENT; + case ActivityManager.PROCESS_STATE_PERSISTENT_UI: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__PERSISTENT_UI; + case ActivityManager.PROCESS_STATE_TOP: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__TOP; + case ActivityManager.PROCESS_STATE_BOUND_TOP: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__BOUND_TOP; + case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__FOREGROUND_SERVICE; + case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: + return FrameworkStatsLog + .SYNC_EXEMPTION_OCCURRED__PROC_STATE__BOUND_FOREGROUND_SERVICE; + case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__IMPORTANT_FOREGROUND; + case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__IMPORTANT_BACKGROUND; + case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__TRANSIENT_BACKGROUND; + case ActivityManager.PROCESS_STATE_BACKUP: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__BACKUP; + case ActivityManager.PROCESS_STATE_SERVICE: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__SERVICE; + case ActivityManager.PROCESS_STATE_RECEIVER: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__RECEIVER; + case ActivityManager.PROCESS_STATE_TOP_SLEEPING: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__TOP_SLEEPING; + case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__HEAVY_WEIGHT; + case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__LAST_ACTIVITY; + case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__CACHED_ACTIVITY; + case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: + return FrameworkStatsLog + .SYNC_EXEMPTION_OCCURRED__PROC_STATE__CACHED_ACTIVITY_CLIENT; + case ActivityManager.PROCESS_STATE_CACHED_RECENT: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__CACHED_RECENT; + case ActivityManager.PROCESS_STATE_CACHED_EMPTY: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__CACHED_EMPTY; + default: + return FrameworkStatsLog.SYNC_EXEMPTION_OCCURRED__PROC_STATE__UNKNOWN; + } + } + /** {@hide} */ @VisibleForTesting public static final class ObserverNode {