Loading services/usage/java/com/android/server/usage/UsageStatsService.java +12 −78 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ public class UsageStatsService extends SystemService implements private static final long TEN_SECONDS = 10 * 1000; private static final long TWENTY_MINUTES = 20 * 60 * 1000; private static final long FLUSH_INTERVAL = COMPRESS_TIME ? TEN_SECONDS : TWENTY_MINUTES; private static final long TIME_CHANGE_THRESHOLD_MILLIS = 2 * 1000; // Two seconds. static final long TIME_CHANGE_THRESHOLD_MILLIS = 2 * 1000; // Two seconds. private static final boolean ENABLE_KERNEL_UPDATES = true; private static final File KERNEL_COUNTER_FILE = new File("/proc/uid_procstat/set"); Loading Loading @@ -156,8 +156,6 @@ public class UsageStatsService extends SystemService implements private final SparseArray<UserUsageStatsService> mUserState = new SparseArray<>(); private final SparseBooleanArray mUserUnlockedStates = new SparseBooleanArray(); private final SparseIntArray mUidToKernelCounter = new SparseIntArray(); long mRealTimeSnapshot; long mSystemTimeSnapshot; int mUsageSource; /** Manages the standby state of apps. */ Loading Loading @@ -253,9 +251,6 @@ public class UsageStatsService extends SystemService implements getContext().registerReceiverAsUser(new UserActionsReceiver(), UserHandle.ALL, filter, null, mHandler); mRealTimeSnapshot = SystemClock.elapsedRealtime(); mSystemTimeSnapshot = System.currentTimeMillis(); publishLocalService(UsageStatsManagerInternal.class, new LocalService()); publishBinderService(Context.USAGE_STATS_SERVICE, new BinderService()); } Loading Loading @@ -345,7 +340,7 @@ public class UsageStatsService extends SystemService implements mUserUnlockedStates.put(userId, true); final UserUsageStatsService userService = getUserDataAndInitializeIfNeededLocked( userId, System.currentTimeMillis()); userService.userUnlocked(checkAndGetTimeLocked()); userService.userUnlocked(System.currentTimeMillis()); // Process all the pending reported events while (pendingEvents.peek() != null) { reportEvent(pendingEvents.poll(), userId); Loading Loading @@ -568,37 +563,6 @@ public class UsageStatsService extends SystemService implements } } /** * This should be the only way to get the time from the system. */ private long checkAndGetTimeLocked() { final long actualSystemTime = System.currentTimeMillis(); final long actualRealtime = SystemClock.elapsedRealtime(); final long expectedSystemTime = (actualRealtime - mRealTimeSnapshot) + mSystemTimeSnapshot; final long diffSystemTime = actualSystemTime - expectedSystemTime; if (Math.abs(diffSystemTime) > TIME_CHANGE_THRESHOLD_MILLIS && ENABLE_TIME_CHANGE_CORRECTION) { // The time has changed. Slog.i(TAG, "Time changed in UsageStats by " + (diffSystemTime / 1000) + " seconds"); final int userCount = mUserState.size(); for (int i = 0; i < userCount; i++) { final UserUsageStatsService service = mUserState.valueAt(i); service.onTimeChanged(expectedSystemTime, actualSystemTime); } mRealTimeSnapshot = actualRealtime; mSystemTimeSnapshot = actualSystemTime; } return actualSystemTime; } /** * Assuming the event's timestamp is measured in milliseconds since boot, * convert it to a system wall time. */ private void convertToSystemTimeLocked(Event event) { event.mTimeStamp = Math.max(0, event.mTimeStamp - mRealTimeSnapshot) + mSystemTimeSnapshot; } /** * Called by the Binder stub */ Loading Loading @@ -718,9 +682,8 @@ public class UsageStatsService extends SystemService implements return; } final long timeNow = checkAndGetTimeLocked(); final long timeNow = System.currentTimeMillis(); final long elapsedRealtime = SystemClock.elapsedRealtime(); convertToSystemTimeLocked(event); if (event.mPackage != null && mPackageManagerInternal.isPackageEphemeral(userId, event.mPackage)) { Loading Loading @@ -876,13 +839,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); List<UsageStats> list = service.queryUsageStats(bucketType, beginTime, endTime); if (list == null) { return null; Loading Loading @@ -913,13 +871,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryConfigurationStats(bucketType, beginTime, endTime); } } Loading @@ -935,13 +888,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEventStats(bucketType, beginTime, endTime); } } Loading @@ -957,13 +905,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEvents(beginTime, endTime, shouldObfuscateInstantApps); } } Loading @@ -979,21 +922,12 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEventsForPackage(beginTime, endTime, packageName, includeTaskRoot); } } private static boolean validRange(long currentTime, long beginTime, long endTime) { return beginTime <= currentTime && beginTime < endTime; } private String buildFullToken(String packageName, String token) { final StringBuilder sb = new StringBuilder(packageName.length() + token.length() + 1); sb.append(packageName); Loading Loading @@ -2050,8 +1984,8 @@ public class UsageStatsService extends SystemService implements // Check to ensure that only user 0's data is b/r for now if (user == UserHandle.USER_SYSTEM) { final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked(user, checkAndGetTimeLocked()); final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked( user, System.currentTimeMillis()); return userStats.getBackupPayload(key); } else { return null; Loading @@ -2068,8 +2002,8 @@ public class UsageStatsService extends SystemService implements } if (user == UserHandle.USER_SYSTEM) { final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked(user, checkAndGetTimeLocked()); final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked( user, System.currentTimeMillis()); userStats.applyRestoredPayload(key, payload); } } Loading services/usage/java/com/android/server/usage/UserUsageStatsService.java +58 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ class UserUsageStatsService { private final String mLogPrefix; private String mLastBackgroundedPackage; private final int mUserId; private long mRealTimeSnapshot; private long mSystemTimeSnapshot; private static final long[] INTERVAL_LENGTH = new long[] { UnixCalendar.DAY_IN_MILLIS, UnixCalendar.WEEK_IN_MILLIS, Loading @@ -101,6 +103,8 @@ class UserUsageStatsService { mListener = listener; mLogPrefix = "User[" + Integer.toString(userId) + "] "; mUserId = userId; mRealTimeSnapshot = SystemClock.elapsedRealtime(); mSystemTimeSnapshot = System.currentTimeMillis(); } void init(final long currentTimeMillis) { Loading Loading @@ -165,12 +169,41 @@ class UserUsageStatsService { persistActiveStats(); } void onTimeChanged(long oldTime, long newTime) { private void onTimeChanged(long oldTime, long newTime) { persistActiveStats(); mDatabase.onTimeChanged(newTime - oldTime); loadActiveStats(newTime); } /** * This should be the only way to get the time from the system. */ private long checkAndGetTimeLocked() { final long actualSystemTime = System.currentTimeMillis(); if (!UsageStatsService.ENABLE_TIME_CHANGE_CORRECTION) { return actualSystemTime; } final long actualRealtime = SystemClock.elapsedRealtime(); final long expectedSystemTime = (actualRealtime - mRealTimeSnapshot) + mSystemTimeSnapshot; final long diffSystemTime = actualSystemTime - expectedSystemTime; if (Math.abs(diffSystemTime) > UsageStatsService.TIME_CHANGE_THRESHOLD_MILLIS) { // The time has changed. Slog.i(TAG, mLogPrefix + "Time changed in by " + (diffSystemTime / 1000) + " seconds"); onTimeChanged(expectedSystemTime, actualSystemTime); mRealTimeSnapshot = actualRealtime; mSystemTimeSnapshot = actualSystemTime; } return actualSystemTime; } /** * Assuming the event's timestamp is measured in milliseconds since boot, * convert it to a system wall time. */ private void convertToSystemTimeLocked(Event event) { event.mTimeStamp = Math.max(0, event.mTimeStamp - mRealTimeSnapshot) + mSystemTimeSnapshot; } void reportEvent(Event event) { if (DEBUG) { Slog.d(TAG, mLogPrefix + "Got usage event for " + event.mPackage Loading @@ -178,6 +211,9 @@ class UserUsageStatsService { + eventToString(event.mEventType)); } checkAndGetTimeLocked(); convertToSystemTimeLocked(event); if (event.mTimeStamp >= mDailyExpiryDate.getTimeInMillis()) { // Need to rollover rolloverStats(event.mTimeStamp); Loading Loading @@ -298,6 +334,10 @@ class UserUsageStatsService { } }; private static boolean validRange(long currentTime, long beginTime, long endTime) { return beginTime <= currentTime && beginTime < endTime; } /** * Generic query method that selects the appropriate IntervalStats for the specified time range * and bucket, then calls the {@link com.android.server.usage.UsageStatsDatabase.StatCombiner} Loading Loading @@ -370,19 +410,31 @@ class UserUsageStatsService { } List<UsageStats> queryUsageStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sUsageStatsCombiner); } List<ConfigurationStats> queryConfigurationStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sConfigStatsCombiner); } List<EventStats> queryEventStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sEventStatsCombiner); } UsageEvents queryEvents(final long beginTime, final long endTime, boolean obfuscateInstantApps) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } final ArraySet<String> names = new ArraySet<>(); List<Event> results = queryStats(INTERVAL_DAILY, beginTime, endTime, new StatCombiner<Event>() { Loading Loading @@ -428,6 +480,9 @@ class UserUsageStatsService { UsageEvents queryEventsForPackage(final long beginTime, final long endTime, final String packageName, boolean includeTaskRoot) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } final ArraySet<String> names = new ArraySet<>(); names.add(packageName); final List<Event> results = queryStats(INTERVAL_DAILY, Loading Loading @@ -1030,10 +1085,12 @@ class UserUsageStatsService { } byte[] getBackupPayload(String key){ checkAndGetTimeLocked(); return mDatabase.getBackupPayload(key); } void applyRestoredPayload(String key, byte[] payload){ checkAndGetTimeLocked(); mDatabase.applyRestoredPayload(key, payload); } } Loading
services/usage/java/com/android/server/usage/UsageStatsService.java +12 −78 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ public class UsageStatsService extends SystemService implements private static final long TEN_SECONDS = 10 * 1000; private static final long TWENTY_MINUTES = 20 * 60 * 1000; private static final long FLUSH_INTERVAL = COMPRESS_TIME ? TEN_SECONDS : TWENTY_MINUTES; private static final long TIME_CHANGE_THRESHOLD_MILLIS = 2 * 1000; // Two seconds. static final long TIME_CHANGE_THRESHOLD_MILLIS = 2 * 1000; // Two seconds. private static final boolean ENABLE_KERNEL_UPDATES = true; private static final File KERNEL_COUNTER_FILE = new File("/proc/uid_procstat/set"); Loading Loading @@ -156,8 +156,6 @@ public class UsageStatsService extends SystemService implements private final SparseArray<UserUsageStatsService> mUserState = new SparseArray<>(); private final SparseBooleanArray mUserUnlockedStates = new SparseBooleanArray(); private final SparseIntArray mUidToKernelCounter = new SparseIntArray(); long mRealTimeSnapshot; long mSystemTimeSnapshot; int mUsageSource; /** Manages the standby state of apps. */ Loading Loading @@ -253,9 +251,6 @@ public class UsageStatsService extends SystemService implements getContext().registerReceiverAsUser(new UserActionsReceiver(), UserHandle.ALL, filter, null, mHandler); mRealTimeSnapshot = SystemClock.elapsedRealtime(); mSystemTimeSnapshot = System.currentTimeMillis(); publishLocalService(UsageStatsManagerInternal.class, new LocalService()); publishBinderService(Context.USAGE_STATS_SERVICE, new BinderService()); } Loading Loading @@ -345,7 +340,7 @@ public class UsageStatsService extends SystemService implements mUserUnlockedStates.put(userId, true); final UserUsageStatsService userService = getUserDataAndInitializeIfNeededLocked( userId, System.currentTimeMillis()); userService.userUnlocked(checkAndGetTimeLocked()); userService.userUnlocked(System.currentTimeMillis()); // Process all the pending reported events while (pendingEvents.peek() != null) { reportEvent(pendingEvents.poll(), userId); Loading Loading @@ -568,37 +563,6 @@ public class UsageStatsService extends SystemService implements } } /** * This should be the only way to get the time from the system. */ private long checkAndGetTimeLocked() { final long actualSystemTime = System.currentTimeMillis(); final long actualRealtime = SystemClock.elapsedRealtime(); final long expectedSystemTime = (actualRealtime - mRealTimeSnapshot) + mSystemTimeSnapshot; final long diffSystemTime = actualSystemTime - expectedSystemTime; if (Math.abs(diffSystemTime) > TIME_CHANGE_THRESHOLD_MILLIS && ENABLE_TIME_CHANGE_CORRECTION) { // The time has changed. Slog.i(TAG, "Time changed in UsageStats by " + (diffSystemTime / 1000) + " seconds"); final int userCount = mUserState.size(); for (int i = 0; i < userCount; i++) { final UserUsageStatsService service = mUserState.valueAt(i); service.onTimeChanged(expectedSystemTime, actualSystemTime); } mRealTimeSnapshot = actualRealtime; mSystemTimeSnapshot = actualSystemTime; } return actualSystemTime; } /** * Assuming the event's timestamp is measured in milliseconds since boot, * convert it to a system wall time. */ private void convertToSystemTimeLocked(Event event) { event.mTimeStamp = Math.max(0, event.mTimeStamp - mRealTimeSnapshot) + mSystemTimeSnapshot; } /** * Called by the Binder stub */ Loading Loading @@ -718,9 +682,8 @@ public class UsageStatsService extends SystemService implements return; } final long timeNow = checkAndGetTimeLocked(); final long timeNow = System.currentTimeMillis(); final long elapsedRealtime = SystemClock.elapsedRealtime(); convertToSystemTimeLocked(event); if (event.mPackage != null && mPackageManagerInternal.isPackageEphemeral(userId, event.mPackage)) { Loading Loading @@ -876,13 +839,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); List<UsageStats> list = service.queryUsageStats(bucketType, beginTime, endTime); if (list == null) { return null; Loading Loading @@ -913,13 +871,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryConfigurationStats(bucketType, beginTime, endTime); } } Loading @@ -935,13 +888,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEventStats(bucketType, beginTime, endTime); } } Loading @@ -957,13 +905,8 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEvents(beginTime, endTime, shouldObfuscateInstantApps); } } Loading @@ -979,21 +922,12 @@ public class UsageStatsService extends SystemService implements return null; } final long timeNow = checkAndGetTimeLocked(); if (!validRange(timeNow, beginTime, endTime)) { return null; } final UserUsageStatsService service = getUserDataAndInitializeIfNeededLocked(userId, timeNow); getUserDataAndInitializeIfNeededLocked(userId, System.currentTimeMillis()); return service.queryEventsForPackage(beginTime, endTime, packageName, includeTaskRoot); } } private static boolean validRange(long currentTime, long beginTime, long endTime) { return beginTime <= currentTime && beginTime < endTime; } private String buildFullToken(String packageName, String token) { final StringBuilder sb = new StringBuilder(packageName.length() + token.length() + 1); sb.append(packageName); Loading Loading @@ -2050,8 +1984,8 @@ public class UsageStatsService extends SystemService implements // Check to ensure that only user 0's data is b/r for now if (user == UserHandle.USER_SYSTEM) { final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked(user, checkAndGetTimeLocked()); final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked( user, System.currentTimeMillis()); return userStats.getBackupPayload(key); } else { return null; Loading @@ -2068,8 +2002,8 @@ public class UsageStatsService extends SystemService implements } if (user == UserHandle.USER_SYSTEM) { final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked(user, checkAndGetTimeLocked()); final UserUsageStatsService userStats = getUserDataAndInitializeIfNeededLocked( user, System.currentTimeMillis()); userStats.applyRestoredPayload(key, payload); } } Loading
services/usage/java/com/android/server/usage/UserUsageStatsService.java +58 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ class UserUsageStatsService { private final String mLogPrefix; private String mLastBackgroundedPackage; private final int mUserId; private long mRealTimeSnapshot; private long mSystemTimeSnapshot; private static final long[] INTERVAL_LENGTH = new long[] { UnixCalendar.DAY_IN_MILLIS, UnixCalendar.WEEK_IN_MILLIS, Loading @@ -101,6 +103,8 @@ class UserUsageStatsService { mListener = listener; mLogPrefix = "User[" + Integer.toString(userId) + "] "; mUserId = userId; mRealTimeSnapshot = SystemClock.elapsedRealtime(); mSystemTimeSnapshot = System.currentTimeMillis(); } void init(final long currentTimeMillis) { Loading Loading @@ -165,12 +169,41 @@ class UserUsageStatsService { persistActiveStats(); } void onTimeChanged(long oldTime, long newTime) { private void onTimeChanged(long oldTime, long newTime) { persistActiveStats(); mDatabase.onTimeChanged(newTime - oldTime); loadActiveStats(newTime); } /** * This should be the only way to get the time from the system. */ private long checkAndGetTimeLocked() { final long actualSystemTime = System.currentTimeMillis(); if (!UsageStatsService.ENABLE_TIME_CHANGE_CORRECTION) { return actualSystemTime; } final long actualRealtime = SystemClock.elapsedRealtime(); final long expectedSystemTime = (actualRealtime - mRealTimeSnapshot) + mSystemTimeSnapshot; final long diffSystemTime = actualSystemTime - expectedSystemTime; if (Math.abs(diffSystemTime) > UsageStatsService.TIME_CHANGE_THRESHOLD_MILLIS) { // The time has changed. Slog.i(TAG, mLogPrefix + "Time changed in by " + (diffSystemTime / 1000) + " seconds"); onTimeChanged(expectedSystemTime, actualSystemTime); mRealTimeSnapshot = actualRealtime; mSystemTimeSnapshot = actualSystemTime; } return actualSystemTime; } /** * Assuming the event's timestamp is measured in milliseconds since boot, * convert it to a system wall time. */ private void convertToSystemTimeLocked(Event event) { event.mTimeStamp = Math.max(0, event.mTimeStamp - mRealTimeSnapshot) + mSystemTimeSnapshot; } void reportEvent(Event event) { if (DEBUG) { Slog.d(TAG, mLogPrefix + "Got usage event for " + event.mPackage Loading @@ -178,6 +211,9 @@ class UserUsageStatsService { + eventToString(event.mEventType)); } checkAndGetTimeLocked(); convertToSystemTimeLocked(event); if (event.mTimeStamp >= mDailyExpiryDate.getTimeInMillis()) { // Need to rollover rolloverStats(event.mTimeStamp); Loading Loading @@ -298,6 +334,10 @@ class UserUsageStatsService { } }; private static boolean validRange(long currentTime, long beginTime, long endTime) { return beginTime <= currentTime && beginTime < endTime; } /** * Generic query method that selects the appropriate IntervalStats for the specified time range * and bucket, then calls the {@link com.android.server.usage.UsageStatsDatabase.StatCombiner} Loading Loading @@ -370,19 +410,31 @@ class UserUsageStatsService { } List<UsageStats> queryUsageStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sUsageStatsCombiner); } List<ConfigurationStats> queryConfigurationStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sConfigStatsCombiner); } List<EventStats> queryEventStats(int bucketType, long beginTime, long endTime) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } return queryStats(bucketType, beginTime, endTime, sEventStatsCombiner); } UsageEvents queryEvents(final long beginTime, final long endTime, boolean obfuscateInstantApps) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } final ArraySet<String> names = new ArraySet<>(); List<Event> results = queryStats(INTERVAL_DAILY, beginTime, endTime, new StatCombiner<Event>() { Loading Loading @@ -428,6 +480,9 @@ class UserUsageStatsService { UsageEvents queryEventsForPackage(final long beginTime, final long endTime, final String packageName, boolean includeTaskRoot) { if (!validRange(checkAndGetTimeLocked(), beginTime, endTime)) { return null; } final ArraySet<String> names = new ArraySet<>(); names.add(packageName); final List<Event> results = queryStats(INTERVAL_DAILY, Loading Loading @@ -1030,10 +1085,12 @@ class UserUsageStatsService { } byte[] getBackupPayload(String key){ checkAndGetTimeLocked(); return mDatabase.getBackupPayload(key); } void applyRestoredPayload(String key, byte[] payload){ checkAndGetTimeLocked(); mDatabase.applyRestoredPayload(key, payload); } }