Loading services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java +25 −25 Original line number Diff line number Diff line Loading @@ -45,12 +45,12 @@ public class AppIdleHistoryTests extends AndroidTestCase { final int userId = 0; AppIdleHistory aih = new AppIdleHistory(mStorageDir, 0); aih.updateDisplayLocked(true, /* elapsedRealtime= */ 1000); aih.updateDisplayLocked(false, /* elapsedRealtime= */ 2000); aih.updateDisplay(true, /* elapsedRealtime= */ 1000); aih.updateDisplay(false, /* elapsedRealtime= */ 2000); // Screen On time file should be written right away assertTrue(aih.getScreenOnTimeFile().exists()); aih.writeAppIdleTimesLocked(userId); aih.writeAppIdleTimes(userId); // stats file should be written now assertTrue(new File(new File(mStorageDir, "users/" + userId), AppIdleHistory.APP_IDLE_FILENAME).exists()); Loading @@ -58,43 +58,43 @@ public class AppIdleHistoryTests extends AndroidTestCase { public void testScreenOnTime() { AppIdleHistory aih = new AppIdleHistory(mStorageDir, 1000); aih.updateDisplayLocked(false, 2000); assertEquals(aih.getScreenOnTimeLocked(2000), 0); aih.updateDisplayLocked(true, 3000); assertEquals(aih.getScreenOnTimeLocked(4000), 1000); assertEquals(aih.getScreenOnTimeLocked(5000), 2000); aih.updateDisplayLocked(false, 6000); aih.updateDisplay(false, 2000); assertEquals(aih.getScreenOnTime(2000), 0); aih.updateDisplay(true, 3000); assertEquals(aih.getScreenOnTime(4000), 1000); assertEquals(aih.getScreenOnTime(5000), 2000); aih.updateDisplay(false, 6000); // Screen on time should not keep progressing with screen is off assertEquals(aih.getScreenOnTimeLocked(7000), 3000); assertEquals(aih.getScreenOnTimeLocked(8000), 3000); aih.writeAppIdleDurationsLocked(); assertEquals(aih.getScreenOnTime(7000), 3000); assertEquals(aih.getScreenOnTime(8000), 3000); aih.writeAppIdleDurations(); // Check if the screen on time is persisted across instantiations AppIdleHistory aih2 = new AppIdleHistory(mStorageDir, 0); assertEquals(aih2.getScreenOnTimeLocked(11000), 3000); aih2.updateDisplayLocked(true, 4000); aih2.updateDisplayLocked(false, 5000); assertEquals(aih2.getScreenOnTimeLocked(13000), 4000); assertEquals(aih2.getScreenOnTime(11000), 3000); aih2.updateDisplay(true, 4000); aih2.updateDisplay(false, 5000); assertEquals(aih2.getScreenOnTime(13000), 4000); } public void testPackageEvents() { AppIdleHistory aih = new AppIdleHistory(mStorageDir, 1000); aih.setThresholds(4000, 1000); aih.updateDisplayLocked(true, 1000); aih.updateDisplay(true, 1000); // App is not-idle by default assertFalse(aih.isIdleLocked(PACKAGE_1, 0, 1500)); assertFalse(aih.isIdle(PACKAGE_1, 0, 1500)); // Still not idle assertFalse(aih.isIdleLocked(PACKAGE_1, 0, 3000)); assertFalse(aih.isIdle(PACKAGE_1, 0, 3000)); // Idle now assertTrue(aih.isIdleLocked(PACKAGE_1, 0, 8000)); assertTrue(aih.isIdle(PACKAGE_1, 0, 8000)); // Not idle assertFalse(aih.isIdleLocked(PACKAGE_2, 0, 9000)); assertFalse(aih.isIdle(PACKAGE_2, 0, 9000)); // Screen off aih.updateDisplayLocked(false, 9100); aih.updateDisplay(false, 9100); // Still idle after 10 seconds because screen hasn't been on long enough assertFalse(aih.isIdleLocked(PACKAGE_2, 0, 20000)); aih.updateDisplayLocked(true, 21000); assertTrue(aih.isIdleLocked(PACKAGE_2, 0, 23000)); assertFalse(aih.isIdle(PACKAGE_2, 0, 20000)); aih.updateDisplay(true, 21000); assertTrue(aih.isIdle(PACKAGE_2, 0, 23000)); } } No newline at end of file services/usage/java/com/android/server/usage/AppIdleHistory.java +43 −44 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.usage; import android.os.Environment; import android.os.SystemClock; import android.os.UserHandle; import android.util.ArrayMap; import android.util.AtomicFile; import android.util.Slog; Loading Loading @@ -101,7 +100,7 @@ public class AppIdleHistory { mElapsedSnapshot = elapsedRealtime; mScreenOnSnapshot = elapsedRealtime; mStorageDir = storageDir; readScreenOnTimeLocked(); readScreenOnTime(); } public void setThresholds(long elapsedTimeThreshold, long screenOnTimeThreshold) { Loading @@ -109,7 +108,7 @@ public class AppIdleHistory { mScreenOnTimeThreshold = screenOnTimeThreshold; } public void updateDisplayLocked(boolean screenOn, long elapsedRealtime) { public void updateDisplay(boolean screenOn, long elapsedRealtime) { if (screenOn == mScreenOn) return; mScreenOn = screenOn; Loading @@ -122,7 +121,7 @@ public class AppIdleHistory { } } public long getScreenOnTimeLocked(long elapsedRealtime) { public long getScreenOnTime(long elapsedRealtime) { long screenOnTime = mScreenOnDuration; if (mScreenOn) { screenOnTime += elapsedRealtime - mScreenOnSnapshot; Loading @@ -135,7 +134,7 @@ public class AppIdleHistory { return new File(mStorageDir, "screen_on_time"); } private void readScreenOnTimeLocked() { private void readScreenOnTime() { File screenOnTimeFile = getScreenOnTimeFile(); if (screenOnTimeFile.exists()) { try { Loading @@ -146,11 +145,11 @@ public class AppIdleHistory { } catch (IOException | NumberFormatException e) { } } else { writeScreenOnTimeLocked(); writeScreenOnTime(); } } private void writeScreenOnTimeLocked() { private void writeScreenOnTime() { AtomicFile screenOnTimeFile = new AtomicFile(getScreenOnTimeFile()); FileOutputStream fos = null; try { Loading @@ -166,30 +165,30 @@ public class AppIdleHistory { /** * To be called periodically to keep track of elapsed time when app idle times are written */ public void writeAppIdleDurationsLocked() { public void writeAppIdleDurations() { final long elapsedRealtime = SystemClock.elapsedRealtime(); // Only bump up and snapshot the elapsed time. Don't change screen on duration. mElapsedDuration += elapsedRealtime - mElapsedSnapshot; mElapsedSnapshot = elapsedRealtime; writeScreenOnTimeLocked(); writeScreenOnTime(); } public void reportUsageLocked(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, public void reportUsage(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); shiftHistoryToNow(userHistory, elapsedRealtime); packageHistory.lastUsedElapsedTime = mElapsedDuration + (elapsedRealtime - mElapsedSnapshot); packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime); packageHistory.recent[HISTORY_SIZE - 1] = FLAG_LAST_STATE | FLAG_PARTIAL_ACTIVE; } public void setIdle(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); shiftHistoryToNow(userHistory, elapsedRealtime); Loading Loading @@ -222,23 +221,23 @@ public class AppIdleHistory { mLastPeriod = thisPeriod; } private ArrayMap<String, PackageHistory> getUserHistoryLocked(int userId) { private ArrayMap<String, PackageHistory> getUserHistory(int userId) { ArrayMap<String, PackageHistory> userHistory = mIdleHistory.get(userId); if (userHistory == null) { userHistory = new ArrayMap<>(); mIdleHistory.put(userId, userHistory); readAppIdleTimesLocked(userId, userHistory); readAppIdleTimes(userId, userHistory); } return userHistory; } private PackageHistory getPackageHistoryLocked(ArrayMap<String, PackageHistory> userHistory, private PackageHistory getPackageHistory(ArrayMap<String, PackageHistory> userHistory, String packageName, long elapsedRealtime) { PackageHistory packageHistory = userHistory.get(packageName); if (packageHistory == null) { packageHistory = new PackageHistory(); packageHistory.lastUsedElapsedTime = getElapsedTimeLocked(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime); packageHistory.lastUsedElapsedTime = getElapsedTime(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime); userHistory.put(packageName, packageHistory); } return packageHistory; Loading @@ -248,41 +247,41 @@ public class AppIdleHistory { mIdleHistory.remove(userId); } public boolean isIdleLocked(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); public boolean isIdle(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, elapsedRealtime); getPackageHistory(userHistory, packageName, elapsedRealtime); if (packageHistory == null) { return false; // Default to not idle } else { return hasPassedThresholdsLocked(packageHistory, elapsedRealtime); return hasPassedThresholds(packageHistory, elapsedRealtime); } } private long getElapsedTimeLocked(long elapsedRealtime) { private long getElapsedTime(long elapsedRealtime) { return (elapsedRealtime - mElapsedSnapshot + mElapsedDuration); } public void setIdleLocked(String packageName, int userId, boolean idle, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, public void setIdle(String packageName, int userId, boolean idle, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); packageHistory.lastUsedElapsedTime = getElapsedTimeLocked(elapsedRealtime) packageHistory.lastUsedElapsedTime = getElapsedTime(elapsedRealtime) - mElapsedTimeThreshold; packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime) packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime) - (idle ? mScreenOnTimeThreshold : 0) - 1000 /* just a second more */; } public void clearUsageLocked(String packageName, int userId) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); public void clearUsage(String packageName, int userId) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); userHistory.remove(packageName); } private boolean hasPassedThresholdsLocked(PackageHistory packageHistory, long elapsedRealtime) { private boolean hasPassedThresholds(PackageHistory packageHistory, long elapsedRealtime) { return (packageHistory.lastUsedScreenTime <= getScreenOnTimeLocked(elapsedRealtime) - mScreenOnTimeThreshold) <= getScreenOnTime(elapsedRealtime) - mScreenOnTimeThreshold) && (packageHistory.lastUsedElapsedTime <= getElapsedTimeLocked(elapsedRealtime) - mElapsedTimeThreshold); <= getElapsedTime(elapsedRealtime) - mElapsedTimeThreshold); } private File getUserFile(int userId) { Loading @@ -290,7 +289,7 @@ public class AppIdleHistory { Integer.toString(userId)), APP_IDLE_FILENAME); } private void readAppIdleTimesLocked(int userId, ArrayMap<String, PackageHistory> userHistory) { private void readAppIdleTimes(int userId, ArrayMap<String, PackageHistory> userHistory) { FileInputStream fis = null; try { AtomicFile appIdleFile = new AtomicFile(getUserFile(userId)); Loading Loading @@ -332,7 +331,7 @@ public class AppIdleHistory { } } public void writeAppIdleTimesLocked(int userId) { public void writeAppIdleTimes(int userId) { FileOutputStream fos = null; AtomicFile appIdleFile = new AtomicFile(getUserFile(userId)); try { Loading @@ -346,7 +345,7 @@ public class AppIdleHistory { xml.startTag(null, TAG_PACKAGES); ArrayMap<String,PackageHistory> userHistory = getUserHistoryLocked(userId); ArrayMap<String,PackageHistory> userHistory = getUserHistory(userId); final int N = userHistory.size(); for (int i = 0; i < N; i++) { String packageName = userHistory.keyAt(i); Loading Loading @@ -374,8 +373,8 @@ public class AppIdleHistory { idpw.increaseIndent(); ArrayMap<String, PackageHistory> userHistory = mIdleHistory.get(userId); final long elapsedRealtime = SystemClock.elapsedRealtime(); final long totalElapsedTime = getElapsedTimeLocked(elapsedRealtime); final long screenOnTime = getScreenOnTimeLocked(elapsedRealtime); final long totalElapsedTime = getElapsedTime(elapsedRealtime); final long screenOnTime = getScreenOnTime(elapsedRealtime); if (userHistory == null) return; final int P = userHistory.size(); for (int p = 0; p < P; p++) { Loading @@ -386,15 +385,15 @@ public class AppIdleHistory { TimeUtils.formatDuration(totalElapsedTime - packageHistory.lastUsedElapsedTime, idpw); idpw.print(" lastUsedScreenOn="); TimeUtils.formatDuration(screenOnTime - packageHistory.lastUsedScreenTime, idpw); idpw.print(" idle=" + (isIdleLocked(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" idle=" + (isIdle(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.println(); } idpw.println(); idpw.print("totalElapsedTime="); TimeUtils.formatDuration(getElapsedTimeLocked(elapsedRealtime), idpw); TimeUtils.formatDuration(getElapsedTime(elapsedRealtime), idpw); idpw.println(); idpw.print("totalScreenOnTime="); TimeUtils.formatDuration(getScreenOnTimeLocked(elapsedRealtime), idpw); TimeUtils.formatDuration(getScreenOnTime(elapsedRealtime), idpw); idpw.println(); idpw.decreaseIndent(); } Loading @@ -410,7 +409,7 @@ public class AppIdleHistory { for (int i = 0; i < HISTORY_SIZE; i++) { idpw.print(history[i] == 0 ? '.' : 'A'); } idpw.print(" idle=" + (isIdleLocked(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" idle=" + (isIdle(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" " + packageName); idpw.println(); } Loading services/usage/java/com/android/server/usage/UsageStatsService.java +130 −88 File changed.Preview size limit exceeded, changes collapsed. Show changes services/usage/java/com/android/server/usage/UserUsageStatsService.java +1 −1 Original line number Diff line number Diff line Loading @@ -529,7 +529,6 @@ class UserUsageStatsService { pw.decreaseIndent(); pw.println(); pw.increaseIndent(); pw.println("ChooserCounts"); pw.increaseIndent(); for (UsageStats usageStats : pkgStats.values()) { Loading @@ -553,6 +552,7 @@ class UserUsageStatsService { } pw.println(); } pw.decreaseIndent(); pw.println("configurations"); pw.increaseIndent(); Loading Loading
services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java +25 −25 Original line number Diff line number Diff line Loading @@ -45,12 +45,12 @@ public class AppIdleHistoryTests extends AndroidTestCase { final int userId = 0; AppIdleHistory aih = new AppIdleHistory(mStorageDir, 0); aih.updateDisplayLocked(true, /* elapsedRealtime= */ 1000); aih.updateDisplayLocked(false, /* elapsedRealtime= */ 2000); aih.updateDisplay(true, /* elapsedRealtime= */ 1000); aih.updateDisplay(false, /* elapsedRealtime= */ 2000); // Screen On time file should be written right away assertTrue(aih.getScreenOnTimeFile().exists()); aih.writeAppIdleTimesLocked(userId); aih.writeAppIdleTimes(userId); // stats file should be written now assertTrue(new File(new File(mStorageDir, "users/" + userId), AppIdleHistory.APP_IDLE_FILENAME).exists()); Loading @@ -58,43 +58,43 @@ public class AppIdleHistoryTests extends AndroidTestCase { public void testScreenOnTime() { AppIdleHistory aih = new AppIdleHistory(mStorageDir, 1000); aih.updateDisplayLocked(false, 2000); assertEquals(aih.getScreenOnTimeLocked(2000), 0); aih.updateDisplayLocked(true, 3000); assertEquals(aih.getScreenOnTimeLocked(4000), 1000); assertEquals(aih.getScreenOnTimeLocked(5000), 2000); aih.updateDisplayLocked(false, 6000); aih.updateDisplay(false, 2000); assertEquals(aih.getScreenOnTime(2000), 0); aih.updateDisplay(true, 3000); assertEquals(aih.getScreenOnTime(4000), 1000); assertEquals(aih.getScreenOnTime(5000), 2000); aih.updateDisplay(false, 6000); // Screen on time should not keep progressing with screen is off assertEquals(aih.getScreenOnTimeLocked(7000), 3000); assertEquals(aih.getScreenOnTimeLocked(8000), 3000); aih.writeAppIdleDurationsLocked(); assertEquals(aih.getScreenOnTime(7000), 3000); assertEquals(aih.getScreenOnTime(8000), 3000); aih.writeAppIdleDurations(); // Check if the screen on time is persisted across instantiations AppIdleHistory aih2 = new AppIdleHistory(mStorageDir, 0); assertEquals(aih2.getScreenOnTimeLocked(11000), 3000); aih2.updateDisplayLocked(true, 4000); aih2.updateDisplayLocked(false, 5000); assertEquals(aih2.getScreenOnTimeLocked(13000), 4000); assertEquals(aih2.getScreenOnTime(11000), 3000); aih2.updateDisplay(true, 4000); aih2.updateDisplay(false, 5000); assertEquals(aih2.getScreenOnTime(13000), 4000); } public void testPackageEvents() { AppIdleHistory aih = new AppIdleHistory(mStorageDir, 1000); aih.setThresholds(4000, 1000); aih.updateDisplayLocked(true, 1000); aih.updateDisplay(true, 1000); // App is not-idle by default assertFalse(aih.isIdleLocked(PACKAGE_1, 0, 1500)); assertFalse(aih.isIdle(PACKAGE_1, 0, 1500)); // Still not idle assertFalse(aih.isIdleLocked(PACKAGE_1, 0, 3000)); assertFalse(aih.isIdle(PACKAGE_1, 0, 3000)); // Idle now assertTrue(aih.isIdleLocked(PACKAGE_1, 0, 8000)); assertTrue(aih.isIdle(PACKAGE_1, 0, 8000)); // Not idle assertFalse(aih.isIdleLocked(PACKAGE_2, 0, 9000)); assertFalse(aih.isIdle(PACKAGE_2, 0, 9000)); // Screen off aih.updateDisplayLocked(false, 9100); aih.updateDisplay(false, 9100); // Still idle after 10 seconds because screen hasn't been on long enough assertFalse(aih.isIdleLocked(PACKAGE_2, 0, 20000)); aih.updateDisplayLocked(true, 21000); assertTrue(aih.isIdleLocked(PACKAGE_2, 0, 23000)); assertFalse(aih.isIdle(PACKAGE_2, 0, 20000)); aih.updateDisplay(true, 21000); assertTrue(aih.isIdle(PACKAGE_2, 0, 23000)); } } No newline at end of file
services/usage/java/com/android/server/usage/AppIdleHistory.java +43 −44 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.usage; import android.os.Environment; import android.os.SystemClock; import android.os.UserHandle; import android.util.ArrayMap; import android.util.AtomicFile; import android.util.Slog; Loading Loading @@ -101,7 +100,7 @@ public class AppIdleHistory { mElapsedSnapshot = elapsedRealtime; mScreenOnSnapshot = elapsedRealtime; mStorageDir = storageDir; readScreenOnTimeLocked(); readScreenOnTime(); } public void setThresholds(long elapsedTimeThreshold, long screenOnTimeThreshold) { Loading @@ -109,7 +108,7 @@ public class AppIdleHistory { mScreenOnTimeThreshold = screenOnTimeThreshold; } public void updateDisplayLocked(boolean screenOn, long elapsedRealtime) { public void updateDisplay(boolean screenOn, long elapsedRealtime) { if (screenOn == mScreenOn) return; mScreenOn = screenOn; Loading @@ -122,7 +121,7 @@ public class AppIdleHistory { } } public long getScreenOnTimeLocked(long elapsedRealtime) { public long getScreenOnTime(long elapsedRealtime) { long screenOnTime = mScreenOnDuration; if (mScreenOn) { screenOnTime += elapsedRealtime - mScreenOnSnapshot; Loading @@ -135,7 +134,7 @@ public class AppIdleHistory { return new File(mStorageDir, "screen_on_time"); } private void readScreenOnTimeLocked() { private void readScreenOnTime() { File screenOnTimeFile = getScreenOnTimeFile(); if (screenOnTimeFile.exists()) { try { Loading @@ -146,11 +145,11 @@ public class AppIdleHistory { } catch (IOException | NumberFormatException e) { } } else { writeScreenOnTimeLocked(); writeScreenOnTime(); } } private void writeScreenOnTimeLocked() { private void writeScreenOnTime() { AtomicFile screenOnTimeFile = new AtomicFile(getScreenOnTimeFile()); FileOutputStream fos = null; try { Loading @@ -166,30 +165,30 @@ public class AppIdleHistory { /** * To be called periodically to keep track of elapsed time when app idle times are written */ public void writeAppIdleDurationsLocked() { public void writeAppIdleDurations() { final long elapsedRealtime = SystemClock.elapsedRealtime(); // Only bump up and snapshot the elapsed time. Don't change screen on duration. mElapsedDuration += elapsedRealtime - mElapsedSnapshot; mElapsedSnapshot = elapsedRealtime; writeScreenOnTimeLocked(); writeScreenOnTime(); } public void reportUsageLocked(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, public void reportUsage(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); shiftHistoryToNow(userHistory, elapsedRealtime); packageHistory.lastUsedElapsedTime = mElapsedDuration + (elapsedRealtime - mElapsedSnapshot); packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime); packageHistory.recent[HISTORY_SIZE - 1] = FLAG_LAST_STATE | FLAG_PARTIAL_ACTIVE; } public void setIdle(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); shiftHistoryToNow(userHistory, elapsedRealtime); Loading Loading @@ -222,23 +221,23 @@ public class AppIdleHistory { mLastPeriod = thisPeriod; } private ArrayMap<String, PackageHistory> getUserHistoryLocked(int userId) { private ArrayMap<String, PackageHistory> getUserHistory(int userId) { ArrayMap<String, PackageHistory> userHistory = mIdleHistory.get(userId); if (userHistory == null) { userHistory = new ArrayMap<>(); mIdleHistory.put(userId, userHistory); readAppIdleTimesLocked(userId, userHistory); readAppIdleTimes(userId, userHistory); } return userHistory; } private PackageHistory getPackageHistoryLocked(ArrayMap<String, PackageHistory> userHistory, private PackageHistory getPackageHistory(ArrayMap<String, PackageHistory> userHistory, String packageName, long elapsedRealtime) { PackageHistory packageHistory = userHistory.get(packageName); if (packageHistory == null) { packageHistory = new PackageHistory(); packageHistory.lastUsedElapsedTime = getElapsedTimeLocked(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime); packageHistory.lastUsedElapsedTime = getElapsedTime(elapsedRealtime); packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime); userHistory.put(packageName, packageHistory); } return packageHistory; Loading @@ -248,41 +247,41 @@ public class AppIdleHistory { mIdleHistory.remove(userId); } public boolean isIdleLocked(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); public boolean isIdle(String packageName, int userId, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, elapsedRealtime); getPackageHistory(userHistory, packageName, elapsedRealtime); if (packageHistory == null) { return false; // Default to not idle } else { return hasPassedThresholdsLocked(packageHistory, elapsedRealtime); return hasPassedThresholds(packageHistory, elapsedRealtime); } } private long getElapsedTimeLocked(long elapsedRealtime) { private long getElapsedTime(long elapsedRealtime) { return (elapsedRealtime - mElapsedSnapshot + mElapsedDuration); } public void setIdleLocked(String packageName, int userId, boolean idle, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); PackageHistory packageHistory = getPackageHistoryLocked(userHistory, packageName, public void setIdle(String packageName, int userId, boolean idle, long elapsedRealtime) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); PackageHistory packageHistory = getPackageHistory(userHistory, packageName, elapsedRealtime); packageHistory.lastUsedElapsedTime = getElapsedTimeLocked(elapsedRealtime) packageHistory.lastUsedElapsedTime = getElapsedTime(elapsedRealtime) - mElapsedTimeThreshold; packageHistory.lastUsedScreenTime = getScreenOnTimeLocked(elapsedRealtime) packageHistory.lastUsedScreenTime = getScreenOnTime(elapsedRealtime) - (idle ? mScreenOnTimeThreshold : 0) - 1000 /* just a second more */; } public void clearUsageLocked(String packageName, int userId) { ArrayMap<String, PackageHistory> userHistory = getUserHistoryLocked(userId); public void clearUsage(String packageName, int userId) { ArrayMap<String, PackageHistory> userHistory = getUserHistory(userId); userHistory.remove(packageName); } private boolean hasPassedThresholdsLocked(PackageHistory packageHistory, long elapsedRealtime) { private boolean hasPassedThresholds(PackageHistory packageHistory, long elapsedRealtime) { return (packageHistory.lastUsedScreenTime <= getScreenOnTimeLocked(elapsedRealtime) - mScreenOnTimeThreshold) <= getScreenOnTime(elapsedRealtime) - mScreenOnTimeThreshold) && (packageHistory.lastUsedElapsedTime <= getElapsedTimeLocked(elapsedRealtime) - mElapsedTimeThreshold); <= getElapsedTime(elapsedRealtime) - mElapsedTimeThreshold); } private File getUserFile(int userId) { Loading @@ -290,7 +289,7 @@ public class AppIdleHistory { Integer.toString(userId)), APP_IDLE_FILENAME); } private void readAppIdleTimesLocked(int userId, ArrayMap<String, PackageHistory> userHistory) { private void readAppIdleTimes(int userId, ArrayMap<String, PackageHistory> userHistory) { FileInputStream fis = null; try { AtomicFile appIdleFile = new AtomicFile(getUserFile(userId)); Loading Loading @@ -332,7 +331,7 @@ public class AppIdleHistory { } } public void writeAppIdleTimesLocked(int userId) { public void writeAppIdleTimes(int userId) { FileOutputStream fos = null; AtomicFile appIdleFile = new AtomicFile(getUserFile(userId)); try { Loading @@ -346,7 +345,7 @@ public class AppIdleHistory { xml.startTag(null, TAG_PACKAGES); ArrayMap<String,PackageHistory> userHistory = getUserHistoryLocked(userId); ArrayMap<String,PackageHistory> userHistory = getUserHistory(userId); final int N = userHistory.size(); for (int i = 0; i < N; i++) { String packageName = userHistory.keyAt(i); Loading Loading @@ -374,8 +373,8 @@ public class AppIdleHistory { idpw.increaseIndent(); ArrayMap<String, PackageHistory> userHistory = mIdleHistory.get(userId); final long elapsedRealtime = SystemClock.elapsedRealtime(); final long totalElapsedTime = getElapsedTimeLocked(elapsedRealtime); final long screenOnTime = getScreenOnTimeLocked(elapsedRealtime); final long totalElapsedTime = getElapsedTime(elapsedRealtime); final long screenOnTime = getScreenOnTime(elapsedRealtime); if (userHistory == null) return; final int P = userHistory.size(); for (int p = 0; p < P; p++) { Loading @@ -386,15 +385,15 @@ public class AppIdleHistory { TimeUtils.formatDuration(totalElapsedTime - packageHistory.lastUsedElapsedTime, idpw); idpw.print(" lastUsedScreenOn="); TimeUtils.formatDuration(screenOnTime - packageHistory.lastUsedScreenTime, idpw); idpw.print(" idle=" + (isIdleLocked(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" idle=" + (isIdle(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.println(); } idpw.println(); idpw.print("totalElapsedTime="); TimeUtils.formatDuration(getElapsedTimeLocked(elapsedRealtime), idpw); TimeUtils.formatDuration(getElapsedTime(elapsedRealtime), idpw); idpw.println(); idpw.print("totalScreenOnTime="); TimeUtils.formatDuration(getScreenOnTimeLocked(elapsedRealtime), idpw); TimeUtils.formatDuration(getScreenOnTime(elapsedRealtime), idpw); idpw.println(); idpw.decreaseIndent(); } Loading @@ -410,7 +409,7 @@ public class AppIdleHistory { for (int i = 0; i < HISTORY_SIZE; i++) { idpw.print(history[i] == 0 ? '.' : 'A'); } idpw.print(" idle=" + (isIdleLocked(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" idle=" + (isIdle(packageName, userId, elapsedRealtime) ? "y" : "n")); idpw.print(" " + packageName); idpw.println(); } Loading
services/usage/java/com/android/server/usage/UsageStatsService.java +130 −88 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/usage/java/com/android/server/usage/UserUsageStatsService.java +1 −1 Original line number Diff line number Diff line Loading @@ -529,7 +529,6 @@ class UserUsageStatsService { pw.decreaseIndent(); pw.println(); pw.increaseIndent(); pw.println("ChooserCounts"); pw.increaseIndent(); for (UsageStats usageStats : pkgStats.values()) { Loading @@ -553,6 +552,7 @@ class UserUsageStatsService { } pw.println(); } pw.decreaseIndent(); pw.println("configurations"); pw.increaseIndent(); Loading