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

Commit 993471cc authored by Kweku Adams's avatar Kweku Adams
Browse files

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
parent 8423ba61
Loading
Loading
Loading
Loading
+55 −2
Original line number Diff line number Diff line
@@ -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();
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -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:
+5 −0
Original line number Diff line number Diff line
@@ -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));
        }