Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8372dac authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Separate minimum from initial consumption limit."

parents 56d45897 7549e3d5
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -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 =
@@ -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 =
@@ -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);
@@ -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);
+24 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -199,8 +202,13 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy {
    }

    @Override
    long getHardSatiatedConsumptionLimit() {
        return mHardSatiatedConsumptionLimit;
    long getMinSatiatedConsumptionLimit() {
        return mMinSatiatedConsumptionLimit;
    }

    @Override
    long getMaxSatiatedConsumptionLimit() {
        return mMaxSatiatedConsumptionLimit;
    }

    @NonNull
@@ -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,
@@ -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();
+15 −6
Original line number Diff line number Diff line
@@ -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());
@@ -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
@@ -134,8 +138,13 @@ public class CompleteEconomicPolicy extends EconomicPolicy {
    }

    @Override
    long getHardSatiatedConsumptionLimit() {
        return mHardConsumptionLimit;
    long getMinSatiatedConsumptionLimit() {
        return mMinConsumptionLimit;
    }

    @Override
    long getMaxSatiatedConsumptionLimit() {
        return mMaxConsumptionLimit;
    }

    @NonNull
+10 −4
Original line number Diff line number Diff line
@@ -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
+10 −11
Original line number Diff line number Diff line
@@ -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));
@@ -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;
@@ -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());
@@ -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