Fix reward for app usage.
Make sure to track Activity instance ID in UsageStats.Event so RESUMED and PAUSED/STOPPED events are correctly aligned. Also improve dumpsys of ongoing events. Bug: 158300259 Test: Check dumpsys and logcat Change-Id: If3a338f09a78c9089a827083609bfd80c83788aa
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user