Commit 2e1def9c authored by Sam Maier's avatar Sam Maier Committed by Chromium LUCI CQ

Fixing BatteryStatus ANR

Since getting properties from the BatteryManager can occasionally be
very slow, we get these properties in the background, and return the
result to the UI thread. This prevents the UI thread from hanging on
the slow operations.

Bug: 1163401
Change-Id: I918b36bdabfdf0a1b41063316b64bb41539ce6da
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2617468
Commit-Queue: Sam Maier <smaier@chromium.org>
Reviewed-by: default avatarTim Volodine <timvolodine@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842178}
parent 48ebdb69
...@@ -15,6 +15,7 @@ import androidx.annotation.VisibleForTesting; ...@@ -15,6 +15,7 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.task.AsyncTask;
import org.chromium.device.mojom.BatteryStatus; import org.chromium.device.mojom.BatteryStatus;
/** /**
...@@ -140,10 +141,22 @@ class BatteryStatusManager { ...@@ -140,10 +141,22 @@ class BatteryStatusManager {
batteryStatus.level = level; batteryStatus.level = level;
if (mAndroidBatteryManager != null) { if (mAndroidBatteryManager != null) {
updateBatteryStatus(batteryStatus); // Doing an AsyncTask since querying the BatteryManager might be slow. In the past, it
// has caused ANRs when executed on the main thread - see crbug.com/1163401.
new AsyncTask<BatteryStatus>() {
@Override
protected BatteryStatus doInBackground() {
updateBatteryStatus(batteryStatus);
return batteryStatus;
}
@Override
protected void onPostExecute(BatteryStatus batteryStatus) {
mCallback.onBatteryStatusChanged(batteryStatus);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
mCallback.onBatteryStatusChanged(batteryStatus);
} }
mCallback.onBatteryStatusChanged(batteryStatus);
} }
private void updateBatteryStatus(BatteryStatus batteryStatus) { private void updateBatteryStatus(BatteryStatus batteryStatus) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment