Index: base/trace_event/trace_options.cc |
diff --git a/base/trace_event/trace_options.cc b/base/trace_event/trace_options.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7cab61dbbd0726f8a4fb85f69c60917fe8e7a88d |
--- /dev/null |
+++ b/base/trace_event/trace_options.cc |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/trace_event/trace_options.h" |
+ |
+#include "base/logging.h" |
+#include "base/strings/string_split.h" |
+ |
+namespace base { |
+namespace trace_event { |
+ |
+namespace { |
+ |
+// String options that can be used to initialize TraceOptions. |
+const char kRecordUntilFull[] = "record-until-full"; |
+const char kRecordContinuously[] = "record-continuously"; |
+const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible"; |
+const char kTraceToConsole[] = "trace-to-console"; |
+const char kEnableSampling[] = "enable-sampling"; |
+const char kEnableSystrace[] = "enable-systrace"; |
+const char kEnableArgumentFilter[] = "enable-argument-filter"; |
+ |
+} // namespace |
+ |
+bool TraceOptions::SetFromString(const std::string& options_string) { |
+ record_mode = RECORD_UNTIL_FULL; |
+ enable_sampling = false; |
+ enable_systrace = false; |
+ |
+ std::vector<std::string> split; |
+ std::vector<std::string>::iterator iter; |
+ base::SplitString(options_string, ',', &split); |
+ for (iter = split.begin(); iter != split.end(); ++iter) { |
+ if (*iter == kRecordUntilFull) { |
+ record_mode = RECORD_UNTIL_FULL; |
+ } else if (*iter == kRecordContinuously) { |
+ record_mode = RECORD_CONTINUOUSLY; |
+ } else if (*iter == kTraceToConsole) { |
+ record_mode = ECHO_TO_CONSOLE; |
+ } else if (*iter == kRecordAsMuchAsPossible) { |
+ record_mode = RECORD_AS_MUCH_AS_POSSIBLE; |
+ } else if (*iter == kEnableSampling) { |
+ enable_sampling = true; |
+ } else if (*iter == kEnableSystrace) { |
+ enable_systrace = true; |
+ } else if (*iter == kEnableArgumentFilter) { |
+ enable_argument_filter = true; |
+ } else { |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
+std::string TraceOptions::ToString() const { |
+ std::string ret; |
+ switch (record_mode) { |
+ case RECORD_UNTIL_FULL: |
+ ret = kRecordUntilFull; |
+ break; |
+ case RECORD_CONTINUOUSLY: |
+ ret = kRecordContinuously; |
+ break; |
+ case ECHO_TO_CONSOLE: |
+ ret = kTraceToConsole; |
+ break; |
+ case RECORD_AS_MUCH_AS_POSSIBLE: |
+ ret = kRecordAsMuchAsPossible; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ if (enable_sampling) |
+ ret = ret + "," + kEnableSampling; |
+ if (enable_systrace) |
+ ret = ret + "," + kEnableSystrace; |
+ if (enable_argument_filter) |
+ ret = ret + "," + kEnableArgumentFilter; |
+ return ret; |
+} |
+ |
+} // namespace trace_event |
+} // namespace base |