Move batterystats stats collection to its own thread

Too many other tasks run on common handlers, and the batterystats collection
may block waiting for a timeout of up to 2 seconds.

Bug:27857665
Change-Id: I5be1ddc374d69620f4f7d821eb29e8524294c9a4
This commit is contained in:
Adam Lesinski
2016-04-19 17:33:33 -07:00
parent 6e08a629c4
commit 20b84dfa59

View File

@@ -58,8 +58,8 @@ import com.android.internal.app.IBatteryStats;
import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.PowerProfile;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.ServiceThread;
import java.io.File;
import java.io.FileDescriptor;
@@ -176,7 +176,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
BatteryStatsService(File systemDir, Handler handler) {
// Our handler here will be accessing the disk, use a different thread than
// what the ActivityManagerService gave us (no I/O on that one!).
mHandler = new BatteryStatsHandler(FgThread.getHandler().getLooper());
final ServiceThread thread = new ServiceThread("batterystats-sync",
Process.THREAD_PRIORITY_DEFAULT, true);
thread.start();
mHandler = new BatteryStatsHandler(thread.getLooper());
// BatteryStatsImpl expects the ActivityManagerService handler, so pass that one through.
mStats = new BatteryStatsImpl(systemDir, handler, mHandler);
@@ -209,6 +212,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub
synchronized (mStats) {
mStats.shutdownLocked();
}
// Shutdown the thread we made.
mHandler.getLooper().quit();
}
public static IBatteryStats getService() {