Loading core/java/com/android/internal/os/BatteryStatsImpl.java +12 −8 Original line number Diff line number Diff line Loading @@ -6724,7 +6724,7 @@ public class BatteryStatsImpl extends BatteryStats { int mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; StopwatchTimer[] mWifiBatchedScanTimer; boolean mWifiMulticastEnabled; int mWifiMulticastWakelockCount; StopwatchTimer mWifiMulticastTimer; StopwatchTimer mAudioTurnedOnTimer; Loading Loading @@ -7183,8 +7183,7 @@ public class BatteryStatsImpl extends BatteryStats { @Override public void noteWifiMulticastEnabledLocked(long elapsedRealtimeMs) { if (!mWifiMulticastEnabled) { mWifiMulticastEnabled = true; if (mWifiMulticastWakelockCount == 0) { if (mWifiMulticastTimer == null) { mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_MULTICAST_ENABLED, mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase); Loading @@ -7194,12 +7193,17 @@ public class BatteryStatsImpl extends BatteryStats { StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED, getUid(), null, StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED__STATE__ON); } mWifiMulticastWakelockCount++; } @Override public void noteWifiMulticastDisabledLocked(long elapsedRealtimeMs) { if (mWifiMulticastEnabled) { mWifiMulticastEnabled = false; if (mWifiMulticastWakelockCount == 0) { return; } mWifiMulticastWakelockCount--; if (mWifiMulticastWakelockCount == 0) { mWifiMulticastTimer.stopRunningLocked(elapsedRealtimeMs); StatsLog.write_non_chained( StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED, getUid(), null, Loading Loading @@ -7932,7 +7936,7 @@ public class BatteryStatsImpl extends BatteryStats { } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(false); active |= mWifiMulticastEnabled; active |= (mWifiMulticastWakelockCount > 0); } active |= !resetIfNotNull(mAudioTurnedOnTimer, false); Loading Loading @@ -8590,7 +8594,7 @@ public class BatteryStatsImpl extends BatteryStats { mWifiBatchedScanTimer[i] = null; } } mWifiMulticastEnabled = false; mWifiMulticastWakelockCount = 0; if (in.readInt() != 0) { mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_MULTICAST_ENABLED, mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase, in); Loading Loading @@ -14031,7 +14035,7 @@ public class BatteryStatsImpl extends BatteryStats { u.mWifiBatchedScanTimer[i].readSummaryFromParcelLocked(in); } } u.mWifiMulticastEnabled = false; u.mWifiMulticastWakelockCount = 0; if (in.readInt() != 0) { u.mWifiMulticastTimer.readSummaryFromParcelLocked(in); } core/tests/coretests/src/com/android/internal/os/BatteryStatsImplTest.java +108 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -302,6 +303,113 @@ public class BatteryStatsImplTest { assertArrayEquals(expected, mBatteryStatsImpl.addCpuTimes(timesA, timesB)); } @Test public void testMulticastWakelockAcqRel() { final int testUid = 10032; final int acquireTimeMs = 1000; final int releaseTimeMs = 1005; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock u.noteWifiMulticastEnabledLocked(acquireTimeMs); u.noteWifiMulticastDisabledLocked(releaseTimeMs); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (releaseTimeMs - acquireTimeMs) * 1000, totalTime); } @Test public void testMulticastWakelockAcqNoRel() { final int testUid = 10032; final int acquireTimeMs = 1000; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire the lock u.noteWifiMulticastEnabledLocked(acquireTimeMs); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (currentTimeMs - acquireTimeMs) * 1000, totalTime); } @Test public void testMulticastWakelockAcqAcqRelRel() { final int testUid = 10032; final int acquireTimeMs_1 = 1000; final int acquireTimeMs_2 = 1002; final int releaseTimeMs_1 = 1005; final int releaseTimeMs_2 = 1009; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock (twice in nested way) u.noteWifiMulticastEnabledLocked(acquireTimeMs_1); u.noteWifiMulticastEnabledLocked(acquireTimeMs_2); u.noteWifiMulticastDisabledLocked(releaseTimeMs_1); u.noteWifiMulticastDisabledLocked(releaseTimeMs_2); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (releaseTimeMs_2 - acquireTimeMs_1) * 1000, totalTime); } @Test public void testMulticastWakelockAcqRelAcqRel() { final int testUid = 10032; final int acquireTimeMs_1 = 1000; final int acquireTimeMs_2 = 1005; final int releaseTimeMs_1 = 1002; final int releaseTimeMs_2 = 1009; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock (twice) u.noteWifiMulticastEnabledLocked(acquireTimeMs_1); u.noteWifiMulticastDisabledLocked(releaseTimeMs_1); u.noteWifiMulticastEnabledLocked(acquireTimeMs_2); u.noteWifiMulticastDisabledLocked(releaseTimeMs_2); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", ((releaseTimeMs_1 - acquireTimeMs_1) + (releaseTimeMs_2 - acquireTimeMs_2)) * 1000, totalTime); } private void addIsolatedUid(int parentUid, int childUid) { final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(parentUid); u.addIsolatedUid(childUid); Loading Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +12 −8 Original line number Diff line number Diff line Loading @@ -6724,7 +6724,7 @@ public class BatteryStatsImpl extends BatteryStats { int mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; StopwatchTimer[] mWifiBatchedScanTimer; boolean mWifiMulticastEnabled; int mWifiMulticastWakelockCount; StopwatchTimer mWifiMulticastTimer; StopwatchTimer mAudioTurnedOnTimer; Loading Loading @@ -7183,8 +7183,7 @@ public class BatteryStatsImpl extends BatteryStats { @Override public void noteWifiMulticastEnabledLocked(long elapsedRealtimeMs) { if (!mWifiMulticastEnabled) { mWifiMulticastEnabled = true; if (mWifiMulticastWakelockCount == 0) { if (mWifiMulticastTimer == null) { mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_MULTICAST_ENABLED, mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase); Loading @@ -7194,12 +7193,17 @@ public class BatteryStatsImpl extends BatteryStats { StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED, getUid(), null, StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED__STATE__ON); } mWifiMulticastWakelockCount++; } @Override public void noteWifiMulticastDisabledLocked(long elapsedRealtimeMs) { if (mWifiMulticastEnabled) { mWifiMulticastEnabled = false; if (mWifiMulticastWakelockCount == 0) { return; } mWifiMulticastWakelockCount--; if (mWifiMulticastWakelockCount == 0) { mWifiMulticastTimer.stopRunningLocked(elapsedRealtimeMs); StatsLog.write_non_chained( StatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED, getUid(), null, Loading Loading @@ -7932,7 +7936,7 @@ public class BatteryStatsImpl extends BatteryStats { } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(false); active |= mWifiMulticastEnabled; active |= (mWifiMulticastWakelockCount > 0); } active |= !resetIfNotNull(mAudioTurnedOnTimer, false); Loading Loading @@ -8590,7 +8594,7 @@ public class BatteryStatsImpl extends BatteryStats { mWifiBatchedScanTimer[i] = null; } } mWifiMulticastEnabled = false; mWifiMulticastWakelockCount = 0; if (in.readInt() != 0) { mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_MULTICAST_ENABLED, mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase, in); Loading Loading @@ -14031,7 +14035,7 @@ public class BatteryStatsImpl extends BatteryStats { u.mWifiBatchedScanTimer[i].readSummaryFromParcelLocked(in); } } u.mWifiMulticastEnabled = false; u.mWifiMulticastWakelockCount = 0; if (in.readInt() != 0) { u.mWifiMulticastTimer.readSummaryFromParcelLocked(in); }
core/tests/coretests/src/com/android/internal/os/BatteryStatsImplTest.java +108 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -302,6 +303,113 @@ public class BatteryStatsImplTest { assertArrayEquals(expected, mBatteryStatsImpl.addCpuTimes(timesA, timesB)); } @Test public void testMulticastWakelockAcqRel() { final int testUid = 10032; final int acquireTimeMs = 1000; final int releaseTimeMs = 1005; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock u.noteWifiMulticastEnabledLocked(acquireTimeMs); u.noteWifiMulticastDisabledLocked(releaseTimeMs); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (releaseTimeMs - acquireTimeMs) * 1000, totalTime); } @Test public void testMulticastWakelockAcqNoRel() { final int testUid = 10032; final int acquireTimeMs = 1000; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire the lock u.noteWifiMulticastEnabledLocked(acquireTimeMs); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (currentTimeMs - acquireTimeMs) * 1000, totalTime); } @Test public void testMulticastWakelockAcqAcqRelRel() { final int testUid = 10032; final int acquireTimeMs_1 = 1000; final int acquireTimeMs_2 = 1002; final int releaseTimeMs_1 = 1005; final int releaseTimeMs_2 = 1009; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock (twice in nested way) u.noteWifiMulticastEnabledLocked(acquireTimeMs_1); u.noteWifiMulticastEnabledLocked(acquireTimeMs_2); u.noteWifiMulticastDisabledLocked(releaseTimeMs_1); u.noteWifiMulticastDisabledLocked(releaseTimeMs_2); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", (releaseTimeMs_2 - acquireTimeMs_1) * 1000, totalTime); } @Test public void testMulticastWakelockAcqRelAcqRel() { final int testUid = 10032; final int acquireTimeMs_1 = 1000; final int acquireTimeMs_2 = 1005; final int releaseTimeMs_1 = 1002; final int releaseTimeMs_2 = 1009; final int currentTimeMs = 1011; mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0); // Create a Uid Object final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid); assertNotNull(u); // Acquire and release the lock (twice) u.noteWifiMulticastEnabledLocked(acquireTimeMs_1); u.noteWifiMulticastDisabledLocked(releaseTimeMs_1); u.noteWifiMulticastEnabledLocked(acquireTimeMs_2); u.noteWifiMulticastDisabledLocked(releaseTimeMs_2); // Get the total acquisition time long totalTime = u.getWifiMulticastTime(currentTimeMs*1000, BatteryStats.STATS_SINCE_UNPLUGGED); assertEquals("Miscalculations of Multicast wakelock acquisition time", ((releaseTimeMs_1 - acquireTimeMs_1) + (releaseTimeMs_2 - acquireTimeMs_2)) * 1000, totalTime); } private void addIsolatedUid(int parentUid, int childUid) { final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(parentUid); u.addIsolatedUid(childUid); Loading