From b236c86b81a1e58fce6fe576dd336764138899d0 Mon Sep 17 00:00:00 2001 From: Chenjie Yu Date: Tue, 28 Nov 2017 22:20:44 -0800 Subject: allow dump_report command to output proto binary in addition to text Test: cts test Change-Id: I439a371d54a57116cf2ad85899850ac4783101e2 --- cmds/statsd/src/StatsService.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 618e03d655da..f2ea943f3aa2 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -290,12 +290,13 @@ void StatsService::print_cmd_help(FILE* out) { fprintf(out, " NAME The per-uid name to use\n"); fprintf(out, "\n"); fprintf(out, "\n"); - fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME\n"); + fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME [--proto]\n"); fprintf(out, " Dump all metric data for a configuration.\n"); fprintf(out, " UID The uid of the configuration. It is only possible to pass\n"); fprintf(out, " the UID parameter on eng builds. If UID is omitted the\n"); fprintf(out, " calling uid is used.\n"); fprintf(out, " NAME The name of the configuration\n"); + fprintf(out, " --proto Print proto binary.\n"); fprintf(out, "\n"); fprintf(out, "\n"); fprintf(out, "usage: adb shell cmd stats send-broadcast [UID] NAME\n"); @@ -429,10 +430,15 @@ status_t StatsService::cmd_config(FILE* in, FILE* out, FILE* err, Vector& args) { if (mProcessor != nullptr) { - const int argCount = args.size(); + int argCount = args.size(); bool good = false; + bool proto = false; int uid; string name; + if (!std::strcmp("--proto", args[argCount-1].c_str())) { + proto = true; + argCount -= 1; + } if (argCount == 2) { // Automatically pick the UID uid = IPCThreadState::self()->getCallingUid(); @@ -462,8 +468,14 @@ status_t StatsService::cmd_dump_report(FILE* out, FILE* err, const Vector data; mProcessor->onDumpReport(ConfigKey(uid, name), &data); // TODO: print the returned StatsLogReport to file instead of printing to logcat. - fprintf(out, "Dump report for Config [%d,%s]\n", uid, name.c_str()); - fprintf(out, "See the StatsLogReport in logcat...\n"); + if (proto) { + for (size_t i = 0; i < data.size(); i ++) { + fprintf(out, "%c", data[i]); + } + } else { + fprintf(out, "Dump report for Config [%d,%s]\n", uid, name.c_str()); + fprintf(out, "See the StatsLogReport in logcat...\n"); + } return android::OK; } else { // If arg parsing failed, print the help text and return an error. -- cgit v1.2.3-59-g8ed1b