Merge "init: Add warning in init first stage mount"
am: 4aa8421203

Change-Id: I5f8d12857a40ae68fecb86f5f3c069182e0261ef
diff --git a/init/uevent_listener.cpp b/init/uevent_listener.cpp
index 24b14c4..81486e1 100644
--- a/init/uevent_listener.cpp
+++ b/init/uevent_listener.cpp
@@ -23,7 +23,11 @@
 
 #include <memory>
 
+#include <android-base/chrono_utils.h>
+#include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/scopeguard.h>
+#include <android-base/stringprintf.h>
 #include <cutils/uevent.h>
 
 namespace android {
@@ -130,9 +134,19 @@
 
     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;