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

Commit 92bebbda authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Removing sendTronLog flag from BatterySaverPolicy."

parents f67c4640 25b1c16e
Loading
Loading
Loading
Loading
+6 −27
Original line number Original line Diff line number Diff line
@@ -104,7 +104,6 @@ public class BatterySaverPolicy extends ContentObserver {
    private static final String KEY_AOD_DISABLED = "aod_disabled";
    private static final String KEY_AOD_DISABLED = "aod_disabled";
    // Go into deep Doze as soon as the screen turns off.
    // Go into deep Doze as soon as the screen turns off.
    private static final String KEY_QUICK_DOZE_ENABLED = "quick_doze_enabled";
    private static final String KEY_QUICK_DOZE_ENABLED = "quick_doze_enabled";
    private static final String KEY_SEND_TRON_LOG = "send_tron_log";


    private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i";
    private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i";
    private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n";
    private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n";
@@ -129,8 +128,7 @@ public class BatterySaverPolicy extends ContentObserver {
            new ArrayMap<>(), /* filesForNoninteractive */
            new ArrayMap<>(), /* filesForNoninteractive */
            false, /* forceAllAppsStandby */
            false, /* forceAllAppsStandby */
            false, /* forceBackgroundCheck */
            false, /* forceBackgroundCheck */
            PowerManager.LOCATION_MODE_NO_CHANGE, /* gpsMode */
            PowerManager.LOCATION_MODE_NO_CHANGE /* gpsMode */
            false  /* sendTronLog */
    );
    );


    private static final Policy DEFAULT_ADAPTIVE_POLICY = OFF_POLICY;
    private static final Policy DEFAULT_ADAPTIVE_POLICY = OFF_POLICY;
@@ -154,8 +152,7 @@ public class BatterySaverPolicy extends ContentObserver {
            new ArrayMap<>(), /* filesForNoninteractive */
            new ArrayMap<>(), /* filesForNoninteractive */
            true, /* forceAllAppsStandby */
            true, /* forceAllAppsStandby */
            true, /* forceBackgroundCheck */
            true, /* forceBackgroundCheck */
            PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF, /* gpsMode */
            PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF /* gpsMode */
            false /* sendTronLog */
    );
    );


    private final Object mLock;
    private final Object mLock;
