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

Commit 1decad5e authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Fixing issue in current and max duration calculations." into nyc-mr2-dev

parents 31b96311 c6bd4243
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ public abstract class BatteryStats implements Parcelable {
     * New in version 19:
     *   - Wakelock data (wl) gets current and max times.
     */
    static final String CHECKIN_VERSION = "19";
    static final String CHECKIN_VERSION = "20";

    /**
     * Old version, we hit 9 and ran out of room, need to remove.
+16 −15
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ public class BatteryStatsImpl extends BatteryStats {
    private static final int MAGIC = 0xBA757475; // 'BATSTATS'

    // Current on-disk Parcel version
    private static final int VERSION = 150 + (USE_OLD_HISTORY ? 1000 : 0);
    private static final int VERSION = 151 + (USE_OLD_HISTORY ? 1000 : 0);

    // Maximum number of items we will record in the history.
    private static final int MAX_HISTORY_ITEMS = 2000;
@@ -1593,7 +1593,7 @@ public class BatteryStatsImpl extends BatteryStats {
        @Override
        public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
            super.writeToParcel(out, elapsedRealtimeUs);
            out.writeLong(mMaxDurationMs);
            out.writeLong(getMaxDurationMsLocked(elapsedRealtimeUs / 1000));
        }

        /**
@@ -1606,7 +1606,7 @@ public class BatteryStatsImpl extends BatteryStats {
        @Override
        public void writeSummaryFromParcelLocked(Parcel out, long elapsedRealtimeUs) {
            super.writeSummaryFromParcelLocked(out, elapsedRealtimeUs);
            out.writeLong(mMaxDurationMs);
            out.writeLong(getMaxDurationMsLocked(elapsedRealtimeUs / 1000));
        }

        /**
@@ -1630,7 +1630,7 @@ public class BatteryStatsImpl extends BatteryStats {
        public void onTimeStarted(long elapsedRealtimeUs, long baseUptime, long baseRealtime) {
            super.onTimeStarted(elapsedRealtimeUs, baseUptime, baseRealtime);
            if (mNesting > 0) {
                mStartTimeMs = mTimeBase.getRealtime(mClocks.elapsedRealtime()*1000) / 1000;
                mStartTimeMs = baseRealtime / 1000;
            }
        }

@@ -1640,10 +1640,11 @@ public class BatteryStatsImpl extends BatteryStats {
         * If the timer is running, add the duration into mCurrentDurationMs.
         */
        @Override
        public void onTimeStopped(long elapsedRealtimeUs, long baseUptime, long baseRealtime) {
            super.onTimeStopped(elapsedRealtimeUs, baseUptime, baseRealtime);
        public void onTimeStopped(long elapsedRealtimeUs, long baseUptime, long baseRealtimeUs) {
            super.onTimeStopped(elapsedRealtimeUs, baseUptime, baseRealtimeUs);
            if (mNesting > 0) {
                mCurrentDurationMs += (elapsedRealtimeUs / 1000) - mStartTimeMs;
                // baseRealtimeUs has already been converted to the timebase's realtime.
                mCurrentDurationMs += (baseRealtimeUs / 1000) - mStartTimeMs;
            }
            mStartTimeMs = -1;
        }
@@ -1658,7 +1659,7 @@ public class BatteryStatsImpl extends BatteryStats {
            super.startRunningLocked(elapsedRealtimeMs);
            if (mNesting == 1 && mTimeBase.isRunning()) {
                // Just started
                mStartTimeMs = mTimeBase.getRealtime(mClocks.elapsedRealtime()*1000) / 1000;
                mStartTimeMs = mTimeBase.getRealtime(elapsedRealtimeMs * 1000) / 1000;
            }
        }

@@ -1670,8 +1671,7 @@ public class BatteryStatsImpl extends BatteryStats {
         */
        @Override
        public void stopRunningLocked(long elapsedRealtimeMs) {
            super.stopRunningLocked(elapsedRealtimeMs);
            if (mNesting == 0) {
            if (mNesting == 1) {
                final long durationMs = getCurrentDurationMsLocked(elapsedRealtimeMs);
                if (durationMs > mMaxDurationMs) {
                    mMaxDurationMs = durationMs;
@@ -1679,6 +1679,9 @@ public class BatteryStatsImpl extends BatteryStats {
                mStartTimeMs = -1;
                mCurrentDurationMs = 0;
            }
            // super method decrements mNesting, which getCurrentDurationMsLocked relies on,
            // so call super.stopRunningLocked after calling getCurrentDurationMsLocked.
            super.stopRunningLocked(elapsedRealtimeMs);
        }

        @Override
@@ -1720,12 +1723,10 @@ public class BatteryStatsImpl extends BatteryStats {
        @Override
        public long getCurrentDurationMsLocked(long elapsedRealtimeMs) {
            long durationMs = mCurrentDurationMs;
            if (mNesting > 0) {
                if (mTimeBase.isRunning()) {
            if (mNesting > 0 && mTimeBase.isRunning()) {
                durationMs += (mTimeBase.getRealtime(elapsedRealtimeMs*1000)/1000)
                        - mStartTimeMs;
            }
            }
            return durationMs;
        }
    }
+9 −12
Original line number Diff line number Diff line
@@ -18,12 +18,9 @@ package com.android.internal.os;
import android.os.BatteryStats;
import android.os.Parcel;
import android.support.test.filters.SmallTest;
import android.util.Log;

import junit.framework.TestCase;

import org.mockito.Mockito;

/**
 * Test BatteryStatsImpl.DurationTimer.
 *
@@ -82,15 +79,15 @@ public class BatteryStatsDurationTimerTest extends TestCase {
        // Stop the TimeBase. The values should be frozen.
        timeBase.setRunning(false, /* uptimeUs */ 10, /* realtimeUs */ 55000*1000);
        assertTrue(timer.isRunningLocked());
        assertEquals(28100, timer.getCurrentDurationMsLocked(110100)); // Why 28100 and not 28000?
        assertEquals(28100, timer.getMaxDurationMsLocked(110101));
        assertEquals(28000, timer.getCurrentDurationMsLocked(110100));
        assertEquals(28000, timer.getMaxDurationMsLocked(110101));

        // Start the TimeBase. The values should be the old value plus the delta
        // between when the timer restarted and the current time
        timeBase.setRunning(true, /* uptimeUs */ 10, /* realtimeUs */ 220100*1000);
        assertTrue(timer.isRunningLocked());
        assertEquals(28300, timer.getCurrentDurationMsLocked(220300)); // extra 100 from above??
        assertEquals(28301, timer.getMaxDurationMsLocked(220301));
        assertEquals(28200, timer.getCurrentDurationMsLocked(220300));
        assertEquals(28201, timer.getMaxDurationMsLocked(220301));
    }

    @SmallTest