tp: add width option

Change-Id: I5bdf232274a621f7fb8eecd33ea77c936bf55641
diff --git a/src/trace_processor/trace_processor_shell.cc b/src/trace_processor/trace_processor_shell.cc
index 1eede6f..f172b2d 100644
--- a/src/trace_processor/trace_processor_shell.cc
+++ b/src/trace_processor/trace_processor_shell.cc
@@ -35,6 +35,7 @@
 #include "perfetto/base/time.h"
 #include "perfetto/ext/base/file_utils.h"
 #include "perfetto/ext/base/getopt.h"
+#include "perfetto/ext/base/optional.h"
 #include "perfetto/ext/base/scoped_file.h"
 #include "perfetto/ext/base/string_splitter.h"
 #include "perfetto/ext/base/string_utils.h"
@@ -1268,6 +1269,7 @@
 util::Status StartInteractiveShell(const InteractiveOptions& options) {
   SetupLineEditor();
 
+  uint32_t column_width = options.column_width;
   for (;;) {
     ScopedLine line = GetLine("> ");
     if (!line)
@@ -1294,6 +1296,13 @@
         if (!status.ok()) {
           PERFETTO_ELOG("%s", status.c_message());
         }
+      } else if (strcmp(command, "width") == 0 && strlen(arg)) {
+        base::Optional<uint32_t> width = base::CStringToUInt32(arg);
+        if (!width) {
+          PERFETTO_ELOG("Invalid column width specified");
+          continue;
+        }
+        column_width = *width;
       } else if (strcmp(command, "load-metrics-sql") == 0) {
         base::Status status =
             LoadMetricsAndExtensionsSql(options.metrics, options.extensions);
@@ -1319,7 +1328,7 @@
 
     base::TimeNanos t_start = base::GetWallTimeNs();
     auto it = g_tp->ExecuteQuery(line.get());
-    PrintQueryResultInteractively(&it, t_start, options.column_width);
+    PrintQueryResultInteractively(&it, t_start, column_width);
   }
   return util::OkStatus();
 }