Loading services/core/java/com/android/server/am/BatteryStatsService.java +27 −12 Original line number Diff line number Diff line Loading @@ -128,13 +128,18 @@ public final class BatteryStatsService extends IBatteryStats.Stub .replaceWith("?"); private static final int MAX_LOW_POWER_STATS_SIZE = 4096; private static final int POWER_STATS_QUERY_TIMEOUT_MILLIS = 2000; private static final String EMPTY = "Empty"; private final HandlerThread mHandlerThread; private final Handler mHandler; private final Object mLock = new Object(); private final Object mPowerStatsLock = new Object(); @GuardedBy("mPowerStatsLock") private PowerStatsInternal mPowerStatsInternal = null; @GuardedBy("mPowerStatsLock") private Map<Integer, String> mEntityNames = new HashMap(); @GuardedBy("mPowerStatsLock") private Map<Integer, Map<Integer, String>> mStateNames = new HashMap(); @GuardedBy("mStats") Loading Loading @@ -172,13 +177,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub }; private void populatePowerEntityMaps() { if (mPowerStatsInternal == null) { // PowerStatsInternal unavailable, don't bother populating maps. mEntityNames = null; mStateNames = null; return; } PowerEntity[] entities = mPowerStatsInternal.getPowerEntityInfo(); if (entities == null) { return; Loading @@ -202,6 +200,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub */ @Override public void fillLowPowerStats(RpmStats rpmStats) { synchronized (mPowerStatsLock) { if (mPowerStatsInternal == null || mEntityNames.isEmpty() || mStateNames.isEmpty()) { return; } } final StateResidencyResult[] results; try { results = mPowerStatsInternal.getStateResidencyAsync(new int[0]) Loading Loading @@ -237,16 +241,22 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override public String getSubsystemLowPowerStats() { synchronized (mPowerStatsLock) { if (mPowerStatsInternal == null || mEntityNames.isEmpty() || mStateNames.isEmpty()) { return EMPTY; } } final StateResidencyResult[] results; try { results = mPowerStatsInternal.getStateResidencyAsync(new int[0]) .get(POWER_STATS_QUERY_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (Exception e) { Slog.e(TAG, "Failed to getStateResidencyAsync", e); return "Empty"; return EMPTY; } if (results.length == 0) return "Empty"; if (results.length == 0) return EMPTY; int charsLeft = MAX_LOW_POWER_STATS_SIZE; StringBuilder builder = new StringBuilder("SubsystemPowerState"); Loading Loading @@ -322,9 +332,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub } catch (RemoteException e) { Slog.e(TAG, "Could not register INetworkManagement event observer " + e); } synchronized (mPowerStatsLock) { mPowerStatsInternal = LocalServices.getService(PowerStatsInternal.class); if (mPowerStatsInternal != null) { populatePowerEntityMaps(); } else { Slog.e(TAG, "Could not register PowerStatsInternal"); } } Watchdog.getInstance().addMonitor(this); Loading Loading
services/core/java/com/android/server/am/BatteryStatsService.java +27 −12 Original line number Diff line number Diff line Loading @@ -128,13 +128,18 @@ public final class BatteryStatsService extends IBatteryStats.Stub .replaceWith("?"); private static final int MAX_LOW_POWER_STATS_SIZE = 4096; private static final int POWER_STATS_QUERY_TIMEOUT_MILLIS = 2000; private static final String EMPTY = "Empty"; private final HandlerThread mHandlerThread; private final Handler mHandler; private final Object mLock = new Object(); private final Object mPowerStatsLock = new Object(); @GuardedBy("mPowerStatsLock") private PowerStatsInternal mPowerStatsInternal = null; @GuardedBy("mPowerStatsLock") private Map<Integer, String> mEntityNames = new HashMap(); @GuardedBy("mPowerStatsLock") private Map<Integer, Map<Integer, String>> mStateNames = new HashMap(); @GuardedBy("mStats") Loading Loading @@ -172,13 +177,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub }; private void populatePowerEntityMaps() { if (mPowerStatsInternal == null) { // PowerStatsInternal unavailable, don't bother populating maps. mEntityNames = null; mStateNames = null; return; } PowerEntity[] entities = mPowerStatsInternal.getPowerEntityInfo(); if (entities == null) { return; Loading @@ -202,6 +200,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub */ @Override public void fillLowPowerStats(RpmStats rpmStats) { synchronized (mPowerStatsLock) { if (mPowerStatsInternal == null || mEntityNames.isEmpty() || mStateNames.isEmpty()) { return; } } final StateResidencyResult[] results; try { results = mPowerStatsInternal.getStateResidencyAsync(new int[0]) Loading Loading @@ -237,16 +241,22 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override public String getSubsystemLowPowerStats() { synchronized (mPowerStatsLock) { if (mPowerStatsInternal == null || mEntityNames.isEmpty() || mStateNames.isEmpty()) { return EMPTY; } } final StateResidencyResult[] results; try { results = mPowerStatsInternal.getStateResidencyAsync(new int[0]) .get(POWER_STATS_QUERY_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (Exception e) { Slog.e(TAG, "Failed to getStateResidencyAsync", e); return "Empty"; return EMPTY; } if (results.length == 0) return "Empty"; if (results.length == 0) return EMPTY; int charsLeft = MAX_LOW_POWER_STATS_SIZE; StringBuilder builder = new StringBuilder("SubsystemPowerState"); Loading Loading @@ -322,9 +332,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub } catch (RemoteException e) { Slog.e(TAG, "Could not register INetworkManagement event observer " + e); } synchronized (mPowerStatsLock) { mPowerStatsInternal = LocalServices.getService(PowerStatsInternal.class); if (mPowerStatsInternal != null) { populatePowerEntityMaps(); } else { Slog.e(TAG, "Could not register PowerStatsInternal"); } } Watchdog.getInstance().addMonitor(this); Loading