Reduce sleep duration in SuspendAllDaemonThreads
Previously we unconditionally slept for 200ms which caused runtime
shutdown to take 200ms longer than required.
Reduces runtime shutdown time for "am" from ~200ms to ~10ms.
Bug: 26351700
Change-Id: I7fd0059cb3b04dba0acc4a1754e76c89ec867f85
diff --git a/runtime/thread_list.cc b/runtime/thread_list.cc
index 77f780f..f9eb935 100644
--- a/runtime/thread_list.cc
+++ b/runtime/thread_list.cc
@@ -1158,8 +1158,9 @@
}
// Give the threads a chance to suspend, complaining if they're slow.
bool have_complained = false;
- for (int i = 0; i < 10; ++i) {
- usleep(200 * 1000);
+ static constexpr size_t kTimeoutMicroseconds = 200 * 1000;
+ static constexpr size_t kSleepMicroseconds = 1000;
+ for (size_t i = 0; i < kTimeoutMicroseconds / kSleepMicroseconds; ++i) {
bool all_suspended = true;
for (const auto& thread : list_) {
if (thread != self && thread->GetState() == kRunnable) {
@@ -1173,8 +1174,9 @@
if (all_suspended) {
return;
}
+ usleep(kSleepMicroseconds);
}
- LOG(ERROR) << "suspend all daemons failed";
+ LOG(ERROR) << "timed out suspending all daemon threads";
}
void ThreadList::Register(Thread* self) {
DCHECK_EQ(self, Thread::Current());