diff options
| author | 2021-12-14 01:00:16 +0000 | |
|---|---|---|
| committer | 2021-12-14 01:00:16 +0000 | |
| commit | eba0c58b956510b8a05396b103bf1624404784b8 (patch) | |
| tree | 1e2371214b15e0fc02bab2022ac5079ae00b4914 | |
| parent | 24a379c92fced8a1f81fbcaeb1e1fd2f75884a95 (diff) | |
| parent | 993471cc7ee2b835c00313b74945f326bbb29358 (diff) | |
Merge "Fix reward for app usage."
3 files changed, 65 insertions, 4 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/Agent.java b/apex/jobscheduler/service/java/com/android/server/tare/Agent.java index 005c447c7220..a6a007f46b58 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/Agent.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/Agent.java @@ -46,6 +46,7 @@ import android.util.IndentingPrintWriter; import android.util.Log; import android.util.Slog; import android.util.SparseArrayMap; +import android.util.TimeUtils; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -681,8 +682,8 @@ class Agent { final long minBalance = mIrs.getMinBalanceLocked(userId, pkgName); final double perc = batteryLevel / 100d; // TODO: maybe don't give credits to bankrupt apps until battery level >= 50% - if (ledger.getCurrentBalance() < minBalance) { - final long shortfall = minBalance - getBalanceLocked(userId, pkgName); + final long shortfall = minBalance - ledger.getCurrentBalance(); + if (shortfall > 0) { recordTransactionLocked(userId, pkgName, ledger, new Ledger.Transaction(now, now, REGULATION_BASIC_INCOME, null, (long) (perc * shortfall)), true); @@ -1170,5 +1171,57 @@ class Agent { void dumpLocked(IndentingPrintWriter pw) { pw.println(); mBalanceThresholdAlarmQueue.dump(pw); + + pw.println(); + pw.println("Ongoing events:"); + pw.increaseIndent(); + boolean printedEvents = false; + final long nowElapsed = SystemClock.elapsedRealtime(); + for (int u = mCurrentOngoingEvents.numMaps() - 1; u >= 0; --u) { + final int userId = mCurrentOngoingEvents.keyAt(u); + for (int p = mCurrentOngoingEvents.numElementsForKey(userId) - 1; p >= 0; --p) { + final String pkgName = mCurrentOngoingEvents.keyAt(u, p); + final SparseArrayMap<String, OngoingEvent> ongoingEvents = + mCurrentOngoingEvents.get(userId, pkgName); + + boolean printedApp = false; + + for (int e = ongoingEvents.numMaps() - 1; e >= 0; --e) { + final int eventId = ongoingEvents.keyAt(e); + for (int t = ongoingEvents.numElementsForKey(eventId) - 1; t >= 0; --t) { + if (!printedApp) { + printedApp = true; + pw.println(appToString(userId, pkgName)); + pw.increaseIndent(); + } + printedEvents = true; + + OngoingEvent ongoingEvent = ongoingEvents.valueAt(e, t); + + pw.print(EconomicPolicy.eventToString(ongoingEvent.eventId)); + if (ongoingEvent.tag != null) { + pw.print("("); + pw.print(ongoingEvent.tag); + pw.print(")"); + } + pw.print(" runtime="); + TimeUtils.formatDuration(nowElapsed - ongoingEvent.startTimeElapsed, pw); + pw.print(" delta/sec="); + pw.print(ongoingEvent.deltaPerSec); + pw.print(" refCount="); + pw.print(ongoingEvent.refCount); + pw.println(); + } + } + + if (printedApp) { + pw.decreaseIndent(); + } + } + } + if (!printedEvents) { + pw.print("N/A"); + } + pw.decreaseIndent(); } } 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 20a300abe72a..36895a5c3a25 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java @@ -567,20 +567,23 @@ public class InternalResourceService extends SystemService { final String pkgName = event.getPackageName(); if (DEBUG) { Slog.d(TAG, "Processing event " + event.getEventType() + + " (" + event.mInstanceId + ")" + " for " + appToString(userId, pkgName)); } final long nowElapsed = SystemClock.elapsedRealtime(); switch (event.getEventType()) { case UsageEvents.Event.ACTIVITY_RESUMED: mAgent.noteOngoingEventLocked(userId, pkgName, - EconomicPolicy.REWARD_TOP_ACTIVITY, null, nowElapsed); + EconomicPolicy.REWARD_TOP_ACTIVITY, String.valueOf(event.mInstanceId), + nowElapsed); break; case UsageEvents.Event.ACTIVITY_PAUSED: case UsageEvents.Event.ACTIVITY_STOPPED: case UsageEvents.Event.ACTIVITY_DESTROYED: final long now = getCurrentTimeMillis(); mAgent.stopOngoingActionLocked(userId, pkgName, - EconomicPolicy.REWARD_TOP_ACTIVITY, null, nowElapsed, now); + EconomicPolicy.REWARD_TOP_ACTIVITY, String.valueOf(event.mInstanceId), + nowElapsed, now); break; case UsageEvents.Event.USER_INTERACTION: case UsageEvents.Event.CHOOSER_ACTION: diff --git a/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java b/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java index a234ae6142fc..f4917ad82761 100644 --- a/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java +++ b/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java @@ -138,6 +138,11 @@ class Ledger { dumpTime(pw, transaction.endTimeMs); pw.print(": "); pw.print(EconomicPolicy.eventToString(transaction.eventId)); + if (transaction.tag != null) { + pw.print("("); + pw.print(transaction.tag); + pw.print(")"); + } pw.print(" --> "); pw.println(narcToString(transaction.delta)); } |