Add thread to check for lock contention.

Using the foreground thread will block the foreground thread when there
is lock contention. Some of the lock checks are guarding code which is
writing to disk for instance.

Test: manual

Change-Id: I431c5c34984c7f58cfe4f4127071521811edefb8
This commit is contained in:
Olivier Gaillard
2022-04-01 13:12:47 +01:00
parent dea5a7c8e6
commit 7ad419a46c

View File

@@ -390,11 +390,16 @@ public class Watchdog {
// potentially hold longer running operations with no guarantees about the timeliness
// of operations there.
//
// The shared foreground thread is the main checker. It is where we
// will also dispatch monitor checks and do other work.
mMonitorChecker = new HandlerChecker(FgThread.getHandler(),
"foreground thread");
// Use a custom thread to check monitors to avoid lock contention from impacted other
// threads.
ServiceThread t = new ServiceThread("watchdog.monitor",
android.os.Process.THREAD_PRIORITY_DEFAULT, true /*allowIo*/);
t.start();
mMonitorChecker = new HandlerChecker(new Handler(t.getLooper()), "monitor thread");
mHandlerCheckers.add(withDefaultTimeout(mMonitorChecker));
mHandlerCheckers.add(withDefaultTimeout(
new HandlerChecker(FgThread.getHandler(), "foreground thread")));
// Add checker for main thread. We only do a quick check since there
// can be UI running on the thread.
mHandlerCheckers.add(withDefaultTimeout(