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

Commit 2f1eb1c1 authored by mukesh agrawal's avatar mukesh agrawal Committed by 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
(cherry picked from commit 4e4c5484)
parent 9c1f9bb7
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;
        }