From fdafb3d0ec67b40894ce0dd597d3142cc98ab943 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Fri, 8 Jun 2018 00:34:44 -0700 Subject: [PATCH] init: Add warning in init first stage mount init need find required devices and it some times takes a long time due to rogue drivers. Add a warning if the timing is longer than 50ms. Bug: 80494921 Test: Reboot Change-Id: I8f937d7ca7127dc89ed76bb6e5f1781459d5c94a --- init/uevent_listener.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/init/uevent_listener.cpp b/init/uevent_listener.cpp index 24b14c44d..81486e108 100644 --- a/init/uevent_listener.cpp +++ b/init/uevent_listener.cpp @@ -23,7 +23,11 @@ #include +#include +#include #include +#include +#include #include namespace android { @@ -130,9 +134,19 @@ ListenerAction UeventListener::RegenerateUeventsForDir(DIR* d, int fd = openat(dfd, "uevent", O_WRONLY); if (fd >= 0) { + android::base::Timer t; write(fd, "add\n", 4); + const std::string fd_path = android::base::StringPrintf("/proc/self/fd/%d", fd); + std::string uevent_file_path; + android::base::Readlink(fd_path, &uevent_file_path); close(fd); + auto guard = android::base::make_scope_guard([&t, &uevent_file_path]() { + if (t.duration() > 50ms) { + LOG(WARNING) << "ReadUevent took " << t << " on '" << uevent_file_path << "'"; + } + }); + Uevent uevent; while (ReadUevent(&uevent)) { if (callback(uevent) == ListenerAction::kStop) return ListenerAction::kStop;