@@ -418,13 +415,10 @@ public class BatterySaverPolicy extends ContentObserver {
        if (currPolicy.disableOptionalSensors) sb.append("S");
        if (currPolicy.disableOptionalSensors) sb.append("S");
        if (currPolicy.disableAod) sb.append("o");
        if (currPolicy.disableAod) sb.append("o");
        if (currPolicy.enableQuickDoze) sb.append("q");
        if (currPolicy.enableQuickDoze) sb.append("q");
        if (currPolicy.sendTronLog) sb.append("t");


        sb.append(currPolicy.gpsMode);
        sb.append(currPolicy.gpsMode);


        mEventLogKeys = sb.toString();
        mEventLogKeys = sb.toString();

        mBatterySavingStats.setSendTronLog(currPolicy.sendTronLog);
    }
    }


    static class Policy {
    static class Policy {
@@ -567,11 +561,6 @@ public class BatterySaverPolicy extends ContentObserver {
         */
         */
        public final int gpsMode;
        public final int gpsMode;


        /**
         * Whether BatterySavingStats should send tron events.
         */
        public final boolean sendTronLog;

        private final int mHashCode;
        private final int mHashCode;


        Policy(
        Policy(
@@ -593,8 +582,7 @@ public class BatterySaverPolicy extends ContentObserver {
                ArrayMap<String, String> filesForNoninteractive,
                ArrayMap<String, String> filesForNoninteractive,
                boolean forceAllAppsStandby,
                boolean forceAllAppsStandby,
                boolean forceBackgroundCheck,
                boolean forceBackgroundCheck,
                int gpsMode,
                int gpsMode) {
                boolean sendTronLog) {


            this.adjustBrightnessFactor = adjustBrightnessFactor;
            this.adjustBrightnessFactor = adjustBrightnessFactor;
            this.advertiseIsEnabled = advertiseIsEnabled;
            this.advertiseIsEnabled = advertiseIsEnabled;
@@ -615,7 +603,6 @@ public class BatterySaverPolicy extends ContentObserver {
            this.forceAllAppsStandby = forceAllAppsStandby;
            this.forceAllAppsStandby = forceAllAppsStandby;
            this.forceBackgroundCheck = forceBackgroundCheck;
            this.forceBackgroundCheck = forceBackgroundCheck;
            this.gpsMode = gpsMode;
            this.gpsMode = gpsMode;
            this.sendTronLog = sendTronLog;


            mHashCode = Objects.hash(
            mHashCode = Objects.hash(
                    adjustBrightnessFactor,
                    adjustBrightnessFactor,
@@ -636,8 +623,7 @@ public class BatterySaverPolicy extends ContentObserver {
                    filesForNoninteractive,
                    filesForNoninteractive,
                    forceAllAppsStandby,
                    forceAllAppsStandby,
                    forceBackgroundCheck,
                    forceBackgroundCheck,
                    gpsMode,
                    gpsMode);
                    sendTronLog);
        }
        }


        static Policy fromConfig(BatterySaverPolicyConfig config) {
        static Policy fromConfig(BatterySaverPolicyConfig config) {
@@ -674,8 +660,7 @@ public class BatterySaverPolicy extends ContentObserver {
                    (new CpuFrequencies()).parseString(cpuFreqNoninteractive).toSysFileMap(),
                    (new CpuFrequencies()).parseString(cpuFreqNoninteractive).toSysFileMap(),
                    config.getForceAllAppsStandby(),
                    config.getForceAllAppsStandby(),
                    config.getForceBackgroundCheck(),
                    config.getForceBackgroundCheck(),
                    config.getGpsMode(),
                    config.getGpsMode()
                    OFF_POLICY.sendTronLog
            );
            );
        }
        }


@@ -737,7 +722,6 @@ public class BatterySaverPolicy extends ContentObserver {
            boolean forceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK,
            boolean forceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK,
                    defaultPolicy.forceBackgroundCheck);
                    defaultPolicy.forceBackgroundCheck);
            int gpsMode = parser.getInt(KEY_GPS_MODE, defaultPolicy.gpsMode);
            int gpsMode = parser.getInt(KEY_GPS_MODE, defaultPolicy.gpsMode);
            boolean sendTronLog = parser.getBoolean(KEY_SEND_TRON_LOG, defaultPolicy.sendTronLog);


            return new Policy(
            return new Policy(
                    adjustBrightnessFactor,
                    adjustBrightnessFactor,
@@ -761,8 +745,7 @@ public class BatterySaverPolicy extends ContentObserver {
                    (new CpuFrequencies()).parseString(cpuFreqNoninteractive).toSysFileMap(),
                    (new CpuFrequencies()).parseString(cpuFreqNoninteractive).toSysFileMap(),
                    forceAllAppsStandby,
                    forceAllAppsStandby,
                    forceBackgroundCheck,
                    forceBackgroundCheck,
                    gpsMode,
                    gpsMode
                    sendTronLog
            );
            );
        }
        }


@@ -788,7 +771,6 @@ public class BatterySaverPolicy extends ContentObserver {
                    && forceAllAppsStandby == other.forceAllAppsStandby
                    && forceAllAppsStandby == other.forceAllAppsStandby
                    && forceBackgroundCheck == other.forceBackgroundCheck
                    && forceBackgroundCheck == other.forceBackgroundCheck
                    && gpsMode == other.gpsMode
                    && gpsMode == other.gpsMode
                    && sendTronLog == other.sendTronLog
                    && filesForInteractive.equals(other.filesForInteractive)
                    && filesForInteractive.equals(other.filesForInteractive)
                    && filesForNoninteractive.equals(other.filesForNoninteractive);
                    && filesForNoninteractive.equals(other.filesForNoninteractive);
        }
        }
@@ -1026,9 +1008,6 @@ public class BatterySaverPolicy extends ContentObserver {
        pw.println("  " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger);
        pw.println("  " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger);
        pw.print(indent);
        pw.print(indent);
        pw.println("  " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze);
        pw.println("  " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze);
        pw.print(indent);
        pw.println("  " + KEY_SEND_TRON_LOG + "=" + p.sendTronLog);
        pw.println();


        pw.print("    Interactive File values:\n");
        pw.print("    Interactive File values:\n");
        dumpMap(pw, "      ", p.filesForInteractive);
        dumpMap(pw, "      ", p.filesForInteractive);
+1 −81
Original line number Original line Diff line number Diff line
@@ -15,7 +15,6 @@
 */
 */
package com.android.server.power.batterysaver;
package com.android.server.power.batterysaver;


import android.metrics.LogMaker;
import android.os.BatteryManagerInternal;
import android.os.BatteryManagerInternal;
import android.os.SystemClock;
import android.os.SystemClock;
import android.util.ArrayMap;
import android.util.ArrayMap;
@@ -24,9 +23,6 @@ import android.util.TimeUtils;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.server.EventLogTags;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.LocalServices;


@@ -142,7 +138,6 @@ public class BatterySavingStats {
    }
    }


    private BatteryManagerInternal mBatteryManagerInternal;
    private BatteryManagerInternal mBatteryManagerInternal;
    private final MetricsLogger mMetricsLogger;


    private static final int STATE_NOT_INITIALIZED = -1;
    private static final int STATE_NOT_INITIALIZED = -1;
    private static final int STATE_CHARGING = -2;
    private static final int STATE_CHARGING = -2;
@@ -172,28 +167,11 @@ public class BatterySavingStats {
    @GuardedBy("mLock")
    @GuardedBy("mLock")
    private long mLastBatterySaverDisabledTime = 0;
    private long mLastBatterySaverDisabledTime = 0;


    private final MetricsLoggerHelper mMetricsLoggerHelper = new MetricsLoggerHelper();

    @VisibleForTesting
    @GuardedBy("mLock")
    private boolean mSendTronLog;

    /** Visible for unit tests */
    /** Visible for unit tests */
    @VisibleForTesting
    @VisibleForTesting
    public BatterySavingStats(Object lock, MetricsLogger metricsLogger) {
    public BatterySavingStats(Object lock) {
        mLock = lock;
        mLock = lock;
        mBatteryManagerInternal = LocalServices.getService(BatteryManagerInternal.class);
        mBatteryManagerInternal = LocalServices.getService(BatteryManagerInternal.class);
        mMetricsLogger = metricsLogger;
    }

    public BatterySavingStats(Object lock) {
        this(lock, new MetricsLogger());
    }

    public void setSendTronLog(boolean send) {
        synchronized (mLock) {
            mSendTronLog = send;
        }
    }
    }


    private BatteryManagerInternal getBatteryManagerInternal() {
    private BatteryManagerInternal getBatteryManagerInternal() {
@@ -325,7 +303,6 @@ public class BatterySavingStats {


        endLastStateLocked(now, batteryLevel, batteryPercent);
        endLastStateLocked(now, batteryLevel, batteryPercent);
        startNewStateLocked(newState, now, batteryLevel, batteryPercent);
        startNewStateLocked(newState, now, batteryLevel, batteryPercent);
        mMetricsLoggerHelper.transitionStateLocked(newState, now, batteryLevel, batteryPercent);
    }
    }


    @GuardedBy("mLock")
    @GuardedBy("mLock")
@@ -472,61 +449,4 @@ public class BatterySavingStats {
                onStat.totalBatteryDrainPercent,
                onStat.totalBatteryDrainPercent,
                onStat.drainPerHour() / 1000.0));
                onStat.drainPerHour() / 1000.0));
    }
    }

    @VisibleForTesting
    class MetricsLoggerHelper {
        private int mLastState = STATE_NOT_INITIALIZED;
        private long mStartTime;
        private int mStartBatteryLevel;
        private int mStartPercent;

        private static final int STATE_CHANGE_DETECT_MASK =
                (BatterySaverState.MASK << BatterySaverState.SHIFT) |
                (InteractiveState.MASK << InteractiveState.SHIFT);

        @GuardedBy("BatterySavingStats.this.mLock")
        public void transitionStateLocked(
                int newState, long now, int batteryLevel, int batteryPercent) {
            final boolean stateChanging =
                    ((mLastState >= 0) ^ (newState >= 0)) ||
                    (((mLastState ^ newState) & STATE_CHANGE_DETECT_MASK) != 0);
            if (stateChanging) {
                if (mLastState >= 0) {
                    final long deltaTime = now - mStartTime;

                    reportLocked(mLastState, deltaTime, mStartBatteryLevel, mStartPercent,
                            batteryLevel, batteryPercent);
                }
                mStartTime = now;
                mStartBatteryLevel = batteryLevel;
                mStartPercent = batteryPercent;
            }
            mLastState = newState;
        }

        @GuardedBy("BatterySavingStats.this.mLock")
        void reportLocked(int state, long deltaTimeMs,
                int startBatteryLevelUa, int startBatteryLevelPercent,
                int endBatteryLevelUa, int endBatteryLevelPercent) {
            if (!mSendTronLog) {
                return;
            }
            final boolean batterySaverOn =
                    BatterySaverState.fromIndex(state) != BatterySaverState.OFF;
            final boolean interactive =
                    InteractiveState.fromIndex(state) != InteractiveState.NON_INTERACTIVE;

            final LogMaker logMaker = new LogMaker(MetricsProto.MetricsEvent.BATTERY_SAVER)
                    .setSubtype(batterySaverOn ? 1 : 0)
                    .addTaggedData(MetricsEvent.FIELD_INTERACTIVE, interactive ? 1 : 0)
                    .addTaggedData(MetricsEvent.FIELD_DURATION_MILLIS, deltaTimeMs)
                    .addTaggedData(MetricsEvent.FIELD_START_BATTERY_UA, startBatteryLevelUa)
                    .addTaggedData(MetricsEvent.FIELD_START_BATTERY_PERCENT,
                            startBatteryLevelPercent)
                    .addTaggedData(MetricsEvent.FIELD_END_BATTERY_UA, endBatteryLevelUa)
                    .addTaggedData(MetricsEvent.FIELD_END_BATTERY_PERCENT, endBatteryLevelPercent);

            mMetricsLogger.write(logMaker);
        }
    }
}
}
+1 −8
Original line number Original line Diff line number Diff line
@@ -21,8 +21,6 @@ import static com.android.server.power.batterysaver.BatterySaverPolicy.POLICY_LE


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import static org.mockito.Mockito.mock;

