Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Unified Diff: base/debug/trace_event_impl.cc

Issue 425593002: Refactor trace_event_impl's SetEnabled to use TraceOptions. Propagate this through the whole stack. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address joechan's comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug/trace_event_impl.h ('k') | base/debug/trace_event_impl_constants.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event_impl.cc
diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc
index 93ec6fe29974f891c499c7c6a03645bc645198df..85fa692ca781ad6caaf5bbfa8845020b33cdf7c8 100644
--- a/base/debug/trace_event_impl.cc
+++ b/base/debug/trace_event_impl.cc
@@ -58,6 +58,13 @@ namespace {
// trace.
const int kOverheadReportThresholdInMicroseconds = 50;
+// String options that can be used to initialize TraceOptions.
+const char kRecordUntilFull[] = "record-until-full";
+const char kRecordContinuously[] = "record-continuously";
+const char kTraceToConsole[] = "trace-to-console";
+const char kEnableSampling[] = "enable-sampling";
+const char kEnableSystrace[] = "enable-systrace";
+
// Controls the number of trace events we will buffer in-memory
// before throwing them away.
const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize;
@@ -970,6 +977,59 @@ TraceBucketData::~TraceBucketData() {
////////////////////////////////////////////////////////////////////////////////
//
+// TraceOptions
+//
+////////////////////////////////////////////////////////////////////////////////
+
+TraceOptions::TraceOptions(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 == kEnableSampling) {
+ enable_sampling = true;
+ } else if (*iter == kEnableSystrace) {
+ enable_systrace = true;
+ } else {
+ NOTREACHED();
+ }
+ }
+}
+
+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;
+ default:
+ NOTREACHED();
+ }
+ if (enable_sampling)
+ ret = ret + "," + kEnableSampling;
+ if (enable_systrace)
+ ret = ret + "," + kEnableSystrace;
+ return ret;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
// TraceLog
//
////////////////////////////////////////////////////////////////////////////////
@@ -1137,7 +1197,7 @@ TraceLog::TraceLog()
process_id_hash_(0),
process_id_(0),
watch_category_(0),
- trace_options_(RECORD_UNTIL_FULL),
+ trace_options_(kInternalRecordUntilFull),
sampling_thread_handle_(0),
category_filter_(CategoryFilter::kDefaultCategoryFilterString),
event_callback_category_filter_(
@@ -1175,7 +1235,9 @@ TraceLog::TraceLog()
LOG(ERROR) << "Start " << switches::kTraceToConsole
<< " with CategoryFilter '" << filter << "'.";
- SetEnabled(CategoryFilter(filter), RECORDING_MODE, ECHO_TO_CONSOLE);
+ SetEnabled(CategoryFilter(filter),
+ RECORDING_MODE,
+ TraceOptions(ECHO_TO_CONSOLE));
}
#endif
@@ -1325,7 +1387,7 @@ void TraceLog::GetKnownCategoryGroups(
void TraceLog::SetEnabled(const CategoryFilter& category_filter,
Mode mode,
- Options options) {
+ const TraceOptions& options) {
std::vector<EnabledStateObserver*> observer_list;
{
AutoLock lock(lock_);
@@ -1333,10 +1395,13 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter,
// Can't enable tracing when Flush() is in progress.
DCHECK(!flush_message_loop_proxy_.get());
- Options old_options = trace_options();
+ InternalTraceOptions new_options =
+ GetInternalOptionsFromTraceOptions(options);
+
+ InternalTraceOptions old_options = trace_options();
if (IsEnabled()) {
- if (options != old_options) {
+ if (new_options != old_options) {
DLOG(ERROR) << "Attempting to re-enable tracing with a different "
<< "set of options.";
}
@@ -1358,8 +1423,8 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter,
mode_ = mode;
- if (options != old_options) {
- subtle::NoBarrier_Store(&trace_options_, options);
+ if (new_options != old_options) {
+ subtle::NoBarrier_Store(&trace_options_, new_options);
UseNextTraceBuffer();
}
@@ -1369,7 +1434,7 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter,
UpdateCategoryGroupEnabledFlags();
UpdateSyntheticDelaysFromCategoryFilter();
- if (options & ENABLE_SAMPLING) {
+ if (new_options & kInternalEnableSampling) {
sampling_thread_.reset(new TraceSamplingThread);
sampling_thread_->RegisterSampleBucket(
&g_trace_state[0],
@@ -1402,11 +1467,42 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter,
}
}
+TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions(
+ const TraceOptions& options) {
+ InternalTraceOptions ret =
+ options.enable_sampling ? kInternalEnableSampling : kInternalNone;
+ switch (options.record_mode) {
+ case RECORD_UNTIL_FULL:
+ return ret | kInternalRecordUntilFull;
+ case RECORD_CONTINUOUSLY:
+ return ret | kInternalRecordContinuously;
+ case ECHO_TO_CONSOLE:
+ return ret | kInternalEchoToConsole;
+ }
+ NOTREACHED();
+ return kInternalNone;
+}
+
CategoryFilter TraceLog::GetCurrentCategoryFilter() {
AutoLock lock(lock_);
return category_filter_;
}
+TraceOptions TraceLog::GetCurrentTraceOptions() const {
+ TraceOptions ret;
+ InternalTraceOptions option = trace_options();
+ ret.enable_sampling = (option & kInternalEnableSampling) != 0;
+ if (option & kInternalRecordUntilFull)
+ ret.record_mode = RECORD_UNTIL_FULL;
+ else if (option & kInternalRecordContinuously)
+ ret.record_mode = RECORD_CONTINUOUSLY;
+ else if (option & kInternalEchoToConsole)
+ ret.record_mode = ECHO_TO_CONSOLE;
+ else
+ NOTREACHED();
+ return ret;
+}
+
void TraceLog::SetDisabled() {
AutoLock lock(lock_);
SetDisabledWhileLocked();
@@ -1496,12 +1592,12 @@ bool TraceLog::BufferIsFull() const {
}
TraceBuffer* TraceLog::CreateTraceBuffer() {
- Options options = trace_options();
- if (options & RECORD_CONTINUOUSLY)
+ InternalTraceOptions options = trace_options();
+ if (options & kInternalRecordContinuously)
return new TraceBufferRingBuffer(kTraceEventRingBufferChunks);
- else if ((options & ENABLE_SAMPLING) && mode_ == MONITORING_MODE)
+ else if ((options & kInternalEnableSampling) && mode_ == MONITORING_MODE)
return new TraceBufferRingBuffer(kMonitorTraceEventBufferChunks);
- else if (options & ECHO_TO_CONSOLE)
+ else if (options & kInternalEchoToConsole)
return new TraceBufferRingBuffer(kEchoToConsoleTraceEventBufferChunks);
return CreateTraceBufferVectorOfSize(kTraceEventVectorBufferChunks);
}
@@ -1874,7 +1970,7 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
#endif
}
- if (trace_options() & ECHO_TO_CONSOLE) {
+ if (trace_options() & kInternalEchoToConsole) {
console_message = EventToConsoleMessage(
phase == TRACE_EVENT_PHASE_COMPLETE ? TRACE_EVENT_PHASE_BEGIN : phase,
timestamp, trace_event);
@@ -2017,7 +2113,7 @@ void TraceLog::UpdateTraceEventDuration(
#endif
}
- if (trace_options() & ECHO_TO_CONSOLE) {
+ if (trace_options() & kInternalEchoToConsole) {
console_message = EventToConsoleMessage(TRACE_EVENT_PHASE_END,
now, trace_event);
}
@@ -2262,6 +2358,10 @@ CategoryFilter::CategoryFilter(const std::string& filter_string) {
Initialize(CategoryFilter::kDefaultCategoryFilterString);
}
+CategoryFilter::CategoryFilter() {
+ Initialize(CategoryFilter::kDefaultCategoryFilterString);
+}
+
CategoryFilter::CategoryFilter(const CategoryFilter& cf)
: included_(cf.included_),
disabled_(cf.disabled_),
« no previous file with comments | « base/debug/trace_event_impl.h ('k') | base/debug/trace_event_impl_constants.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698