Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e4c5484 authored by mukesh agrawal's avatar mukesh agrawal
Browse files

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
parent 06032c11
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -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 @@ int main(int argc, char* const argv[])
            });

            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 @@ int main(int argc, char* const argv[])
            } 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;
        }