Loading apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java +13 −5 Original line number Diff line number Diff line Loading @@ -113,7 +113,9 @@ public class EconomyManager { /** @hide */ public static final String KEY_AM_INITIAL_CONSUMPTION_LIMIT = "am_initial_consumption_limit"; /** @hide */ public static final String KEY_AM_HARD_CONSUMPTION_LIMIT = "am_hard_consumption_limit"; public static final String KEY_AM_MIN_CONSUMPTION_LIMIT = "am_minimum_consumption_limit"; /** @hide */ public static final String KEY_AM_MAX_CONSUMPTION_LIMIT = "am_maximum_consumption_limit"; // TODO: Add AlarmManager modifier keys /** @hide */ public static final String KEY_AM_REWARD_TOP_ACTIVITY_INSTANT = Loading Loading @@ -242,7 +244,9 @@ public class EconomyManager { /** @hide */ public static final String KEY_JS_INITIAL_CONSUMPTION_LIMIT = "js_initial_consumption_limit"; /** @hide */ public static final String KEY_JS_HARD_CONSUMPTION_LIMIT = "js_hard_consumption_limit"; public static final String KEY_JS_MIN_CONSUMPTION_LIMIT = "js_minimum_consumption_limit"; /** @hide */ public static final String KEY_JS_MAX_CONSUMPTION_LIMIT = "js_maximum_consumption_limit"; // TODO: Add JobScheduler modifier keys /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_INSTANT = Loading Loading @@ -371,7 +375,9 @@ public class EconomyManager { /** @hide */ public static final long DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(2880); /** @hide */ public static final long DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(15_000); public static final long DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES = arcToCake(1440); /** @hide */ public static final long DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES = arcToCake(15_000); // TODO: add AlarmManager modifier default values /** @hide */ public static final long DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0); Loading Loading @@ -478,8 +484,10 @@ public class EconomyManager { /** @hide */ public static final long DEFAULT_JS_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(29_000); /** @hide */ // TODO: set hard limit based on device type (phone vs tablet vs etc) + battery size public static final long DEFAULT_JS_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); public static final long DEFAULT_JS_MIN_CONSUMPTION_LIMIT_CAKES = arcToCake(17_000); /** @hide */ // TODO: set maximum limit based on device type (phone vs tablet vs etc) + battery size public static final long DEFAULT_JS_MAX_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); // TODO: add JobScheduler modifier default values /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES = arcToCake(408); Loading apex/jobscheduler/service/java/com/android/server/tare/AlarmManagerEconomicPolicy.java +24 −11 Original line number Diff line number Diff line Loading @@ -33,9 +33,10 @@ import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NO import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MAX_SATIATED_BALANCE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES; Loading Loading @@ -71,9 +72,10 @@ import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAK import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP; import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE; import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP; import static android.app.tare.EconomyManager.KEY_AM_HARD_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_INITIAL_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MAX_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MAX_SATIATED_BALANCE; import static android.app.tare.EconomyManager.KEY_AM_MIN_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED; import static android.app.tare.EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP; import static android.app.tare.EconomyManager.KEY_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT; Loading Loading @@ -146,7 +148,8 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { private long mMinSatiatedBalanceOther; private long mMaxSatiatedBalance; private long mInitialSatiatedConsumptionLimit; private long mHardSatiatedConsumptionLimit; private long mMinSatiatedConsumptionLimit; private long mMaxSatiatedConsumptionLimit; private final KeyValueListParser mParser = new KeyValueListParser(','); private final Injector mInjector; Loading Loading @@ -199,8 +202,13 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { } @Override long getHardSatiatedConsumptionLimit() { return mHardSatiatedConsumptionLimit; long getMinSatiatedConsumptionLimit() { return mMinSatiatedConsumptionLimit; } @Override long getMaxSatiatedConsumptionLimit() { return mMaxSatiatedConsumptionLimit; } @NonNull Loading Loading @@ -240,11 +248,14 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { mMaxSatiatedBalance = getConstantAsCake(mParser, properties, KEY_AM_MAX_SATIATED_BALANCE, DEFAULT_AM_MAX_SATIATED_BALANCE_CAKES, Math.max(arcToCake(1), mMinSatiatedBalanceExempted)); mMinSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_MIN_CONSUMPTION_LIMIT, DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES, arcToCake(1)); mInitialSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_INITIAL_CONSUMPTION_LIMIT, DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES, arcToCake(1)); mHardSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_HARD_CONSUMPTION_LIMIT, DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES, mMinSatiatedConsumptionLimit); mMaxSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_MAX_CONSUMPTION_LIMIT, DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES, mInitialSatiatedConsumptionLimit); final long exactAllowWhileIdleWakeupBasePrice = getConstantAsCake(mParser, properties, Loading Loading @@ -396,9 +407,11 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { pw.decreaseIndent(); pw.print("Max satiated balance", cakeToString(mMaxSatiatedBalance)).println(); pw.print("Consumption limits: ["); pw.print(cakeToString(mMinSatiatedConsumptionLimit)); pw.print(", "); pw.print(cakeToString(mInitialSatiatedConsumptionLimit)); pw.print(", "); pw.print(cakeToString(mHardSatiatedConsumptionLimit)); pw.print(cakeToString(mMaxSatiatedConsumptionLimit)); pw.println("]"); pw.println(); Loading apex/jobscheduler/service/java/com/android/server/tare/CompleteEconomicPolicy.java +15 −6 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ public class CompleteEconomicPolicy extends EconomicPolicy { private int mEnabledEconomicPolicyIds = 0; private int[] mCostModifiers = EmptyArray.INT; private long mInitialConsumptionLimit; private long mHardConsumptionLimit; private long mMinConsumptionLimit; private long mMaxConsumptionLimit; CompleteEconomicPolicy(@NonNull InternalResourceService irs) { this(irs, new CompleteInjector()); Loading Loading @@ -100,14 +101,17 @@ public class CompleteEconomicPolicy extends EconomicPolicy { private void updateLimits() { long initialConsumptionLimit = 0; long hardConsumptionLimit = 0; long minConsumptionLimit = 0; long maxConsumptionLimit = 0; for (int i = 0; i < mEnabledEconomicPolicies.size(); ++i) { final EconomicPolicy economicPolicy = mEnabledEconomicPolicies.valueAt(i); initialConsumptionLimit += economicPolicy.getInitialSatiatedConsumptionLimit(); hardConsumptionLimit += economicPolicy.getHardSatiatedConsumptionLimit(); minConsumptionLimit += economicPolicy.getMinSatiatedConsumptionLimit(); maxConsumptionLimit += economicPolicy.getMaxSatiatedConsumptionLimit(); } mInitialConsumptionLimit = initialConsumptionLimit; mHardConsumptionLimit = hardConsumptionLimit; mMinConsumptionLimit = minConsumptionLimit; mMaxConsumptionLimit = maxConsumptionLimit; } @Override Loading @@ -134,8 +138,13 @@ public class CompleteEconomicPolicy extends EconomicPolicy { } @Override long getHardSatiatedConsumptionLimit() { return mHardConsumptionLimit; long getMinSatiatedConsumptionLimit() { return mMinConsumptionLimit; } @Override long getMaxSatiatedConsumptionLimit() { return mMaxConsumptionLimit; } @NonNull Loading apex/jobscheduler/service/java/com/android/server/tare/EconomicPolicy.java +10 −4 Original line number Diff line number Diff line Loading @@ -232,15 +232,21 @@ public abstract class EconomicPolicy { * Returns the maximum number of cakes that should be consumed during a full 100% discharge * cycle. This is the initial limit. The system may choose to increase the limit over time, * but the increased limit should never exceed the value returned from * {@link #getHardSatiatedConsumptionLimit()}. * {@link #getMaxSatiatedConsumptionLimit()}. */ abstract long getInitialSatiatedConsumptionLimit(); /** * Returns the maximum number of cakes that should be consumed during a full 100% discharge * cycle. This is the hard limit that should never be exceeded. * Returns the minimum number of cakes that should be available for consumption during a full * 100% discharge cycle. */ abstract long getMinSatiatedConsumptionLimit(); /** * Returns the maximum number of cakes that should be available for consumption during a full * 100% discharge cycle. */ abstract long getHardSatiatedConsumptionLimit(); abstract long getMaxSatiatedConsumptionLimit(); /** Return the set of modifiers that should apply to this policy's costs. */ @NonNull Loading apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +10 −11 Original line number Diff line number Diff line Loading @@ -670,7 +670,7 @@ public class InternalResourceService extends SystemService { final long shortfall = (mCurrentBatteryLevel - QUANTITATIVE_EASING_BATTERY_THRESHOLD) * currentConsumptionLimit / 100; final long newConsumptionLimit = Math.min(currentConsumptionLimit + shortfall, mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()); if (newConsumptionLimit != currentConsumptionLimit) { Slog.i(TAG, "Increasing consumption limit from " + cakeToString(currentConsumptionLimit) + " to " + cakeToString(newConsumptionLimit)); Loading Loading @@ -720,12 +720,12 @@ public class InternalResourceService extends SystemService { // The stock is too low. We're doing pretty well. We can increase the stock slightly // to let apps do more work in the background. newConsumptionLimit = Math.min((long) (currentConsumptionLimit * 1.01), mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()); } else if (percentageOfTarget < 100) { // The stock is too high IMO. We're below the target. Decrease the stock to reduce // background work. newConsumptionLimit = Math.max((long) (currentConsumptionLimit * .98), mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit()); } else { // The stock is just right. return; Loading Loading @@ -957,9 +957,9 @@ public class InternalResourceService extends SystemService { } else { mScribe.loadFromDiskLocked(); if (mScribe.getSatiatedConsumptionLimitLocked() < mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit() < mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit() || mScribe.getSatiatedConsumptionLimitLocked() > mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()) { > mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()) { // Reset the consumption limit since several factors may have changed. mScribe.setConsumptionLimitLocked( mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); Loading Loading @@ -1442,17 +1442,16 @@ public class InternalResourceService extends SystemService { private void updateEconomicPolicy() { synchronized (mLock) { final long initialLimit = mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit(); final long hardLimit = mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit(); final long minLimit = mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit(); final long maxLimit = mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit(); final int oldEnabledPolicies = mCompleteEconomicPolicy.getEnabledPolicyIds(); mCompleteEconomicPolicy.tearDown(); mCompleteEconomicPolicy = new CompleteEconomicPolicy(InternalResourceService.this); if (mIsEnabled && mBootPhase >= PHASE_THIRD_PARTY_APPS_CAN_START) { mCompleteEconomicPolicy.setup(getAllDeviceConfigProperties()); if (initialLimit != mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit() || hardLimit != mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()) { if (minLimit != mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit() || maxLimit != mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()) { // Reset the consumption limit since several factors may have changed. mScribe.setConsumptionLimitLocked( mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); Loading Loading
apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java +13 −5 Original line number Diff line number Diff line Loading @@ -113,7 +113,9 @@ public class EconomyManager { /** @hide */ public static final String KEY_AM_INITIAL_CONSUMPTION_LIMIT = "am_initial_consumption_limit"; /** @hide */ public static final String KEY_AM_HARD_CONSUMPTION_LIMIT = "am_hard_consumption_limit"; public static final String KEY_AM_MIN_CONSUMPTION_LIMIT = "am_minimum_consumption_limit"; /** @hide */ public static final String KEY_AM_MAX_CONSUMPTION_LIMIT = "am_maximum_consumption_limit"; // TODO: Add AlarmManager modifier keys /** @hide */ public static final String KEY_AM_REWARD_TOP_ACTIVITY_INSTANT = Loading Loading @@ -242,7 +244,9 @@ public class EconomyManager { /** @hide */ public static final String KEY_JS_INITIAL_CONSUMPTION_LIMIT = "js_initial_consumption_limit"; /** @hide */ public static final String KEY_JS_HARD_CONSUMPTION_LIMIT = "js_hard_consumption_limit"; public static final String KEY_JS_MIN_CONSUMPTION_LIMIT = "js_minimum_consumption_limit"; /** @hide */ public static final String KEY_JS_MAX_CONSUMPTION_LIMIT = "js_maximum_consumption_limit"; // TODO: Add JobScheduler modifier keys /** @hide */ public static final String KEY_JS_REWARD_APP_INSTALL_INSTANT = Loading Loading @@ -371,7 +375,9 @@ public class EconomyManager { /** @hide */ public static final long DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(2880); /** @hide */ public static final long DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(15_000); public static final long DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES = arcToCake(1440); /** @hide */ public static final long DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES = arcToCake(15_000); // TODO: add AlarmManager modifier default values /** @hide */ public static final long DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT_CAKES = arcToCake(0); Loading Loading @@ -478,8 +484,10 @@ public class EconomyManager { /** @hide */ public static final long DEFAULT_JS_INITIAL_CONSUMPTION_LIMIT_CAKES = arcToCake(29_000); /** @hide */ // TODO: set hard limit based on device type (phone vs tablet vs etc) + battery size public static final long DEFAULT_JS_HARD_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); public static final long DEFAULT_JS_MIN_CONSUMPTION_LIMIT_CAKES = arcToCake(17_000); /** @hide */ // TODO: set maximum limit based on device type (phone vs tablet vs etc) + battery size public static final long DEFAULT_JS_MAX_CONSUMPTION_LIMIT_CAKES = arcToCake(250_000); // TODO: add JobScheduler modifier default values /** @hide */ public static final long DEFAULT_JS_REWARD_APP_INSTALL_INSTANT_CAKES = arcToCake(408); Loading
apex/jobscheduler/service/java/com/android/server/tare/AlarmManagerEconomicPolicy.java +24 −11 Original line number Diff line number Diff line Loading @@ -33,9 +33,10 @@ import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NO import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MAX_SATIATED_BALANCE_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP_CAKES; import static android.app.tare.EconomyManager.DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT_CAKES; Loading Loading @@ -71,9 +72,10 @@ import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAK import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP; import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE; import static android.app.tare.EconomyManager.KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP; import static android.app.tare.EconomyManager.KEY_AM_HARD_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_INITIAL_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MAX_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MAX_SATIATED_BALANCE; import static android.app.tare.EconomyManager.KEY_AM_MIN_CONSUMPTION_LIMIT; import static android.app.tare.EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED; import static android.app.tare.EconomyManager.KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP; import static android.app.tare.EconomyManager.KEY_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT; Loading Loading @@ -146,7 +148,8 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { private long mMinSatiatedBalanceOther; private long mMaxSatiatedBalance; private long mInitialSatiatedConsumptionLimit; private long mHardSatiatedConsumptionLimit; private long mMinSatiatedConsumptionLimit; private long mMaxSatiatedConsumptionLimit; private final KeyValueListParser mParser = new KeyValueListParser(','); private final Injector mInjector; Loading Loading @@ -199,8 +202,13 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { } @Override long getHardSatiatedConsumptionLimit() { return mHardSatiatedConsumptionLimit; long getMinSatiatedConsumptionLimit() { return mMinSatiatedConsumptionLimit; } @Override long getMaxSatiatedConsumptionLimit() { return mMaxSatiatedConsumptionLimit; } @NonNull Loading Loading @@ -240,11 +248,14 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { mMaxSatiatedBalance = getConstantAsCake(mParser, properties, KEY_AM_MAX_SATIATED_BALANCE, DEFAULT_AM_MAX_SATIATED_BALANCE_CAKES, Math.max(arcToCake(1), mMinSatiatedBalanceExempted)); mMinSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_MIN_CONSUMPTION_LIMIT, DEFAULT_AM_MIN_CONSUMPTION_LIMIT_CAKES, arcToCake(1)); mInitialSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_INITIAL_CONSUMPTION_LIMIT, DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT_CAKES, arcToCake(1)); mHardSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_HARD_CONSUMPTION_LIMIT, DEFAULT_AM_HARD_CONSUMPTION_LIMIT_CAKES, mMinSatiatedConsumptionLimit); mMaxSatiatedConsumptionLimit = getConstantAsCake(mParser, properties, KEY_AM_MAX_CONSUMPTION_LIMIT, DEFAULT_AM_MAX_CONSUMPTION_LIMIT_CAKES, mInitialSatiatedConsumptionLimit); final long exactAllowWhileIdleWakeupBasePrice = getConstantAsCake(mParser, properties, Loading Loading @@ -396,9 +407,11 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy { pw.decreaseIndent(); pw.print("Max satiated balance", cakeToString(mMaxSatiatedBalance)).println(); pw.print("Consumption limits: ["); pw.print(cakeToString(mMinSatiatedConsumptionLimit)); pw.print(", "); pw.print(cakeToString(mInitialSatiatedConsumptionLimit)); pw.print(", "); pw.print(cakeToString(mHardSatiatedConsumptionLimit)); pw.print(cakeToString(mMaxSatiatedConsumptionLimit)); pw.println("]"); pw.println(); Loading
apex/jobscheduler/service/java/com/android/server/tare/CompleteEconomicPolicy.java +15 −6 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ public class CompleteEconomicPolicy extends EconomicPolicy { private int mEnabledEconomicPolicyIds = 0; private int[] mCostModifiers = EmptyArray.INT; private long mInitialConsumptionLimit; private long mHardConsumptionLimit; private long mMinConsumptionLimit; private long mMaxConsumptionLimit; CompleteEconomicPolicy(@NonNull InternalResourceService irs) { this(irs, new CompleteInjector()); Loading Loading @@ -100,14 +101,17 @@ public class CompleteEconomicPolicy extends EconomicPolicy { private void updateLimits() { long initialConsumptionLimit = 0; long hardConsumptionLimit = 0; long minConsumptionLimit = 0; long maxConsumptionLimit = 0; for (int i = 0; i < mEnabledEconomicPolicies.size(); ++i) { final EconomicPolicy economicPolicy = mEnabledEconomicPolicies.valueAt(i); initialConsumptionLimit += economicPolicy.getInitialSatiatedConsumptionLimit(); hardConsumptionLimit += economicPolicy.getHardSatiatedConsumptionLimit(); minConsumptionLimit += economicPolicy.getMinSatiatedConsumptionLimit(); maxConsumptionLimit += economicPolicy.getMaxSatiatedConsumptionLimit(); } mInitialConsumptionLimit = initialConsumptionLimit; mHardConsumptionLimit = hardConsumptionLimit; mMinConsumptionLimit = minConsumptionLimit; mMaxConsumptionLimit = maxConsumptionLimit; } @Override Loading @@ -134,8 +138,13 @@ public class CompleteEconomicPolicy extends EconomicPolicy { } @Override long getHardSatiatedConsumptionLimit() { return mHardConsumptionLimit; long getMinSatiatedConsumptionLimit() { return mMinConsumptionLimit; } @Override long getMaxSatiatedConsumptionLimit() { return mMaxConsumptionLimit; } @NonNull Loading
apex/jobscheduler/service/java/com/android/server/tare/EconomicPolicy.java +10 −4 Original line number Diff line number Diff line Loading @@ -232,15 +232,21 @@ public abstract class EconomicPolicy { * Returns the maximum number of cakes that should be consumed during a full 100% discharge * cycle. This is the initial limit. The system may choose to increase the limit over time, * but the increased limit should never exceed the value returned from * {@link #getHardSatiatedConsumptionLimit()}. * {@link #getMaxSatiatedConsumptionLimit()}. */ abstract long getInitialSatiatedConsumptionLimit(); /** * Returns the maximum number of cakes that should be consumed during a full 100% discharge * cycle. This is the hard limit that should never be exceeded. * Returns the minimum number of cakes that should be available for consumption during a full * 100% discharge cycle. */ abstract long getMinSatiatedConsumptionLimit(); /** * Returns the maximum number of cakes that should be available for consumption during a full * 100% discharge cycle. */ abstract long getHardSatiatedConsumptionLimit(); abstract long getMaxSatiatedConsumptionLimit(); /** Return the set of modifiers that should apply to this policy's costs. */ @NonNull Loading
apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +10 −11 Original line number Diff line number Diff line Loading @@ -670,7 +670,7 @@ public class InternalResourceService extends SystemService { final long shortfall = (mCurrentBatteryLevel - QUANTITATIVE_EASING_BATTERY_THRESHOLD) * currentConsumptionLimit / 100; final long newConsumptionLimit = Math.min(currentConsumptionLimit + shortfall, mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()); if (newConsumptionLimit != currentConsumptionLimit) { Slog.i(TAG, "Increasing consumption limit from " + cakeToString(currentConsumptionLimit) + " to " + cakeToString(newConsumptionLimit)); Loading Loading @@ -720,12 +720,12 @@ public class InternalResourceService extends SystemService { // The stock is too low. We're doing pretty well. We can increase the stock slightly // to let apps do more work in the background. newConsumptionLimit = Math.min((long) (currentConsumptionLimit * 1.01), mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()); } else if (percentageOfTarget < 100) { // The stock is too high IMO. We're below the target. Decrease the stock to reduce // background work. newConsumptionLimit = Math.max((long) (currentConsumptionLimit * .98), mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit()); } else { // The stock is just right. return; Loading Loading @@ -957,9 +957,9 @@ public class InternalResourceService extends SystemService { } else { mScribe.loadFromDiskLocked(); if (mScribe.getSatiatedConsumptionLimitLocked() < mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit() < mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit() || mScribe.getSatiatedConsumptionLimitLocked() > mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()) { > mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()) { // Reset the consumption limit since several factors may have changed. mScribe.setConsumptionLimitLocked( mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); Loading Loading @@ -1442,17 +1442,16 @@ public class InternalResourceService extends SystemService { private void updateEconomicPolicy() { synchronized (mLock) { final long initialLimit = mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit(); final long hardLimit = mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit(); final long minLimit = mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit(); final long maxLimit = mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit(); final int oldEnabledPolicies = mCompleteEconomicPolicy.getEnabledPolicyIds(); mCompleteEconomicPolicy.tearDown(); mCompleteEconomicPolicy = new CompleteEconomicPolicy(InternalResourceService.this); if (mIsEnabled && mBootPhase >= PHASE_THIRD_PARTY_APPS_CAN_START) { mCompleteEconomicPolicy.setup(getAllDeviceConfigProperties()); if (initialLimit != mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit() || hardLimit != mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit()) { if (minLimit != mCompleteEconomicPolicy.getMinSatiatedConsumptionLimit() || maxLimit != mCompleteEconomicPolicy.getMaxSatiatedConsumptionLimit()) { // Reset the consumption limit since several factors may have changed. mScribe.setConsumptionLimitLocked( mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()); Loading