summaryrefslogtreecommitdiff
path: root/apex/jobscheduler
diff options
context:
space:
mode:
authorMichael Wachenschwanz <mwachens@google.com>2020-06-20 06:07:00 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-06-20 06:07:00 +0000
commit5d544ddff061eafa2adfa2d00cf9dd5e663f5cd0 (patch)
tree9ed032b946245706baa99c29792867bc1d5d2990 /apex/jobscheduler
parent97bd35e552b58f59e706b5a13ff51600fae98a20 (diff)
parent793da64d37e63c435d7c94d54b1994dd61b9d916 (diff)
Merge "Move AppStandbyController calls out of UsageStats lock" into rvc-dev
Diffstat (limited to 'apex/jobscheduler')
-rw-r--r--apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java8
-rw-r--r--apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java22
-rw-r--r--apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java18
3 files changed, 29 insertions, 19 deletions
diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
index 887d82c6413f..e15f0f37fc62 100644
--- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
@@ -71,7 +71,7 @@ public interface AppStandbyInternal {
*/
void postOneTimeCheckIdleStates();
- void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId);
+ void reportEvent(UsageEvents.Event event, int userId);
void setLastJobRunTime(String packageName, int userId, long elapsedRealtime);
@@ -150,9 +150,7 @@ public interface AppStandbyInternal {
void clearCarrierPrivilegedApps();
- void flushToDisk(int userId);
-
- void flushDurationsToDisk();
+ void flushToDisk();
void initializeDefaultsForSystemApps(int userId);
@@ -162,7 +160,7 @@ public interface AppStandbyInternal {
void postReportExemptedSyncStart(String packageName, int userId);
- void dumpUser(IndentingPrintWriter idpw, int userId, List<String> pkgs);
+ void dumpUsers(IndentingPrintWriter idpw, int[] userIds, List<String> pkgs);
void dumpState(String[] args, PrintWriter pw);
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
index 372ec981df02..70155ee84720 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
@@ -675,6 +675,14 @@ public class AppIdleHistory {
return Long.parseLong(value);
}
+
+ public void writeAppIdleTimes() {
+ final int size = mIdleHistory.size();
+ for (int i = 0; i < size; i++) {
+ writeAppIdleTimes(mIdleHistory.keyAt(i));
+ }
+ }
+
public void writeAppIdleTimes(int userId) {
FileOutputStream fos = null;
AtomicFile appIdleFile = new AtomicFile(getUserFile(userId));
@@ -743,8 +751,18 @@ public class AppIdleHistory {
}
}
- public void dump(IndentingPrintWriter idpw, int userId, List<String> pkgs) {
- idpw.println("App Standby States:");
+ public void dumpUsers(IndentingPrintWriter idpw, int[] userIds, List<String> pkgs) {
+ final int numUsers = userIds.length;
+ for (int i = 0; i < numUsers; i++) {
+ idpw.println();
+ dumpUser(idpw, userIds[i], pkgs);
+ }
+ }
+
+ private void dumpUser(IndentingPrintWriter idpw, int userId, List<String> pkgs) {
+ idpw.print("User ");
+ idpw.print(userId);
+ idpw.println(" App Standby States:");
idpw.increaseIndent();
ArrayMap<String, AppUsageHistory> userHistory = mIdleHistory.get(userId);
final long elapsedRealtime = SystemClock.elapsedRealtime();
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index f27eb25fa7e2..687b1d4e0bde 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -866,7 +866,7 @@ public class AppStandbyController implements AppStandbyInternal {
}
@Override
- public void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId) {
+ public void reportEvent(UsageEvents.Event event, int userId) {
if (!mAppIdleEnabled) return;
final int eventType = event.getEventType();
if ((eventType == UsageEvents.Event.ACTIVITY_RESUMED
@@ -880,6 +880,7 @@ public class AppStandbyController implements AppStandbyInternal {
final String pkg = event.getPackageName();
final List<UserHandle> linkedProfiles = getCrossProfileTargets(pkg, userId);
synchronized (mAppIdleLock) {
+ final long elapsedRealtime = mInjector.elapsedRealtime();
reportEventLocked(pkg, eventType, elapsedRealtime, userId);
final int size = linkedProfiles.size();
@@ -1630,18 +1631,11 @@ public class AppStandbyController implements AppStandbyInternal {
}
}
- @Override
- public void flushToDisk(int userId) {
- synchronized (mAppIdleLock) {
- mAppIdleHistory.writeAppIdleTimes(userId);
- }
- }
@Override
- public void flushDurationsToDisk() {
- // Persist elapsed and screen on time. If this fails for whatever reason, the apps will be
- // considered not-idle, which is the safest outcome in such an event.
+ public void flushToDisk() {
synchronized (mAppIdleLock) {
+ mAppIdleHistory.writeAppIdleTimes();
mAppIdleHistory.writeAppIdleDurations();
}
}
@@ -1818,9 +1812,9 @@ public class AppStandbyController implements AppStandbyInternal {
}
@Override
- public void dumpUser(IndentingPrintWriter idpw, int userId, List<String> pkgs) {
+ public void dumpUsers(IndentingPrintWriter idpw, int[] userIds, List<String> pkgs) {
synchronized (mAppIdleLock) {
- mAppIdleHistory.dump(idpw, userId, pkgs);
+ mAppIdleHistory.dumpUsers(idpw, userIds, pkgs);
}
}