trace_to_text: Add support for producing ctrace files
Change-Id: I262074abc8eea976ab73bacd3eb5c9aa8d1f52dc
diff --git a/tools/trace_to_text/main.cc b/tools/trace_to_text/main.cc
index 9377bb6..52ff38e 100644
--- a/tools/trace_to_text/main.cc
+++ b/tools/trace_to_text/main.cc
@@ -20,7 +20,6 @@
#include <vector>
#include "perfetto/base/logging.h"
-#include "perfetto/ext/base/string_utils.h"
#include "tools/trace_to_text/symbolize_profile.h"
#include "tools/trace_to_text/trace_to_profile.h"
#include "tools/trace_to_text/trace_to_systrace.h"
@@ -32,33 +31,22 @@
#define PERFETTO_GET_GIT_REVISION() "unknown"
#endif
+namespace perfetto {
+namespace trace_to_text {
namespace {
int Usage(const char* argv0) {
printf(
- "Usage: %s systrace|json|text|profile [--pid PID] "
- "[--timestamps TIMESTAMP1,TIMESTAMP2,...] "
- "[--truncate start|end] [trace.pb] "
+ "Usage: %s systrace|json|ctrace|text|profile [--truncate start|end] "
+ "[trace.pb] "
"[trace.txt]\n",
argv0);
return 1;
}
-uint64_t StringToUint64OrDie(const char* str) {
- char* end;
- uint64_t number = static_cast<uint64_t>(strtoll(str, &end, 10));
- if (*end != '\0')
- PERFETTO_FATAL("Invalid %s. Expected decimal integer.", str);
- return number;
-}
-} // namespace
-
-int main(int argc, char** argv) {
+int Main(int argc, char** argv) {
std::vector<const char*> positional_args;
- perfetto::trace_to_text::Keep truncate_keep =
- perfetto::trace_to_text::Keep::kAll;
- uint64_t pid = 0;
- std::vector<uint64_t> timestamps;
+ Keep truncate_keep = Keep::kAll;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) {
printf("%s\n", PERFETTO_GET_GIT_REVISION());
@@ -67,25 +55,15 @@
strcmp(argv[i], "--truncate") == 0) {
i++;
if (i <= argc && strcmp(argv[i], "start") == 0) {
- truncate_keep = perfetto::trace_to_text::Keep::kStart;
+ truncate_keep = Keep::kStart;
} else if (i <= argc && strcmp(argv[i], "end") == 0) {
- truncate_keep = perfetto::trace_to_text::Keep::kEnd;
+ truncate_keep = Keep::kEnd;
} else {
PERFETTO_ELOG(
"--truncate must specify whether to keep the end or the "
"start of the trace.");
return Usage(argv[0]);
}
- } else if (i <= argc && strcmp(argv[i], "--pid") == 0) {
- i++;
- pid = StringToUint64OrDie(argv[i]);
- } else if (i <= argc && strcmp(argv[i], "--timestamps") == 0) {
- i++;
- std::vector<std::string> ts_strings =
- perfetto::base::SplitString(argv[i], ",");
- for (const auto& ts : ts_strings) {
- timestamps.emplace_back(StringToUint64OrDie(ts.c_str()));
- }
} else {
positional_args.push_back(argv[i]);
}
@@ -127,30 +105,39 @@
std::string format(positional_args[0]);
if (format == "json")
- return perfetto::trace_to_text::TraceToSystrace(input_stream, output_stream,
- truncate_keep,
- /*wrap_in_json=*/true);
+ return TraceToSystrace(input_stream, output_stream, kSystraceJson,
+ truncate_keep);
+
if (format == "systrace")
- return perfetto::trace_to_text::TraceToSystrace(input_stream, output_stream,
- truncate_keep,
- /*wrap_in_json=*/false);
- if (truncate_keep != perfetto::trace_to_text::Keep::kAll) {
+ return TraceToSystrace(input_stream, output_stream, kSystraceNormal,
+ truncate_keep);
+
+ if (format == "ctrace")
+ return TraceToSystrace(input_stream, output_stream, kSystraceCompressed,
+ truncate_keep);
+
+ if (truncate_keep != Keep::kAll) {
PERFETTO_ELOG(
"--truncate is unsupported for text|profile|symbolize format.");
return 1;
}
if (format == "text")
- return perfetto::trace_to_text::TraceToText(input_stream, output_stream);
+ return TraceToText(input_stream, output_stream);
- if (format == "profile") {
- return perfetto::trace_to_text::TraceToProfile(input_stream, output_stream,
- pid, timestamps);
- }
+ if (format == "profile")
+ return TraceToProfile(input_stream, output_stream);
if (format == "symbolize")
- return perfetto::trace_to_text::SymbolizeProfile(input_stream,
- output_stream);
+ return SymbolizeProfile(input_stream, output_stream);
return Usage(argv[0]);
}
+
+} // namespace
+} // namespace trace_to_text
+} // namespace perfetto
+
+int main(int argc, char** argv) {
+ return perfetto::trace_to_text::Main(argc, argv);
+}