From 2dabdcb391c40c4b298854276adb2da37727d3eb Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Mon, 9 Nov 2020 13:21:56 -0800 Subject: [PATCH] Updating method names. Some methods were required to only be called with the lock held but didn't have "Locked" in their name. Adding the suffix and updating tests to make sure we call them appropriately. Bug: 141645789 Test: atest QuotaControllerTest Change-Id: I5fe9b7bd1eb791bdcc245cf3609b26ec75541b91 --- .../android/server/job/JobSchedulerService.java | 4 +++- .../server/job/controllers/QuotaController.java | 15 ++++++++------- .../job/controllers/QuotaControllerTest.java | 11 ++++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index 34e82b0ce45e5..ca002ec992e2e 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -3139,7 +3139,9 @@ public class JobSchedulerService extends com.android.server.SystemService } void resetExecutionQuota(@NonNull String pkgName, int userId) { - mQuotaController.clearAppStats(userId, pkgName); + synchronized (mLock) { + mQuotaController.clearAppStatsLocked(userId, pkgName); + } } void resetScheduleQuota() { diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java index b7ace70f0cd4e..7d7de3be8249c 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java @@ -576,7 +576,7 @@ public final class QuotaController extends StateController { Slog.wtf(TAG, "Told app removed but given null package name."); return; } - clearAppStats(UserHandle.getUserId(uid), packageName); + clearAppStatsLocked(UserHandle.getUserId(uid), packageName); mForegroundUids.delete(uid); mUidToPackageCache.remove(uid); } @@ -592,7 +592,7 @@ public final class QuotaController extends StateController { } /** Drop all historical stats and stop tracking any active sessions for the specified app. */ - public void clearAppStats(int userId, @NonNull String packageName) { + public void clearAppStatsLocked(int userId, @NonNull String packageName) { mTrackedJobs.delete(userId, packageName); Timer timer = mPkgTimers.get(userId, packageName); if (timer != null) { @@ -1008,7 +1008,7 @@ public final class QuotaController extends StateController { } @VisibleForTesting - void incrementJobCount(final int userId, @NonNull final String packageName, int count) { + void incrementJobCountLocked(final int userId, @NonNull final String packageName, int count) { final long now = sElapsedRealtimeClock.millis(); ExecutionStats[] appStats = mExecutionStatsCache.get(userId, packageName); if (appStats == null) { @@ -1029,7 +1029,8 @@ public final class QuotaController extends StateController { } } - private void incrementTimingSessionCount(final int userId, @NonNull final String packageName) { + private void incrementTimingSessionCountLocked(final int userId, + @NonNull final String packageName) { final long now = sElapsedRealtimeClock.millis(); ExecutionStats[] appStats = mExecutionStatsCache.get(userId, packageName); if (appStats == null) { @@ -1481,7 +1482,7 @@ public final class QuotaController extends StateController { mRunningBgJobs.add(jobStatus); if (shouldTrackLocked()) { mBgJobCount++; - incrementJobCount(mPkg.userId, mPkg.packageName, 1); + incrementJobCountLocked(mPkg.userId, mPkg.packageName, 1); if (mRunningBgJobs.size() == 1) { // Started tracking the first job. mStartTimeElapsed = sElapsedRealtimeClock.millis(); @@ -1534,7 +1535,7 @@ public final class QuotaController extends StateController { // of jobs. // However, cancel the currently scheduled cutoff since it's not currently useful. cancelCutoff(); - incrementTimingSessionCount(mPkg.userId, mPkg.packageName); + incrementTimingSessionCountLocked(mPkg.userId, mPkg.packageName); } /** @@ -1581,7 +1582,7 @@ public final class QuotaController extends StateController { // repeatedly plugged in and unplugged, or an app changes foreground state // very frequently, the job count for a package may be artificially high. mBgJobCount = mRunningBgJobs.size(); - incrementJobCount(mPkg.userId, mPkg.packageName, mBgJobCount); + incrementJobCountLocked(mPkg.userId, mPkg.packageName, mBgJobCount); // Starting the timer means that all cached execution stats are now // incorrect. invalidateAllExecutionStatsLocked(mPkg.userId, mPkg.packageName); diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java index 79542084ac36e..77fef1274415a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java @@ -1430,8 +1430,8 @@ public class QuotaControllerTest { createTimingSession(now - (HOUR_IN_MILLIS), 3 * MINUTE_IN_MILLIS, 5)); mQuotaController.saveTimingSession(0, "com.android.test", createTimingSession(now - (5 * MINUTE_IN_MILLIS), 3 * MINUTE_IN_MILLIS, 5)); - mQuotaController.incrementJobCount(0, "com.android.test", 5); synchronized (mQuotaController.mLock) { + mQuotaController.incrementJobCountLocked(0, "com.android.test", 5); assertTrue(mQuotaController.isWithinQuotaLocked(0, "com.android.test", WORKING_INDEX)); } } @@ -1445,8 +1445,8 @@ public class QuotaControllerTest { createTimingSession(now - (HOUR_IN_MILLIS), 15 * MINUTE_IN_MILLIS, 25)); mQuotaController.saveTimingSession(0, "com.android.test.spam", createTimingSession(now - (5 * MINUTE_IN_MILLIS), 3 * MINUTE_IN_MILLIS, jobCount)); - mQuotaController.incrementJobCount(0, "com.android.test.spam", jobCount); synchronized (mQuotaController.mLock) { + mQuotaController.incrementJobCountLocked(0, "com.android.test.spam", jobCount); assertFalse(mQuotaController.isWithinQuotaLocked( 0, "com.android.test.spam", WORKING_INDEX)); } @@ -1471,8 +1471,8 @@ public class QuotaControllerTest { createTimingSession(now - (30 * MINUTE_IN_MILLIS), 3 * MINUTE_IN_MILLIS, 5)); mQuotaController.saveTimingSession(0, "com.android.test", createTimingSession(now - (5 * MINUTE_IN_MILLIS), 4 * MINUTE_IN_MILLIS, 5)); - mQuotaController.incrementJobCount(0, "com.android.test", 5); synchronized (mQuotaController.mLock) { + mQuotaController.incrementJobCountLocked(0, "com.android.test", 5); assertFalse(mQuotaController.isWithinQuotaLocked(0, "com.android.test", WORKING_INDEX)); } } @@ -1486,8 +1486,8 @@ public class QuotaControllerTest { createTimingSession(now - (HOUR_IN_MILLIS), 15 * MINUTE_IN_MILLIS, 25)); mQuotaController.saveTimingSession(0, "com.android.test", createTimingSession(now - (5 * MINUTE_IN_MILLIS), 3 * MINUTE_IN_MILLIS, jobCount)); - mQuotaController.incrementJobCount(0, "com.android.test", jobCount); synchronized (mQuotaController.mLock) { + mQuotaController.incrementJobCountLocked(0, "com.android.test", jobCount); assertFalse(mQuotaController.isWithinQuotaLocked(0, "com.android.test", WORKING_INDEX)); } } @@ -1637,9 +1637,10 @@ public class QuotaControllerTest { mQuotaController.saveTimingSession(0, "com.android.test", createTimingSession(now - ((10 - i) * MINUTE_IN_MILLIS), 30 * SECOND_IN_MILLIS, 2)); - mQuotaController.incrementJobCount(0, "com.android.test", 2); synchronized (mQuotaController.mLock) { + mQuotaController.incrementJobCountLocked(0, "com.android.test", 2); + assertEquals("Rare has incorrect quota status with " + (i + 1) + " sessions", i < 2, mQuotaController.isWithinQuotaLocked(0, "com.android.test", RARE_INDEX));