dumpsys: report per-service dump times
In WiFi soak testing, we've seen several cases where
dumpsys times out. We've been unable to pin down the
cause of the timeouts, as there's no single service
that is obviously hung.
Add reporting of service dump times, to help figure
out why dumpsys is timing out.
BUG=29090949
TEST=manual
Manual test
- load build on bullhead
$ adb shell dumpsys | grep 'was the duration'
- see non-zero values
Change-Id: Iaba60d840ac55cba171a3ccbc74c2aee8b23dce6
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp
index 7e5bbc5..957a449 100644
--- a/cmds/dumpsys/dumpsys.cpp
+++ b/cmds/dumpsys/dumpsys.cpp
@@ -10,6 +10,7 @@
#include <thread>
#include <android-base/file.h>
+#include <android-base/stringprintf.h>
#include <android-base/unique_fd.h>
#include <binder/IServiceManager.h>
#include <binder/Parcel.h>
@@ -30,6 +31,7 @@
#include <unistd.h>
using namespace android;
+using android::base::StringPrintf;
using android::base::unique_fd;
using android::base::WriteFully;
@@ -210,7 +212,8 @@
});
auto timeout = std::chrono::seconds(timeoutArg);
- auto end = std::chrono::steady_clock::now() + timeout;
+ auto start = std::chrono::steady_clock::now();
+ auto end = start + timeout;
struct pollfd pfd = {
.fd = local_end.get(),
@@ -267,6 +270,14 @@
} else {
dump_thread.join();
}
+
+ if (N > 1) {
+ std::chrono::duration<double> elapsed_seconds =
+ std::chrono::steady_clock::now() - start;
+ aout << StringPrintf("------ %.3fs was the duration of '", elapsed_seconds.count()).
+ c_str();
+ aout << service_name << "' ------" << endl;
+ }
} else {
aerr << "Can't find service: " << service_name << endl;
}