From ff5ee8b3b58b6b33ef736f6dde04138b1aa38340 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Wed, 17 Aug 2022 19:02:12 +0000 Subject: [PATCH] Adjust remaining supply as needed. 1. Update the remaining supply when TARE loads (from being turned on or the device booting up) in case the battery level changed significantly since the last time it was on. 2. Don't let the remaining supply go negative since that would negatively impact allowing free actions. Bug: 242605499 Bug: 242769323 Test: atest --rerun-until-failure 100 CtsAlarmManagerTestCases:BasicApiTests Change-Id: I2659c5823baab45dc3f40cbbe85078a03c5ce5fe --- .../server/tare/InternalResourceService.java | 3 +++ .../java/com/android/server/tare/Scribe.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java index da5a0c0e1e3f2..2b8272208c3ea 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java @@ -783,6 +783,9 @@ public class InternalResourceService extends SystemService { // Reset the consumption limit since several factors may have changed. mScribe.setConsumptionLimitLocked( mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); + } else { + // Adjust the supply in case battery level changed while the device was off. + adjustCreditSupplyLocked(true); } } scheduleUnusedWealthReclamationLocked(); diff --git a/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java b/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java index ed915cd88ebeb..2cae83f4aad54 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java @@ -19,6 +19,7 @@ package com.android.server.tare; import static android.text.format.DateUtils.HOUR_IN_MILLIS; import static com.android.server.tare.TareUtils.appToString; +import static com.android.server.tare.TareUtils.cakeToString; import android.annotation.NonNull; import android.annotation.Nullable; @@ -136,9 +137,15 @@ public class Scribe { @GuardedBy("mIrs.getLock()") void adjustRemainingConsumableCakesLocked(long delta) { - if (delta != 0) { - // No point doing any work if the change is 0. - mRemainingConsumableCakes += delta; + final long staleCakes = mRemainingConsumableCakes; + mRemainingConsumableCakes += delta; + if (mRemainingConsumableCakes < 0) { + Slog.w(TAG, "Overdrew consumable cakes by " + cakeToString(-mRemainingConsumableCakes)); + // A negative value would interfere with allowing free actions, so set the minimum as 0. + mRemainingConsumableCakes = 0; + } + if (mRemainingConsumableCakes != staleCakes) { + // No point doing any work if there was no functional change. postWrite(); } }