From 671985f4839f8202e0a227cbec64ff818805dd5b Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Fri, 19 May 2017 11:33:42 -0700 Subject: [PATCH] Read cpu freq data only when needed. Bug: 34133340 Test: cts-tradefed run singleCommand cts-dev -m ctsIncidentHostTestCases -t \ com.android.server.cts.BatteryStatsValidationTest Change-Id: Ib235e166820b95b5cd0a496b6146ea353abdf844 --- .../java/com/android/internal/os/BatteryStatsImpl.java | 10 ++++++---- .../com/android/server/am/BatteryStatsService.java | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 25d5fae12191e..d72f57da778d9 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -185,7 +185,7 @@ public class BatteryStatsImpl extends BatteryStats { switch (msg.what) { case MSG_UPDATE_WAKELOCKS: synchronized (BatteryStatsImpl.this) { - updateCpuTimeLocked(); + updateCpuTimeLocked(false /* updateCpuFreqData */); } if (cb != null) { cb.batteryNeedsCpuUpdate(); @@ -3480,7 +3480,7 @@ public class BatteryStatsImpl extends BatteryStats { Slog.d(TAG, "Updating cpu time because screen is now " + (unpluggedScreenOff ? "off" : "on")); } - updateCpuTimeLocked(); + updateCpuTimeLocked(true /* updateCpuFreqData */); mOnBatteryScreenOffTimeBase.setRunning(unpluggedScreenOff, uptime, realtime); } } @@ -9936,7 +9936,7 @@ public class BatteryStatsImpl extends BatteryStats { * and we are on battery with screen off, we give more of the cpu time to those apps holding * wakelocks. If the screen is on, we just assign the actual cpu time an app used. */ - public void updateCpuTimeLocked() { + public void updateCpuTimeLocked(boolean updateCpuFreqData) { if (mPowerProfile == null) { return; } @@ -10051,7 +10051,9 @@ public class BatteryStatsImpl extends BatteryStats { } }); - readKernelUidCpuFreqTimesLocked(); + if (updateCpuFreqData) { + readKernelUidCpuFreqTimesLocked(); + } final long elapse = (mClocks.elapsedRealtime() - startTimeMs); if (DEBUG_ENERGY_CPU || (elapse >= 100)) { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 11fc40b047347..243906260593e 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -16,6 +16,8 @@ package com.android.server.am; +import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU; + import android.annotation.Nullable; import android.bluetooth.BluetoothActivityEnergyInfo; import android.bluetooth.BluetoothAdapter; @@ -1549,7 +1551,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub BatteryStats.HistoryItem.EVENT_COLLECT_EXTERNAL_STATS, reason, 0); - mStats.updateCpuTimeLocked(); + if ((updateFlags & UPDATE_CPU) != 0) { + mStats.updateCpuTimeLocked(true /* updateCpuFreqData */); + } mStats.updateKernelWakelocksLocked(); mStats.updateKernelMemoryBandwidthLocked();