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

Commit f8c0f1ab authored by Michael Wachenschwanz's avatar Michael Wachenschwanz Committed by Android (Google) Code Review
Browse files

Merge "Migrate PowerStatsLogger to Alarm based timing" into main

parents c82b33df 91c11654
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ java_library_static {
        "connectivity_flags_lib",
        "dreams_flags_lib",
        "aconfig_new_storage_flags_lib",
        "powerstats_flags_lib",
    ],
    javac_shard_size: 50,
    javacflags: [
+11 −0
Original line number Diff line number Diff line
aconfig_declarations {
    name: "powerstats_flags",
    package: "com.android.server.powerstats",
    container: "system",
    srcs: ["*.aconfig"],
}

java_aconfig_library {
    name: "powerstats_flags_lib",
    aconfig_declarations: "powerstats_flags",
}
+35 −17
Original line number Diff line number Diff line
@@ -16,8 +16,10 @@

package com.android.server.powerstats;

import android.app.AlarmManager;
import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Slog;

/**
@@ -33,37 +35,53 @@ public final class TimerTrigger extends PowerStatsLogTrigger {
    private static final long LOG_PERIOD_MS_HIGH_FREQUENCY = 2 * 60 * 1000; // 2 minutes

    private final Handler mHandler;
    private final AlarmManager mAlarmManager;

    class PeriodicTimer implements Runnable, AlarmManager.OnAlarmListener {
        private final String mName;
        private final long mPeriodMs;
        private final int mMsgType;

        PeriodicTimer(String name, long periodMs, int msgType) {
            mName = name;
            mPeriodMs = periodMs;
            mMsgType = msgType;
        }

    private Runnable mLogDataLowFrequency = new Runnable() {
        @Override
        public void run() {
            // Do not wake the device for these messages.  Opportunistically log rail data every
            // LOG_PERIOD_MS_LOW_FREQUENCY.
            mHandler.postDelayed(mLogDataLowFrequency, LOG_PERIOD_MS_LOW_FREQUENCY);
            if (DEBUG) Slog.d(TAG, "Received delayed message.  Log rail data low frequency");
            logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_LOW_FREQUENCY);
        public void onAlarm() {
            run();
        }
    };

    private Runnable mLogDataHighFrequency = new Runnable() {
        @Override
        public void run() {
            // Do not wake the device for these messages.  Opportunistically log rail data every
            // LOG_PERIOD_MS_HIGH_FREQUENCY.
            mHandler.postDelayed(mLogDataHighFrequency, LOG_PERIOD_MS_HIGH_FREQUENCY);
            if (DEBUG) Slog.d(TAG, "Received delayed message.  Log rail data high frequency");
            logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_HIGH_FREQUENCY);
            if (Flags.alarmBasedPowerstatsLogging()) {
                final long nextAlarmMs = SystemClock.elapsedRealtime() + mPeriodMs;
                mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextAlarmMs,
                        AlarmManager.WINDOW_EXACT, 0, mName, this, mHandler, null);
            } else {
                mHandler.postDelayed(this, mPeriodMs);
            }
            if (DEBUG) Slog.d(TAG, "Received delayed message (" + mName + ").  Logging rail data");
            logPowerStatsData(mMsgType);
        }
    }
    };

    public TimerTrigger(Context context, PowerStatsLogger powerStatsLogger,
            boolean triggerEnabled) {
        super(context, powerStatsLogger);
        mHandler = mContext.getMainThreadHandler();
        mAlarmManager = mContext.getSystemService(AlarmManager.class);

        if (triggerEnabled) {
            mLogDataLowFrequency.run();
            mLogDataHighFrequency.run();
            final PeriodicTimer logDataLowFrequency = new PeriodicTimer("PowerStatsLowFreqLog",
                    LOG_PERIOD_MS_LOW_FREQUENCY,
                    PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_LOW_FREQUENCY);
            final PeriodicTimer logDataHighFrequency = new PeriodicTimer("PowerStatsHighFreqLog",
                    LOG_PERIOD_MS_HIGH_FREQUENCY,
                    PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_HIGH_FREQUENCY);
            logDataLowFrequency.run();
            logDataHighFrequency.run();
        }
    }
}
+13 −0
Original line number Diff line number Diff line

package: "com.android.server.powerstats"
container: "system"

flag {
    name: "alarm_based_powerstats_logging"
    namespace: "backstage_power"
    description: "Utilize new OomAdjuster implementation"
    bug: "294598168"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
 No newline at end of file