summaryrefslogtreecommitdiff
path: root/apex
diff options
context:
space:
mode:
authorMichael Wachenschwanz <mwachens@google.com>2020-06-11 16:14:48 -0700
committerMichael Wachenschwanz <mwachens@google.com>2020-06-19 10:44:49 -0700
commit793da64d37e63c435d7c94d54b1994dd61b9d916 (patch)
tree88ceb438779a448e5984c43ceb095d7cafac1cbf /apex
parent853ee379371ffa2e9aadd8dc3a96c4ef245e3924 (diff)
Move AppStandbyController calls out of UsageStats lock
Move reportEvent, flushToDisk, and dumping out of the UsageStats lock. Fixes: 158361735 Test: atest com.android.server.usage.AppStandbyControllerTests Test: atest android.app.usage.UsageStatsTest Test: manual ("adb shell dumpsys usagestats", with multiple users) Change-Id: I9f5c2adcb3ef71e82b969b35e7129e715fbfa00d
Diffstat (limited to 'apex')
-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 5ceea2aedb85..7e60da6945fa 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -857,7 +857,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
@@ -871,6 +871,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();
@@ -1608,18 +1609,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();
}
}
@@ -1796,9 +1790,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);
}
}