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

Commit 32cf9dc8 authored by Jing Ji's avatar Jing Ji
Browse files

Untangle BatteryStats lock

Make the BatteryStatsService's APIs asynced

Bug: 165378777
Bug: 157089413
Test: atest FrameworksCoreTests:BatteryStatsTests
Test: atest CtsIncidentHostTestCases
Test: atest BatteryStatsDumpsysTest
Test: atest CtsTelephonyTestCases:BatteryStatsManagerTest

Change-Id: Ief9d5a2dd8967814d4b66e9c3bd270778249c70b
parent f2d5bf57
Loading
Loading
Loading
Loading
+1930 −1320

File changed.

Preview size limit exceeded, changes collapsed.

+10 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.internal.os;

import android.os.BatteryStats;
import android.os.Parcel;
import android.os.SystemClock;

import androidx.test.filters.SmallTest;

@@ -36,9 +37,9 @@ public class BatteryStatsSamplingTimerTest extends TestCase {
        timer.onTimeStarted(100, 100, 100);

        // First update is absorbed.
        timer.update(10, 1);
        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);

        timer.update(20, 2);
        timer.update(20, 2, SystemClock.elapsedRealtime() * 1000);

        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
@@ -62,7 +63,7 @@ public class BatteryStatsSamplingTimerTest extends TestCase {
                timeBase);

        // First once is absorbed.
        timer.update(10, 1);
        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);

        timer.add(10, 1);

@@ -71,7 +72,7 @@ public class BatteryStatsSamplingTimerTest extends TestCase {

        // This is less than we currently have, so we will end the sample. Time isn't running, so
        // nothing should happen.
        timer.update(0, 0);
        timer.update(0, 0, SystemClock.elapsedRealtime() * 1000);

        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(0, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
@@ -86,7 +87,7 @@ public class BatteryStatsSamplingTimerTest extends TestCase {

        // This is less than we currently have, so we should end our sample and continue with the
        // entire amount updated here.
        timer.update(50, 5);
        timer.update(50, 5, SystemClock.elapsedRealtime() * 1000);

        assertEquals(150, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(15, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
@@ -106,7 +107,7 @@ public class BatteryStatsSamplingTimerTest extends TestCase {

        // This should be absorbed because it is our first update and we don't know what
        // was being counted before.
        timer.update(10, 1);
        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);

        assertEquals(0, timer.getTotalTimeLocked(10, BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
@@ -115,7 +116,7 @@ public class BatteryStatsSamplingTimerTest extends TestCase {
        timer.onTimeStarted(100, 100, 100);

        // This should be absorbed.
        timer.update(10, 1);
        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);

        assertEquals(0, timer.getTotalTimeLocked(100, BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
@@ -206,13 +207,13 @@ public class BatteryStatsSamplingTimerTest extends TestCase {

        // Now, just like with a fresh timer, the first update should be absorbed to account for
        // data being collected when we weren't recording.
        unparceledOnBatteryTimer.update(10, 10);
        unparceledOnBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);

        assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
                BatteryStats.STATS_SINCE_CHARGED));
        assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));

        unparceledOffBatteryTimer.update(10, 10);
        unparceledOffBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);

        assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
                BatteryStats.STATS_SINCE_CHARGED));
+50 −15
Original line number Diff line number Diff line
@@ -36,22 +36,22 @@ public class BatteryStatsServTest extends TestCase {
        }

        void populate() {
            mStartTime = 1010;
            mRunningSince = 2021;
            mStartTimeMs = 1010;
            mRunningSinceMs = 2021;
            mRunning = true;
            mStarts = 4042;
            mLaunchedTime = 5053;
            mLaunchedSince = 6064;
            mLaunchedTimeMs = 5053;
            mLaunchedSinceMs = 6064;
            mLaunched = true;
            mLaunches = 8085;
        }

        long getStartTime() {
            return mStartTime;
            return mStartTimeMs;
        }

        long getRunningSince() {
            return mRunningSince;
            return mRunningSinceMs;
        }

        void setRunning(boolean val) {
@@ -67,11 +67,11 @@ public class BatteryStatsServTest extends TestCase {
        }

        long getLaunchedTime() {
            return mLaunchedTime;
            return mLaunchedTimeMs;
        }

        long getLaunchedSince() {
            return mLaunchedSince;
            return mLaunchedSinceMs;
        }

        void setLaunched(boolean val) {
@@ -173,7 +173,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };

@@ -202,7 +207,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };

@@ -229,7 +239,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };
        TestServ serv = new TestServ(bsi);
@@ -259,7 +274,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };
        TestServ serv = new TestServ(bsi);
