diff options
| author | 2022-12-21 18:01:18 +0000 | |
|---|---|---|
| committer | 2022-12-21 18:01:18 +0000 | |
| commit | 15c52c5407fc9f5baa147a8e062014b0c9b0d3f5 (patch) | |
| tree | b4b3cd0cd9f3335b3ba8d4668aeca69fe4654123 | |
| parent | 7f120bc0baebf97349f81538e801f172d84d4fef (diff) | |
| parent | 484e832a256269e38cc81f1622ce79525d5f1f39 (diff) | |
Merge "Disable BatteryStatsService watchdog during dumpsys"
| -rw-r--r-- | services/core/java/com/android/server/am/BatteryStatsService.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 23ed0c4e5f82..5b453b268e79 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -153,6 +153,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub private final Context mContext; private final BatteryExternalStatsWorker mWorker; private final BatteryUsageStatsProvider mBatteryUsageStatsProvider; + private volatile boolean mMonitorEnabled = true; private native void getRailEnergyPowerStats(RailStats railStats); private CharsetDecoder mDecoderStat = StandardCharsets.UTF_8 @@ -481,6 +482,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override public void monitor() { + if (!mMonitorEnabled) { + return; + } synchronized (mLock) { } synchronized (mStats) { @@ -2602,6 +2606,19 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + // If the monitor() method is already holding a lock on mStats, no harm done: we will + // just wait for mStats in the dumpUnmonitored method below. In fact, we would want + // Watchdog to catch the service in the act in that situation. We just don't want the + // dump method itself to be blamed for holding the lock for too long. + mMonitorEnabled = false; + try { + dumpUnmonitored(fd, pw, args); + } finally { + mMonitorEnabled = true; + } + } + + private void dumpUnmonitored(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) return; int flags = 0; |