Merge "Rename narc to cake." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a300bfc5e0
@@ -28,8 +28,8 @@ import static com.android.server.tare.EconomicPolicy.TYPE_REWARD;
|
||||
import static com.android.server.tare.EconomicPolicy.eventToString;
|
||||
import static com.android.server.tare.EconomicPolicy.getEventType;
|
||||
import static com.android.server.tare.TareUtils.appToString;
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
import static com.android.server.tare.TareUtils.getCurrentTimeMillis;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -161,7 +161,7 @@ class Agent {
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private boolean isAffordableLocked(long balance, long price, long ctp) {
|
||||
return balance >= price && mScribe.getRemainingConsumableNarcsLocked() >= ctp;
|
||||
return balance >= price && mScribe.getRemainingConsumableCakesLocked() >= ctp;
|
||||
}
|
||||
|
||||
@GuardedBy("mLock")
|
||||
@@ -464,13 +464,13 @@ class Agent {
|
||||
+ eventToString(transaction.eventId)
|
||||
+ (transaction.tag == null ? "" : ":" + transaction.tag)
|
||||
+ " for " + appToString(userId, pkgName)
|
||||
+ " by " + narcToString(transaction.delta - newDelta));
|
||||
+ " by " + cakeToString(transaction.delta - newDelta));
|
||||
transaction = new Ledger.Transaction(
|
||||
transaction.startTimeMs, transaction.endTimeMs,
|
||||
transaction.eventId, transaction.tag, newDelta, transaction.ctp);
|
||||
}
|
||||
ledger.recordTransaction(transaction);
|
||||
mScribe.adjustRemainingConsumableNarcsLocked(-transaction.ctp);
|
||||
mScribe.adjustRemainingConsumableCakesLocked(-transaction.ctp);
|
||||
if (transaction.delta != 0 && notifyOnAffordabilityChange) {
|
||||
final ArraySet<ActionAffordabilityNote> actionAffordabilityNotes =
|
||||
mActionAffordabilityNotes.get(userId, pkgName);
|
||||
@@ -724,7 +724,7 @@ class Agent {
|
||||
private void reclaimAssetsLocked(final int userId, @NonNull final String pkgName) {
|
||||
final Ledger ledger = mScribe.getLedgerLocked(userId, pkgName);
|
||||
if (ledger.getCurrentBalance() != 0) {
|
||||
mScribe.adjustRemainingConsumableNarcsLocked(-ledger.getCurrentBalance());
|
||||
mScribe.adjustRemainingConsumableCakesLocked(-ledger.getCurrentBalance());
|
||||
}
|
||||
mScribe.discardLedgerLocked(userId, pkgName);
|
||||
mCurrentOngoingEvents.delete(userId, pkgName);
|
||||
@@ -872,7 +872,7 @@ class Agent {
|
||||
return;
|
||||
}
|
||||
mTrendCalculator.reset(getBalanceLocked(userId, pkgName),
|
||||
mScribe.getRemainingConsumableNarcsLocked(),
|
||||
mScribe.getRemainingConsumableCakesLocked(),
|
||||
mActionAffordabilityNotes.get(userId, pkgName));
|
||||
ongoingEvents.forEach(mTrendCalculator);
|
||||
final long lowerTimeMs = mTrendCalculator.getTimeToCrossLowerThresholdMs();
|
||||
@@ -1260,11 +1260,11 @@ class Agent {
|
||||
pw.print(" runtime=");
|
||||
TimeUtils.formatDuration(nowElapsed - ongoingEvent.startTimeElapsed, pw);
|
||||
pw.print(" delta/sec=");
|
||||
pw.print(narcToString(ongoingEvent.getDeltaPerSec()));
|
||||
pw.print(cakeToString(ongoingEvent.getDeltaPerSec()));
|
||||
final long ctp = ongoingEvent.getCtpPerSec();
|
||||
if (ctp != 0) {
|
||||
pw.print(" ctp/sec=");
|
||||
pw.print(narcToString(ongoingEvent.getCtpPerSec()));
|
||||
pw.print(cakeToString(ongoingEvent.getCtpPerSec()));
|
||||
}
|
||||
pw.print(" refCount=");
|
||||
pw.print(ongoingEvent.refCount);
|
||||
|
||||
@@ -97,8 +97,8 @@ import static com.android.server.tare.Modifier.COST_MODIFIER_CHARGING;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_DEVICE_IDLE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_POWER_SAVE_MODE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_PROCESS_STATE;
|
||||
import static com.android.server.tare.TareUtils.arcToNarc;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
import static com.android.server.tare.TareUtils.arcToCake;
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -219,143 +219,143 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy {
|
||||
Slog.e(TAG, "Global setting key incorrect: ", e);
|
||||
}
|
||||
|
||||
mMinSatiatedBalanceExempted = arcToNarc(mParser.getInt(KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED,
|
||||
mMinSatiatedBalanceExempted = arcToCake(mParser.getInt(KEY_AM_MIN_SATIATED_BALANCE_EXEMPTED,
|
||||
DEFAULT_AM_MIN_SATIATED_BALANCE_EXEMPTED));
|
||||
mMinSatiatedBalanceOther = arcToNarc(mParser.getInt(KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP,
|
||||
mMinSatiatedBalanceOther = arcToCake(mParser.getInt(KEY_AM_MIN_SATIATED_BALANCE_OTHER_APP,
|
||||
DEFAULT_AM_MIN_SATIATED_BALANCE_OTHER_APP));
|
||||
mMaxSatiatedBalance = arcToNarc(mParser.getInt(KEY_AM_MAX_SATIATED_BALANCE,
|
||||
mMaxSatiatedBalance = arcToCake(mParser.getInt(KEY_AM_MAX_SATIATED_BALANCE,
|
||||
DEFAULT_AM_MAX_SATIATED_BALANCE));
|
||||
mInitialSatiatedConsumptionLimit = arcToNarc(mParser.getInt(
|
||||
mInitialSatiatedConsumptionLimit = arcToCake(mParser.getInt(
|
||||
KEY_AM_INITIAL_CONSUMPTION_LIMIT, DEFAULT_AM_INITIAL_CONSUMPTION_LIMIT));
|
||||
mHardSatiatedConsumptionLimit = Math.max(mInitialSatiatedConsumptionLimit,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_HARD_CONSUMPTION_LIMIT, DEFAULT_AM_HARD_CONSUMPTION_LIMIT)));
|
||||
|
||||
final long exactAllowWhileIdleWakeupBasePrice = arcToNarc(
|
||||
final long exactAllowWhileIdleWakeupBasePrice = arcToCake(
|
||||
mParser.getInt(KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_BASE_PRICE));
|
||||
|
||||
mActions.put(ACTION_ALARM_WAKEUP_EXACT_ALLOW_WHILE_IDLE,
|
||||
new Action(ACTION_ALARM_WAKEUP_EXACT_ALLOW_WHILE_IDLE,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_WAKEUP_CTP)),
|
||||
exactAllowWhileIdleWakeupBasePrice));
|
||||
mActions.put(ACTION_ALARM_WAKEUP_EXACT,
|
||||
new Action(ACTION_ALARM_WAKEUP_EXACT,
|
||||
arcToNarc(mParser.getInt(KEY_AM_ACTION_ALARM_EXACT_WAKEUP_CTP,
|
||||
arcToCake(mParser.getInt(KEY_AM_ACTION_ALARM_EXACT_WAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_EXACT_WAKEUP_BASE_PRICE))));
|
||||
|
||||
final long inexactAllowWhileIdleWakeupBasePrice =
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_BASE_PRICE));
|
||||
|
||||
mActions.put(ACTION_ALARM_WAKEUP_INEXACT_ALLOW_WHILE_IDLE,
|
||||
new Action(ACTION_ALARM_WAKEUP_INEXACT_ALLOW_WHILE_IDLE,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_WAKEUP_CTP)),
|
||||
inexactAllowWhileIdleWakeupBasePrice));
|
||||
mActions.put(ACTION_ALARM_WAKEUP_INEXACT,
|
||||
new Action(ACTION_ALARM_WAKEUP_INEXACT,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_CTP)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_INEXACT_WAKEUP_BASE_PRICE))));
|
||||
|
||||
final long exactAllowWhileIdleNonWakeupBasePrice =
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE));
|
||||
|
||||
mActions.put(ACTION_ALARM_NONWAKEUP_EXACT_ALLOW_WHILE_IDLE,
|
||||
new Action(ACTION_ALARM_NONWAKEUP_EXACT_ALLOW_WHILE_IDLE,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_EXACT_NONWAKEUP_CTP)),
|
||||
exactAllowWhileIdleNonWakeupBasePrice));
|
||||
mActions.put(ACTION_ALARM_NONWAKEUP_EXACT,
|
||||
new Action(ACTION_ALARM_NONWAKEUP_EXACT,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_CTP)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_EXACT_NONWAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_EXACT_NONWAKEUP_BASE_PRICE))));
|
||||
|
||||
final long inexactAllowWhileIdleNonWakeupBasePrice =
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_BASE_PRICE));
|
||||
|
||||
mActions.put(ACTION_ALARM_NONWAKEUP_INEXACT_ALLOW_WHILE_IDLE,
|
||||
new Action(ACTION_ALARM_NONWAKEUP_INEXACT_ALLOW_WHILE_IDLE,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_ALLOW_WHILE_IDLE_INEXACT_NONWAKEUP_CTP)),
|
||||
inexactAllowWhileIdleNonWakeupBasePrice));
|
||||
mActions.put(ACTION_ALARM_NONWAKEUP_INEXACT,
|
||||
new Action(ACTION_ALARM_NONWAKEUP_INEXACT,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_CTP)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_INEXACT_NONWAKEUP_BASE_PRICE))));
|
||||
mActions.put(ACTION_ALARM_CLOCK,
|
||||
new Action(ACTION_ALARM_CLOCK,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALARMCLOCK_CTP,
|
||||
DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_CTP)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE,
|
||||
DEFAULT_AM_ACTION_ALARM_ALARMCLOCK_BASE_PRICE))));
|
||||
|
||||
mRewards.put(REWARD_TOP_ACTIVITY, new Reward(REWARD_TOP_ACTIVITY,
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_TOP_ACTIVITY_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_TOP_ACTIVITY_INSTANT,
|
||||
DEFAULT_AM_REWARD_TOP_ACTIVITY_INSTANT)),
|
||||
(long) (arcToNarc(1) * mParser.getFloat(KEY_AM_REWARD_TOP_ACTIVITY_ONGOING,
|
||||
(long) (arcToCake(1) * mParser.getFloat(KEY_AM_REWARD_TOP_ACTIVITY_ONGOING,
|
||||
DEFAULT_AM_REWARD_TOP_ACTIVITY_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_TOP_ACTIVITY_MAX,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_TOP_ACTIVITY_MAX,
|
||||
DEFAULT_AM_REWARD_TOP_ACTIVITY_MAX))));
|
||||
mRewards.put(REWARD_NOTIFICATION_SEEN, new Reward(REWARD_NOTIFICATION_SEEN,
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_INSTANT,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_SEEN_INSTANT)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_ONGOING,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_ONGOING,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_SEEN_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_MAX,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_NOTIFICATION_SEEN_MAX,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_SEEN_MAX))));
|
||||
mRewards.put(REWARD_NOTIFICATION_INTERACTION,
|
||||
new Reward(REWARD_NOTIFICATION_INTERACTION,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_REWARD_NOTIFICATION_INTERACTION_MAX,
|
||||
DEFAULT_AM_REWARD_NOTIFICATION_INTERACTION_MAX))));
|
||||
mRewards.put(REWARD_WIDGET_INTERACTION, new Reward(REWARD_WIDGET_INTERACTION,
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_INSTANT,
|
||||
DEFAULT_AM_REWARD_WIDGET_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_ONGOING,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_ONGOING,
|
||||
DEFAULT_AM_REWARD_WIDGET_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_MAX,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_WIDGET_INTERACTION_MAX,
|
||||
DEFAULT_AM_REWARD_WIDGET_INTERACTION_MAX))));
|
||||
mRewards.put(REWARD_OTHER_USER_INTERACTION,
|
||||
new Reward(REWARD_OTHER_USER_INTERACTION,
|
||||
arcToNarc(mParser.getInt(KEY_AM_REWARD_OTHER_USER_INTERACTION_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_AM_REWARD_OTHER_USER_INTERACTION_INSTANT,
|
||||
DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_REWARD_OTHER_USER_INTERACTION_ONGOING,
|
||||
DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_AM_REWARD_OTHER_USER_INTERACTION_MAX,
|
||||
DEFAULT_AM_REWARD_OTHER_USER_INTERACTION_MAX))));
|
||||
}
|
||||
@@ -364,14 +364,14 @@ public class AlarmManagerEconomicPolicy extends EconomicPolicy {
|
||||
void dump(IndentingPrintWriter pw) {
|
||||
pw.println("Min satiated balances:");
|
||||
pw.increaseIndent();
|
||||
pw.print("Exempted", narcToString(mMinSatiatedBalanceExempted)).println();
|
||||
pw.print("Other", narcToString(mMinSatiatedBalanceOther)).println();
|
||||
pw.print("Exempted", cakeToString(mMinSatiatedBalanceExempted)).println();
|
||||
pw.print("Other", cakeToString(mMinSatiatedBalanceOther)).println();
|
||||
pw.decreaseIndent();
|
||||
pw.print("Max satiated balance", narcToString(mMaxSatiatedBalance)).println();
|
||||
pw.print("Max satiated balance", cakeToString(mMaxSatiatedBalance)).println();
|
||||
pw.print("Consumption limits: [");
|
||||
pw.print(narcToString(mInitialSatiatedConsumptionLimit));
|
||||
pw.print(cakeToString(mInitialSatiatedConsumptionLimit));
|
||||
pw.print(", ");
|
||||
pw.print(narcToString(mHardSatiatedConsumptionLimit));
|
||||
pw.print(cakeToString(mHardSatiatedConsumptionLimit));
|
||||
pw.println("]");
|
||||
|
||||
pw.println();
|
||||
|
||||
@@ -21,7 +21,7 @@ import static com.android.server.tare.Modifier.COST_MODIFIER_DEVICE_IDLE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_POWER_SAVE_MODE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_PROCESS_STATE;
|
||||
import static com.android.server.tare.Modifier.NUM_COST_MODIFIERS;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
|
||||
import android.annotation.CallSuper;
|
||||
import android.annotation.IntDef;
|
||||
@@ -203,7 +203,7 @@ public abstract class EconomicPolicy {
|
||||
abstract long getMaxSatiatedBalance();
|
||||
|
||||
/**
|
||||
* Returns the maximum number of narcs that should be consumed during a full 100% discharge
|
||||
* 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()}.
|
||||
@@ -211,7 +211,7 @@ public abstract class EconomicPolicy {
|
||||
abstract long getInitialSatiatedConsumptionLimit();
|
||||
|
||||
/**
|
||||
* Returns the maximum number of narcs that should be consumed during a full 100% discharge
|
||||
* 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.
|
||||
*/
|
||||
abstract long getHardSatiatedConsumptionLimit();
|
||||
@@ -430,9 +430,9 @@ public abstract class EconomicPolicy {
|
||||
pw.print(actionToString(action.id));
|
||||
pw.print(": ");
|
||||
pw.print("ctp=");
|
||||
pw.print(narcToString(action.costToProduce));
|
||||
pw.print(cakeToString(action.costToProduce));
|
||||
pw.print(", basePrice=");
|
||||
pw.print(narcToString(action.basePrice));
|
||||
pw.print(cakeToString(action.basePrice));
|
||||
pw.println();
|
||||
}
|
||||
|
||||
@@ -440,11 +440,11 @@ public abstract class EconomicPolicy {
|
||||
pw.print(rewardToString(reward.id));
|
||||
pw.print(": ");
|
||||
pw.print("instant=");
|
||||
pw.print(narcToString(reward.instantReward));
|
||||
pw.print(cakeToString(reward.instantReward));
|
||||
pw.print(", ongoing/sec=");
|
||||
pw.print(narcToString(reward.ongoingRewardPerSecond));
|
||||
pw.print(cakeToString(reward.ongoingRewardPerSecond));
|
||||
pw.print(", maxDaily=");
|
||||
pw.print(narcToString(reward.maxDailyReward));
|
||||
pw.print(cakeToString(reward.maxDailyReward));
|
||||
pw.println();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ import static android.text.format.DateUtils.HOUR_IN_MILLIS;
|
||||
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
import static com.android.server.tare.TareUtils.appToString;
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
import static com.android.server.tare.TareUtils.getCurrentTimeMillis;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -528,9 +528,9 @@ public class InternalResourceService extends SystemService {
|
||||
void maybePerformQuantitativeEasingLocked() {
|
||||
// We don't need to increase the limit if the device runs out of consumable credits
|
||||
// when the battery is low.
|
||||
final long remainingConsumableNarcs = mScribe.getRemainingConsumableNarcsLocked();
|
||||
final long remainingConsumableCakes = mScribe.getRemainingConsumableCakesLocked();
|
||||
if (mCurrentBatteryLevel <= QUANTITATIVE_EASING_BATTERY_THRESHOLD
|
||||
|| remainingConsumableNarcs > 0) {
|
||||
|| remainingConsumableCakes > 0) {
|
||||
return;
|
||||
}
|
||||
final long currentConsumptionLimit = mScribe.getSatiatedConsumptionLimitLocked();
|
||||
@@ -539,8 +539,8 @@ public class InternalResourceService extends SystemService {
|
||||
final long newConsumptionLimit = Math.min(currentConsumptionLimit + shortfall,
|
||||
mCompleteEconomicPolicy.getHardSatiatedConsumptionLimit());
|
||||
if (newConsumptionLimit != currentConsumptionLimit) {
|
||||
Slog.i(TAG, "Increasing consumption limit from " + narcToString(currentConsumptionLimit)
|
||||
+ " to " + narcToString(newConsumptionLimit));
|
||||
Slog.i(TAG, "Increasing consumption limit from " + cakeToString(currentConsumptionLimit)
|
||||
+ " to " + cakeToString(newConsumptionLimit));
|
||||
mScribe.setConsumptionLimitLocked(newConsumptionLimit);
|
||||
adjustCreditSupplyLocked(/* allowIncrease */ true);
|
||||
}
|
||||
@@ -562,16 +562,16 @@ public class InternalResourceService extends SystemService {
|
||||
@GuardedBy("mLock")
|
||||
private void adjustCreditSupplyLocked(boolean allowIncrease) {
|
||||
final long newLimit = getConsumptionLimitLocked();
|
||||
final long remainingConsumableNarcs = mScribe.getRemainingConsumableNarcsLocked();
|
||||
if (remainingConsumableNarcs == newLimit) {
|
||||
final long remainingConsumableCakes = mScribe.getRemainingConsumableCakesLocked();
|
||||
if (remainingConsumableCakes == newLimit) {
|
||||
return;
|
||||
}
|
||||
if (remainingConsumableNarcs > newLimit) {
|
||||
mScribe.adjustRemainingConsumableNarcsLocked(newLimit - remainingConsumableNarcs);
|
||||
if (remainingConsumableCakes > newLimit) {
|
||||
mScribe.adjustRemainingConsumableCakesLocked(newLimit - remainingConsumableCakes);
|
||||
} else if (allowIncrease) {
|
||||
final double perc = mCurrentBatteryLevel / 100d;
|
||||
final long shortfall = newLimit - remainingConsumableNarcs;
|
||||
mScribe.adjustRemainingConsumableNarcsLocked((long) (perc * shortfall));
|
||||
final long shortfall = newLimit - remainingConsumableCakes;
|
||||
mScribe.adjustRemainingConsumableCakesLocked((long) (perc * shortfall));
|
||||
}
|
||||
mAgent.onCreditSupplyChanged();
|
||||
}
|
||||
@@ -919,7 +919,7 @@ public class InternalResourceService extends SystemService {
|
||||
+ cost.price * (action.ongoingDurationMs / 1000);
|
||||
}
|
||||
return mAgent.getBalanceLocked(userId, pkgName) >= requiredBalance
|
||||
&& mScribe.getRemainingConsumableNarcsLocked() >= requiredBalance;
|
||||
&& mScribe.getRemainingConsumableCakesLocked() >= requiredBalance;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -947,7 +947,7 @@ public class InternalResourceService extends SystemService {
|
||||
}
|
||||
final long minBalance = Math.min(
|
||||
mAgent.getBalanceLocked(userId, pkgName),
|
||||
mScribe.getRemainingConsumableNarcsLocked());
|
||||
mScribe.getRemainingConsumableCakesLocked());
|
||||
return minBalance * 1000 / totalCostPerSecond;
|
||||
}
|
||||
}
|
||||
@@ -1103,21 +1103,21 @@ public class InternalResourceService extends SystemService {
|
||||
|
||||
final long consumptionLimit = getConsumptionLimitLocked();
|
||||
pw.print("Consumption limit (current/initial-satiated/current-satiated): ");
|
||||
pw.print(narcToString(consumptionLimit));
|
||||
pw.print(cakeToString(consumptionLimit));
|
||||
pw.print("/");
|
||||
pw.print(narcToString(mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()));
|
||||
pw.print(cakeToString(mCompleteEconomicPolicy.getInitialSatiatedConsumptionLimit()));
|
||||
pw.print("/");
|
||||
pw.println(narcToString(mScribe.getSatiatedConsumptionLimitLocked()));
|
||||
pw.println(cakeToString(mScribe.getSatiatedConsumptionLimitLocked()));
|
||||
|
||||
final long remainingConsumable = mScribe.getRemainingConsumableNarcsLocked();
|
||||
final long remainingConsumable = mScribe.getRemainingConsumableCakesLocked();
|
||||
pw.print("Goods remaining: ");
|
||||
pw.print(narcToString(remainingConsumable));
|
||||
pw.print(cakeToString(remainingConsumable));
|
||||
pw.print(" (");
|
||||
pw.print(String.format("%.2f", 100f * remainingConsumable / consumptionLimit));
|
||||
pw.println("% of current limit)");
|
||||
|
||||
pw.print("Device wealth: ");
|
||||
pw.println(narcToString(mScribe.getNarcsInCirculationForLoggingLocked()));
|
||||
pw.println(cakeToString(mScribe.getCakesInCirculationForLoggingLocked()));
|
||||
|
||||
pw.println();
|
||||
pw.print("Exempted apps", mExemptedApps);
|
||||
|
||||
@@ -106,8 +106,8 @@ import static com.android.server.tare.Modifier.COST_MODIFIER_CHARGING;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_DEVICE_IDLE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_POWER_SAVE_MODE;
|
||||
import static com.android.server.tare.Modifier.COST_MODIFIER_PROCESS_STATE;
|
||||
import static com.android.server.tare.TareUtils.arcToNarc;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
import static com.android.server.tare.TareUtils.arcToCake;
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -221,116 +221,116 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy {
|
||||
Slog.e(TAG, "Global setting key incorrect: ", e);
|
||||
}
|
||||
|
||||
mMinSatiatedBalanceExempted = arcToNarc(
|
||||
mMinSatiatedBalanceExempted = arcToCake(
|
||||
mParser.getInt(KEY_JS_MIN_SATIATED_BALANCE_EXEMPTED,
|
||||
DEFAULT_JS_MIN_SATIATED_BALANCE_EXEMPTED));
|
||||
mMinSatiatedBalanceOther = arcToNarc(
|
||||
mMinSatiatedBalanceOther = arcToCake(
|
||||
mParser.getInt(KEY_JS_MIN_SATIATED_BALANCE_OTHER_APP,
|
||||
DEFAULT_JS_MIN_SATIATED_BALANCE_OTHER_APP));
|
||||
mMaxSatiatedBalance = arcToNarc(mParser.getInt(KEY_JS_MAX_SATIATED_BALANCE,
|
||||
mMaxSatiatedBalance = arcToCake(mParser.getInt(KEY_JS_MAX_SATIATED_BALANCE,
|
||||
DEFAULT_JS_MAX_SATIATED_BALANCE));
|
||||
mInitialSatiatedConsumptionLimit = arcToNarc(mParser.getInt(
|
||||
mInitialSatiatedConsumptionLimit = arcToCake(mParser.getInt(
|
||||
KEY_JS_INITIAL_CONSUMPTION_LIMIT, DEFAULT_JS_INITIAL_CONSUMPTION_LIMIT));
|
||||
mHardSatiatedConsumptionLimit = Math.max(mInitialSatiatedConsumptionLimit,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_HARD_CONSUMPTION_LIMIT, DEFAULT_JS_HARD_CONSUMPTION_LIMIT)));
|
||||
|
||||
mActions.put(ACTION_JOB_MAX_START, new Action(ACTION_JOB_MAX_START,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MAX_START_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MAX_START_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_MAX_START_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MAX_START_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MAX_START_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_MAX_START_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_MAX_RUNNING, new Action(ACTION_JOB_MAX_RUNNING,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MAX_RUNNING_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MAX_RUNNING_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_MAX_RUNNING_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_MAX_RUNNING_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_HIGH_START, new Action(ACTION_JOB_HIGH_START,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_START_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_START_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_HIGH_START_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_START_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_START_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_HIGH_START_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_HIGH_RUNNING, new Action(ACTION_JOB_HIGH_RUNNING,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_RUNNING_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_RUNNING_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_HIGH_RUNNING_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_DEFAULT_START, new Action(ACTION_JOB_DEFAULT_START,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_START_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_START_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_DEFAULT_START_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_DEFAULT_START_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_DEFAULT_RUNNING, new Action(ACTION_JOB_DEFAULT_RUNNING,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_RUNNING_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_RUNNING_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_DEFAULT_RUNNING_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_LOW_START, new Action(ACTION_JOB_LOW_START,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_LOW_START_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_LOW_START_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_LOW_START_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_LOW_START_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_LOW_START_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_LOW_START_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_LOW_RUNNING, new Action(ACTION_JOB_LOW_RUNNING,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_LOW_RUNNING_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_LOW_RUNNING_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_LOW_RUNNING_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_LOW_RUNNING_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_MIN_START, new Action(ACTION_JOB_MIN_START,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MIN_START_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MIN_START_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_MIN_START_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MIN_START_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MIN_START_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_MIN_START_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_MIN_RUNNING, new Action(ACTION_JOB_MIN_RUNNING,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MIN_RUNNING_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MIN_RUNNING_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_MIN_RUNNING_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE))));
|
||||
mActions.put(ACTION_JOB_TIMEOUT, new Action(ACTION_JOB_TIMEOUT,
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP,
|
||||
DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_CTP)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE,
|
||||
arcToCake(mParser.getInt(KEY_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE,
|
||||
DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE))));
|
||||
|
||||
mRewards.put(REWARD_TOP_ACTIVITY, new Reward(REWARD_TOP_ACTIVITY,
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_TOP_ACTIVITY_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_TOP_ACTIVITY_INSTANT,
|
||||
DEFAULT_JS_REWARD_TOP_ACTIVITY_INSTANT)),
|
||||
(long) (arcToNarc(1) * mParser.getFloat(KEY_JS_REWARD_TOP_ACTIVITY_ONGOING,
|
||||
(long) (arcToCake(1) * mParser.getFloat(KEY_JS_REWARD_TOP_ACTIVITY_ONGOING,
|
||||
DEFAULT_JS_REWARD_TOP_ACTIVITY_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_TOP_ACTIVITY_MAX,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_TOP_ACTIVITY_MAX,
|
||||
DEFAULT_JS_REWARD_TOP_ACTIVITY_MAX))));
|
||||
mRewards.put(REWARD_NOTIFICATION_SEEN, new Reward(REWARD_NOTIFICATION_SEEN,
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_INSTANT,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_SEEN_INSTANT)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_ONGOING,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_ONGOING,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_SEEN_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_MAX,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_NOTIFICATION_SEEN_MAX,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_SEEN_MAX))));
|
||||
mRewards.put(REWARD_NOTIFICATION_INTERACTION,
|
||||
new Reward(REWARD_NOTIFICATION_INTERACTION,
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_REWARD_NOTIFICATION_INTERACTION_MAX,
|
||||
DEFAULT_JS_REWARD_NOTIFICATION_INTERACTION_MAX))));
|
||||
mRewards.put(REWARD_WIDGET_INTERACTION, new Reward(REWARD_WIDGET_INTERACTION,
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_INSTANT,
|
||||
DEFAULT_JS_REWARD_WIDGET_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_ONGOING,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_ONGOING,
|
||||
DEFAULT_JS_REWARD_WIDGET_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_MAX,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_WIDGET_INTERACTION_MAX,
|
||||
DEFAULT_JS_REWARD_WIDGET_INTERACTION_MAX))));
|
||||
mRewards.put(REWARD_OTHER_USER_INTERACTION,
|
||||
new Reward(REWARD_OTHER_USER_INTERACTION,
|
||||
arcToNarc(mParser.getInt(KEY_JS_REWARD_OTHER_USER_INTERACTION_INSTANT,
|
||||
arcToCake(mParser.getInt(KEY_JS_REWARD_OTHER_USER_INTERACTION_INSTANT,
|
||||
DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_INSTANT)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_REWARD_OTHER_USER_INTERACTION_ONGOING,
|
||||
DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_ONGOING)),
|
||||
arcToNarc(mParser.getInt(
|
||||
arcToCake(mParser.getInt(
|
||||
KEY_JS_REWARD_OTHER_USER_INTERACTION_MAX,
|
||||
DEFAULT_JS_REWARD_OTHER_USER_INTERACTION_MAX))));
|
||||
}
|
||||
@@ -339,14 +339,14 @@ public class JobSchedulerEconomicPolicy extends EconomicPolicy {
|
||||
void dump(IndentingPrintWriter pw) {
|
||||
pw.println("Min satiated balances:");
|
||||
pw.increaseIndent();
|
||||
pw.print("Exempted", narcToString(mMinSatiatedBalanceExempted)).println();
|
||||
pw.print("Other", narcToString(mMinSatiatedBalanceOther)).println();
|
||||
pw.print("Exempted", cakeToString(mMinSatiatedBalanceExempted)).println();
|
||||
pw.print("Other", cakeToString(mMinSatiatedBalanceOther)).println();
|
||||
pw.decreaseIndent();
|
||||
pw.print("Max satiated balance", narcToString(mMaxSatiatedBalance)).println();
|
||||
pw.print("Max satiated balance", cakeToString(mMaxSatiatedBalance)).println();
|
||||
pw.print("Consumption limits: [");
|
||||
pw.print(narcToString(mInitialSatiatedConsumptionLimit));
|
||||
pw.print(cakeToString(mInitialSatiatedConsumptionLimit));
|
||||
pw.print(", ");
|
||||
pw.print(narcToString(mHardSatiatedConsumptionLimit));
|
||||
pw.print(cakeToString(mHardSatiatedConsumptionLimit));
|
||||
pw.println("]");
|
||||
|
||||
pw.println();
|
||||
|
||||
@@ -18,9 +18,9 @@ package com.android.server.tare;
|
||||
|
||||
import static android.text.format.DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
import static com.android.server.tare.TareUtils.cakeToString;
|
||||
import static com.android.server.tare.TareUtils.dumpTime;
|
||||
import static com.android.server.tare.TareUtils.getCurrentTimeMillis;
|
||||
import static com.android.server.tare.TareUtils.narcToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -129,7 +129,7 @@ class Ledger {
|
||||
}
|
||||
|
||||
void dump(IndentingPrintWriter pw, int numRecentTransactions) {
|
||||
pw.print("Current balance", narcToString(getCurrentBalance())).println();
|
||||
pw.print("Current balance", cakeToString(getCurrentBalance())).println();
|
||||
|
||||
final int size = mTransactions.size();
|
||||
for (int i = Math.max(0, size - numRecentTransactions); i < size; ++i) {
|
||||
@@ -146,9 +146,9 @@ class Ledger {
|
||||
pw.print(")");
|
||||
}
|
||||
pw.print(" --> ");
|
||||
pw.print(narcToString(transaction.delta));
|
||||
pw.print(cakeToString(transaction.delta));
|
||||
pw.print(" (ctp=");
|
||||
pw.print(narcToString(transaction.ctp));
|
||||
pw.print(cakeToString(transaction.ctp));
|
||||
pw.println(")");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,5 +105,7 @@ consumed.
|
||||
|
||||
* ARC: Android Resource Credits are the "currency" units used as an abstraction layer over the real
|
||||
battery drain. They allow the system to standardize costs and prices across various devices.
|
||||
* Cake: A lie; also the smallest unit of an ARC (1 cake = one-billionth of an ARC = 1 nano-ARC).
|
||||
When the apps request to do something, we shall let them eat cake.
|
||||
* NARC: The smallest unit of an ARC. A narc is 1 nano-ARC.
|
||||
* Satiated: used to refer to when the device is fully charged (at 100% battery level)
|
||||
@@ -84,7 +84,7 @@ public class Scribe {
|
||||
private static final String XML_ATTR_USER_ID = "userId";
|
||||
private static final String XML_ATTR_VERSION = "version";
|
||||
private static final String XML_ATTR_LAST_RECLAMATION_TIME = "lastReclamationTime";
|
||||
private static final String XML_ATTR_REMAINING_CONSUMABLE_NARCS = "remainingConsumableNarcs";
|
||||
private static final String XML_ATTR_REMAINING_CONSUMABLE_CAKES = "remainingConsumableCakes";
|
||||
private static final String XML_ATTR_CONSUMPTION_LIMIT = "consumptionLimit";
|
||||
|
||||
/** Version of the file schema. */
|
||||
@@ -100,7 +100,7 @@ public class Scribe {
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
private long mSatiatedConsumptionLimit;
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
private long mRemainingConsumableNarcs;
|
||||
private long mRemainingConsumableCakes;
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
private final SparseArrayMap<String, Ledger> mLedgers = new SparseArrayMap<>();
|
||||
|
||||
@@ -122,10 +122,10 @@ public class Scribe {
|
||||
}
|
||||
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
void adjustRemainingConsumableNarcsLocked(long delta) {
|
||||
void adjustRemainingConsumableCakesLocked(long delta) {
|
||||
if (delta != 0) {
|
||||
// No point doing any work if the change is 0.
|
||||
mRemainingConsumableNarcs += delta;
|
||||
mRemainingConsumableCakes += delta;
|
||||
postWrite();
|
||||
}
|
||||
}
|
||||
@@ -168,7 +168,7 @@ public class Scribe {
|
||||
* call it for normal operation.
|
||||
*/
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
long getNarcsInCirculationForLoggingLocked() {
|
||||
long getCakesInCirculationForLoggingLocked() {
|
||||
long sum = 0;
|
||||
for (int uIdx = mLedgers.numMaps() - 1; uIdx >= 0; --uIdx) {
|
||||
for (int pIdx = mLedgers.numElementsForKeyAt(uIdx) - 1; pIdx >= 0; --pIdx) {
|
||||
@@ -178,10 +178,10 @@ public class Scribe {
|
||||
return sum;
|
||||
}
|
||||
|
||||
/** Returns the total amount of narcs that remain to be consumed. */
|
||||
/** Returns the total amount of cakes that remain to be consumed. */
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
long getRemainingConsumableNarcsLocked() {
|
||||
return mRemainingConsumableNarcs;
|
||||
long getRemainingConsumableCakesLocked() {
|
||||
return mRemainingConsumableCakes;
|
||||
}
|
||||
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
@@ -189,11 +189,11 @@ public class Scribe {
|
||||
mLedgers.clear();
|
||||
if (!recordExists()) {
|
||||
mSatiatedConsumptionLimit = mIrs.getInitialSatiatedConsumptionLimitLocked();
|
||||
mRemainingConsumableNarcs = mIrs.getConsumptionLimitLocked();
|
||||
mRemainingConsumableCakes = mIrs.getConsumptionLimitLocked();
|
||||
return;
|
||||
}
|
||||
mSatiatedConsumptionLimit = 0;
|
||||
mRemainingConsumableNarcs = 0;
|
||||
mRemainingConsumableCakes = 0;
|
||||
|
||||
final SparseArray<ArraySet<String>> installedPackagesPerUser = new SparseArray<>();
|
||||
final List<PackageInfo> installedPackages = mIrs.getInstalledPackages();
|
||||
@@ -254,8 +254,8 @@ public class Scribe {
|
||||
parser.getAttributeLong(null, XML_ATTR_CONSUMPTION_LIMIT,
|
||||
mIrs.getInitialSatiatedConsumptionLimitLocked());
|
||||
final long consumptionLimit = mIrs.getConsumptionLimitLocked();
|
||||
mRemainingConsumableNarcs = Math.min(consumptionLimit,
|
||||
parser.getAttributeLong(null, XML_ATTR_REMAINING_CONSUMABLE_NARCS,
|
||||
mRemainingConsumableCakes = Math.min(consumptionLimit,
|
||||
parser.getAttributeLong(null, XML_ATTR_REMAINING_CONSUMABLE_CAKES,
|
||||
consumptionLimit));
|
||||
break;
|
||||
case XML_TAG_USER:
|
||||
@@ -285,11 +285,11 @@ public class Scribe {
|
||||
|
||||
@GuardedBy("mIrs.getLock()")
|
||||
void setConsumptionLimitLocked(long limit) {
|
||||
if (mRemainingConsumableNarcs > limit) {
|
||||
mRemainingConsumableNarcs = limit;
|
||||
if (mRemainingConsumableCakes > limit) {
|
||||
mRemainingConsumableCakes = limit;
|
||||
} else if (limit > mSatiatedConsumptionLimit) {
|
||||
final long diff = mSatiatedConsumptionLimit - mRemainingConsumableNarcs;
|
||||
mRemainingConsumableNarcs = (limit - diff);
|
||||
final long diff = mSatiatedConsumptionLimit - mRemainingConsumableCakes;
|
||||
mRemainingConsumableCakes = (limit - diff);
|
||||
}
|
||||
mSatiatedConsumptionLimit = limit;
|
||||
postWrite();
|
||||
@@ -306,7 +306,7 @@ public class Scribe {
|
||||
TareHandlerThread.getHandler().removeCallbacks(mCleanRunnable);
|
||||
TareHandlerThread.getHandler().removeCallbacks(mWriteRunnable);
|
||||
mLedgers.clear();
|
||||
mRemainingConsumableNarcs = 0;
|
||||
mRemainingConsumableCakes = 0;
|
||||
mSatiatedConsumptionLimit = 0;
|
||||
mLastReclamationTime = 0;
|
||||
}
|
||||
@@ -491,8 +491,8 @@ public class Scribe {
|
||||
out.startTag(null, XML_TAG_HIGH_LEVEL_STATE);
|
||||
out.attributeLong(null, XML_ATTR_LAST_RECLAMATION_TIME, mLastReclamationTime);
|
||||
out.attributeLong(null, XML_ATTR_CONSUMPTION_LIMIT, mSatiatedConsumptionLimit);
|
||||
out.attributeLong(null, XML_ATTR_REMAINING_CONSUMABLE_NARCS,
|
||||
mRemainingConsumableNarcs);
|
||||
out.attributeLong(null, XML_ATTR_REMAINING_CONSUMABLE_CAKES,
|
||||
mRemainingConsumableCakes);
|
||||
out.endTag(null, XML_TAG_HIGH_LEVEL_STATE);
|
||||
|
||||
for (int uIdx = mLedgers.numMaps() - 1; uIdx >= 0; --uIdx) {
|
||||
|
||||
@@ -26,7 +26,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.time.Clock;
|
||||
|
||||
class TareUtils {
|
||||
private static final long NARC_IN_ARC = 1_000_000_000L;
|
||||
private static final long CAKE_IN_ARC = 1_000_000_000L;
|
||||
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
private static final SimpleDateFormat sDumpDateFormat =
|
||||
@@ -35,8 +35,8 @@ class TareUtils {
|
||||
@VisibleForTesting
|
||||
static Clock sSystemClock = Clock.systemUTC();
|
||||
|
||||
static long arcToNarc(int arcs) {
|
||||
return arcs * NARC_IN_ARC;
|
||||
static long arcToCake(int arcs) {
|
||||
return arcs * CAKE_IN_ARC;
|
||||
}
|
||||
|
||||
static void dumpTime(IndentingPrintWriter pw, long time) {
|
||||
@@ -47,26 +47,26 @@ class TareUtils {
|
||||
return sSystemClock.millis();
|
||||
}
|
||||
|
||||
static int narcToArc(long narcs) {
|
||||
return (int) (narcs / NARC_IN_ARC);
|
||||
static int cakeToArc(long cakes) {
|
||||
return (int) (cakes / CAKE_IN_ARC);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
static String narcToString(long narcs) {
|
||||
if (narcs == 0) {
|
||||
static String cakeToString(long cakes) {
|
||||
if (cakes == 0) {
|
||||
return "0 ARCs";
|
||||
}
|
||||
final long sub = Math.abs(narcs) % NARC_IN_ARC;
|
||||
final long arcs = narcToArc(narcs);
|
||||
final long sub = Math.abs(cakes) % CAKE_IN_ARC;
|
||||
final long arcs = cakeToArc(cakes);
|
||||
if (arcs == 0) {
|
||||
return sub == 1
|
||||
? sub + " narc"
|
||||
: sub + " narcs";
|
||||
? sub + " cake"
|
||||
: sub + " cakes";
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(arcs);
|
||||
if (sub > 0) {
|
||||
sb.append(".").append(sub / (NARC_IN_ARC / 1000));
|
||||
sb.append(".").append(sub / (CAKE_IN_ARC / 1000));
|
||||
}
|
||||
sb.append(" ARC");
|
||||
if (arcs != 1 || sub > 0) {
|
||||
|
||||
@@ -107,7 +107,7 @@ public class ScribeTest {
|
||||
@Test
|
||||
public void testWriteHighLevelStateToDisk() {
|
||||
long lastReclamationTime = System.currentTimeMillis();
|
||||
long remainingConsumableNarcs = 2000L;
|
||||
long remainingConsumableCakes = 2000L;
|
||||
long consumptionLimit = 500_000L;
|
||||
when(mIrs.getConsumptionLimitLocked()).thenReturn(consumptionLimit);
|
||||
|
||||
@@ -118,20 +118,20 @@ public class ScribeTest {
|
||||
ledger.recordTransaction(new Ledger.Transaction(0, 1000L, 1, null, -5000, 3000));
|
||||
mScribeUnderTest.setLastReclamationTimeLocked(lastReclamationTime);
|
||||
mScribeUnderTest.setConsumptionLimitLocked(consumptionLimit);
|
||||
mScribeUnderTest.adjustRemainingConsumableNarcsLocked(
|
||||
remainingConsumableNarcs - consumptionLimit);
|
||||
mScribeUnderTest.adjustRemainingConsumableCakesLocked(
|
||||
remainingConsumableCakes - consumptionLimit);
|
||||
|
||||
assertEquals(lastReclamationTime, mScribeUnderTest.getLastReclamationTimeLocked());
|
||||
assertEquals(remainingConsumableNarcs,
|
||||
mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(remainingConsumableCakes,
|
||||
mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
assertEquals(consumptionLimit, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
|
||||
mScribeUnderTest.writeImmediatelyForTesting();
|
||||
mScribeUnderTest.loadFromDiskLocked();
|
||||
|
||||
assertEquals(lastReclamationTime, mScribeUnderTest.getLastReclamationTimeLocked());
|
||||
assertEquals(remainingConsumableNarcs,
|
||||
mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(remainingConsumableCakes,
|
||||
mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
assertEquals(consumptionLimit, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
}
|
||||
|
||||
@@ -234,32 +234,32 @@ public class ScribeTest {
|
||||
@Test
|
||||
public void testChangingConsumable() {
|
||||
assertEquals(0, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(0, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(0, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
|
||||
// Limit increased, so remaining value should be adjusted as well
|
||||
mScribeUnderTest.setConsumptionLimitLocked(1000);
|
||||
assertEquals(1000, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(1000, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(1000, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
|
||||
// Limit decreased below remaining, so remaining value should be adjusted as well
|
||||
mScribeUnderTest.setConsumptionLimitLocked(500);
|
||||
assertEquals(500, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(500, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(500, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
|
||||
mScribeUnderTest.adjustRemainingConsumableNarcsLocked(-100);
|
||||
mScribeUnderTest.adjustRemainingConsumableCakesLocked(-100);
|
||||
assertEquals(500, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(400, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(400, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
|
||||
// Limit increased, so remaining value should be adjusted by the difference as well
|
||||
mScribeUnderTest.setConsumptionLimitLocked(1000);
|
||||
assertEquals(1000, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(900, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(900, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
|
||||
|
||||
// Limit decreased, but above remaining, so remaining value should left alone
|
||||
mScribeUnderTest.setConsumptionLimitLocked(950);
|
||||
assertEquals(950, mScribeUnderTest.getSatiatedConsumptionLimitLocked());
|
||||
assertEquals(900, mScribeUnderTest.getRemainingConsumableNarcsLocked());
|
||||
assertEquals(900, mScribeUnderTest.getRemainingConsumableCakesLocked());
|
||||
}
|
||||
|
||||
private void assertLedgersEqual(Ledger expected, Ledger actual) {
|
||||
|
||||
Reference in New Issue
Block a user