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

Commit c9430110 authored by Kweku Adams's avatar Kweku Adams Committed by android-build-merger
Browse files

Fixing issue in current and max duration calculations.

am: c6bd4243

Change-Id: I109e0599a631de20d28723bb9ad714c0aedb2fac
parents ca504aae 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