@@ -316,7 +336,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };
        TestServ serv = new TestServ(bsi);
@@ -345,7 +370,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };
        TestServ serv = new TestServ(bsi);
@@ -374,7 +404,12 @@ public class BatteryStatsServTest extends TestCase {
        MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() {
            @Override
            public long getBatteryUptimeLocked() {
                return 777777L;
                return 777777L * 1000; // microseconds
            }

            @Override
            public long getBatteryUptimeLocked(long uptimeMs) {
                return 777777L * 1000; // microseconds
            }
        };
        TestServ serv = new TestServ(bsi);
+16 −16
Original line number Diff line number Diff line
@@ -41,29 +41,29 @@ public class BatteryStatsTimeBaseTest extends TestCase {
        public void populate(long uptime, long realtime, boolean running, long pastUptime,
                long uptimeStart, long pastRealtime, long realtimeStart,
                long unpluggedUptime, long unpluggedRealtime) {
            mUptime = uptime;
            mRealtime = realtime;
            mUptimeUs = uptime;
            mRealtimeUs = realtime;
            mRunning = running;
            mPastUptime = pastUptime;
            mUptimeStart = uptimeStart;
            mPastRealtime = pastRealtime;
            mRealtimeStart = realtimeStart;
            mUnpluggedUptime = unpluggedUptime;
            mUnpluggedRealtime = unpluggedRealtime;
            mPastUptimeUs = pastUptime;
            mUptimeStartUs = uptimeStart;
            mPastRealtimeUs = pastRealtime;
            mRealtimeStartUs = realtimeStart;
            mUnpluggedUptimeUs = unpluggedUptime;
            mUnpluggedRealtimeUs = unpluggedRealtime;
        }

        public void verify(long uptime, long realtime, boolean running, long pastUptime,
                long uptimeStart, long pastRealtime, long realtimeStart,
                long unpluggedUptime, long unpluggedRealtime) {
            Assert.assertEquals(uptime, mUptime);
            Assert.assertEquals(realtime, mRealtime);
            Assert.assertEquals(uptime, mUptimeUs);
            Assert.assertEquals(realtime, mRealtimeUs);
            Assert.assertEquals(running, mRunning);
            Assert.assertEquals(pastUptime, mPastUptime);
            Assert.assertEquals(uptimeStart, mUptimeStart);
            Assert.assertEquals(pastRealtime, mPastRealtime);
            Assert.assertEquals(realtimeStart, mRealtimeStart);
            Assert.assertEquals(unpluggedUptime, mUnpluggedUptime);
            Assert.assertEquals(unpluggedRealtime, mUnpluggedRealtime);
            Assert.assertEquals(pastUptime, mPastUptimeUs);
            Assert.assertEquals(uptimeStart, mUptimeStartUs);
            Assert.assertEquals(pastRealtime, mPastRealtimeUs);
            Assert.assertEquals(realtimeStart, mRealtimeStartUs);
            Assert.assertEquals(unpluggedUptime, mUnpluggedUptimeUs);
            Assert.assertEquals(unpluggedRealtime, mUnpluggedRealtimeUs);
        }
    }

+6 −5
Original line number Diff line number Diff line
@@ -49,7 +49,8 @@ public class BatteryStatsTimerTest extends TestCase {
            super(clocks, type, timeBase);
        }

        protected long computeRunTimeLocked(long curBatteryRealtime) {
        @Override
        protected long computeRunTimeLocked(long curBatteryRealtime, long elapsedRealtimeUs) {
            lastComputeRunTimeRealtime = curBatteryRealtime;
            return nextComputeRunTime;
        }
@@ -67,19 +68,19 @@ public class BatteryStatsTimerTest extends TestCase {
        }

        public long getTotalTime() {
            return mTotalTime;
            return mTotalTimeUs;
        }

        public void setTotalTime(long val) {
            mTotalTime = val;
            mTotalTimeUs = val;
        }

        public long getTimeBeforeMark() {
            return mTimeBeforeMark;
            return mTimeBeforeMarkUs;
        }

        public void setTimeBeforeMark(long val) {
            mTimeBeforeMark = val;
            mTimeBeforeMarkUs = val;
        }
    }

Loading