import android.content.Context;
import android.content.Context;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerManager.ServiceType;
@@ -34,10 +32,8 @@ import android.util.ArrayMap;


import com.android.frameworks.servicestests.R;
import com.android.frameworks.servicestests.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.server.power.batterysaver.BatterySaverPolicy.Policy;
import com.android.server.power.batterysaver.BatterySaverPolicy.Policy;


import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;


/**
/**
@@ -87,9 +83,6 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
        }
        }
    }
    }


    @Mock
    MetricsLogger mMetricsLogger = mock(MetricsLogger.class);

    private BatterySaverPolicyForTest mBatterySaverPolicy;
    private BatterySaverPolicyForTest mBatterySaverPolicy;


    private final ArrayMap<String, String> mMockGlobalSettings = new ArrayMap<>();
    private final ArrayMap<String, String> mMockGlobalSettings = new ArrayMap<>();
@@ -100,7 +93,7 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        final Object lock = new Object();
        final Object lock = new Object();
        mBatterySaverPolicy = new BatterySaverPolicyForTest(lock, getContext(),
        mBatterySaverPolicy = new BatterySaverPolicyForTest(lock, getContext(),
                new BatterySavingStats(lock, mMetricsLogger));
                new BatterySavingStats(lock));
        mBatterySaverPolicy.systemReady();
        mBatterySaverPolicy.systemReady();


        mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
        mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
+9 −54
Original line number Original line Diff line number Diff line
@@ -30,14 +30,12 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.runner.AndroidJUnit4;


import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.server.power.batterysaver.BatterySavingStats.BatterySaverState;
import com.android.server.power.batterysaver.BatterySavingStats.BatterySaverState;
import com.android.server.power.batterysaver.BatterySavingStats.DozeState;
import com.android.server.power.batterysaver.BatterySavingStats.DozeState;
import com.android.server.power.batterysaver.BatterySavingStats.InteractiveState;
import com.android.server.power.batterysaver.BatterySavingStats.InteractiveState;


import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;


import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.PrintWriter;
@@ -54,7 +52,7 @@ public class BatterySavingStatsTest {
        private int mBatteryLevel = 1_000_000_000;
        private int mBatteryLevel = 1_000_000_000;


        private BatterySavingStatsTestable() {
        private BatterySavingStatsTestable() {
            super(new Object(), mMetricsLogger);
            super(new Object());
        }
        }


        @Override
        @Override
@@ -104,23 +102,13 @@ public class BatterySavingStatsTest {


    public MetricsLogger mMetricsLogger = mock(MetricsLogger.class);
    public MetricsLogger mMetricsLogger = mock(MetricsLogger.class);


    private boolean sendTronEvents;

    @Test
    public void testAll_withTron() {
        sendTronEvents = true;
        checkAll();
    }

    @Test
    @Test
    public void testAll_noTron() {
    public void testAll() {
        sendTronEvents = false;
        checkAll();
        checkAll();
    }
    }


    private void checkAll() {
    private void checkAll() {
        final BatterySavingStatsTestable target = new BatterySavingStatsTestable();
        final BatterySavingStatsTestable target = new BatterySavingStatsTestable();
        target.setSendTronLog(sendTronEvents);


        target.assertDumpable();
        target.assertDumpable();


@@ -240,46 +228,13 @@ public class BatterySavingStatsTest {
                target.toDebugString());
                target.toDebugString());
    }
    }


    private void assertLog(boolean batterySaver, boolean interactive, long deltaTimeMs,
    private void assertLog() {
            int deltaBatteryLevelUa, int deltaBatteryLevelPercent) {
        if (sendTronEvents) {
            ArgumentCaptor<LogMaker> ac = ArgumentCaptor.forClass(LogMaker.class);
            verify(mMetricsLogger, times(1)).write(ac.capture());

            LogMaker lm = ac.getValue();
            assertEquals(MetricsEvent.BATTERY_SAVER, lm.getCategory());
            assertEquals(batterySaver ? 1 : 0,
                    lm.getTaggedData(MetricsEvent.RESERVED_FOR_LOGBUILDER_SUBTYPE));
            assertEquals(interactive ? 1 : 0, lm.getTaggedData(MetricsEvent.FIELD_INTERACTIVE));
            assertEquals(deltaTimeMs, lm.getTaggedData(MetricsEvent.FIELD_DURATION_MILLIS));

            assertEquals(deltaBatteryLevelUa,
                    (int) lm.getTaggedData(MetricsEvent.FIELD_START_BATTERY_UA)
                            - (int) lm.getTaggedData(MetricsEvent.FIELD_END_BATTERY_UA));
            assertEquals(deltaBatteryLevelPercent,
                    (int) lm.getTaggedData(MetricsEvent.FIELD_START_BATTERY_PERCENT)
                            - (int) lm.getTaggedData(MetricsEvent.FIELD_END_BATTERY_PERCENT));
        } else {
        verify(mMetricsLogger, times(0)).write(any(LogMaker.class));
        verify(mMetricsLogger, times(0)).write(any(LogMaker.class));
    }
    }
    }


    @Test
    public void testMetricsLogger_withTron() {
        sendTronEvents = true;
        checkMetricsLogger();
    }


    @Test
    @Test
    public void testMetricsLogger_noTron() {
    public void testMetricsLogger() {
        sendTronEvents = false;
        checkMetricsLogger();
    }

    private void checkMetricsLogger() {
        final BatterySavingStatsTestable target = new BatterySavingStatsTestable();
        final BatterySavingStatsTestable target = new BatterySavingStatsTestable();
        target.setSendTronLog(sendTronEvents);


        target.advanceClock(1);
        target.advanceClock(1);
        target.drainBattery(1000);
        target.drainBattery(1000);
@@ -300,7 +255,7 @@ public class BatterySavingStatsTest {
                InteractiveState.NON_INTERACTIVE,
                InteractiveState.NON_INTERACTIVE,
                DozeState.NOT_DOZING);
                DozeState.NOT_DOZING);


        assertLog(false, true, 60_000, 2000, 200);
        assertLog();


        target.advanceClock(1);
        target.advanceClock(1);
        target.drainBattery(2000);
        target.drainBattery(2000);
@@ -331,7 +286,7 @@ public class BatterySavingStatsTest {
                InteractiveState.INTERACTIVE,
                InteractiveState.INTERACTIVE,
                DozeState.NOT_DOZING);
                DozeState.NOT_DOZING);


        assertLog(false, false, 60_000 * 3, 2000 * 3, 200 * 3);
        assertLog();


        target.advanceClock(10);
        target.advanceClock(10);
        target.drainBattery(10000);
        target.drainBattery(10000);
@@ -339,7 +294,7 @@ public class BatterySavingStatsTest {
        reset(mMetricsLogger);
        reset(mMetricsLogger);
        target.startCharging();
        target.startCharging();


        assertLog(true, true, 60_000 * 10, 10000, 1000);
        assertLog();


        target.advanceClock(1);
        target.advanceClock(1);
        target.drainBattery(2000);
        target.drainBattery(2000);
@@ -357,6 +312,6 @@ public class BatterySavingStatsTest {


        target.startCharging();
        target.startCharging();


        assertLog(true, false, 60_000, 2000, 200);
        assertLog();
    }
    }
}
}