| Index: base/trace_event/trace_event_impl.cc | 
| diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc | 
| index 6bef9d4b68478c0eda543823bdb23bdad628883d..3d58d873ad52552cf7473e04c3bf505b7bb9cee2 100644 | 
| --- a/base/trace_event/trace_event_impl.cc | 
| +++ b/base/trace_event/trace_event_impl.cc | 
| @@ -1154,9 +1154,8 @@ TraceLog::TraceLog() | 
| watch_category_(0), | 
| trace_options_(kInternalRecordUntilFull), | 
| sampling_thread_handle_(0), | 
| -      category_filter_(CategoryFilter::kDefaultCategoryFilterString), | 
| -      event_callback_category_filter_( | 
| -          CategoryFilter::kDefaultCategoryFilterString), | 
| +      trace_config_(TraceConfig()), | 
| +      event_callback_trace_config_(TraceConfig()), | 
| thread_shared_chunk_index_(0), | 
| generation_(0), | 
| use_worker_thread_(false) { | 
| @@ -1191,9 +1190,7 @@ TraceLog::TraceLog() | 
|  | 
| LOG(ERROR) << "Start " << switches::kTraceToConsole | 
| << " with CategoryFilter '" << filter << "'."; | 
| -    SetEnabled(CategoryFilter(filter), | 
| -               RECORDING_MODE, | 
| -               TraceOptions(ECHO_TO_CONSOLE)); | 
| +    SetEnabled(TraceConfig(filter, ECHO_TO_CONSOLE), RECORDING_MODE); | 
| } | 
| #endif | 
|  | 
| @@ -1233,13 +1230,13 @@ void TraceLog::UpdateCategoryGroupEnabledFlag(size_t category_index) { | 
| unsigned char enabled_flag = 0; | 
| const char* category_group = g_category_groups[category_index]; | 
| if (mode_ == RECORDING_MODE && | 
| -      category_filter_.IsCategoryGroupEnabled(category_group)) | 
| +      trace_config_.IsCategoryGroupEnabled(category_group)) | 
| enabled_flag |= ENABLED_FOR_RECORDING; | 
| else if (mode_ == MONITORING_MODE && | 
| -      category_filter_.IsCategoryGroupEnabled(category_group)) | 
| +      trace_config_.IsCategoryGroupEnabled(category_group)) | 
| enabled_flag |= ENABLED_FOR_MONITORING; | 
| if (event_callback_ && | 
| -      event_callback_category_filter_.IsCategoryGroupEnabled(category_group)) | 
| +      event_callback_trace_config_.IsCategoryGroupEnabled(category_group)) | 
| enabled_flag |= ENABLED_FOR_EVENT_CALLBACK; | 
| #if defined(OS_WIN) | 
| if (base::trace_event::TraceEventETWExport::isETWExportEnabled()) | 
| @@ -1255,11 +1252,11 @@ void TraceLog::UpdateCategoryGroupEnabledFlags() { | 
| UpdateCategoryGroupEnabledFlag(i); | 
| } | 
|  | 
| -void TraceLog::UpdateSyntheticDelaysFromCategoryFilter() { | 
| +void TraceLog::UpdateSyntheticDelaysFromTraceConfig() { | 
| ResetTraceEventSyntheticDelays(); | 
| -  const CategoryFilter::StringList& delays = | 
| -      category_filter_.GetSyntheticDelayValues(); | 
| -  CategoryFilter::StringList::const_iterator ci; | 
| +  const TraceConfig::StringList& delays = | 
| +      trace_config_.GetSyntheticDelayValues(); | 
| +  TraceConfig::StringList::const_iterator ci; | 
| for (ci = delays.begin(); ci != delays.end(); ++ci) { | 
| StringTokenizer tokens(*ci, ";"); | 
| if (!tokens.GetNext()) | 
| @@ -1323,7 +1320,7 @@ const unsigned char* TraceLog::GetCategoryGroupEnabledInternal( | 
| g_category_groups[category_index] = new_group; | 
| DCHECK(!g_category_group_enabled[category_index]); | 
| // Note that if both included and excluded patterns in the | 
| -    // CategoryFilter are empty, we exclude nothing, | 
| +    // TraceConfig are empty, we exclude nothing, | 
| // thereby enabling this category group. | 
| UpdateCategoryGroupEnabledFlag(category_index); | 
| category_group_enabled = &g_category_group_enabled[category_index]; | 
| @@ -1346,9 +1343,7 @@ void TraceLog::GetKnownCategoryGroups( | 
| category_groups->push_back(g_category_groups[i]); | 
| } | 
|  | 
| -void TraceLog::SetEnabled(const CategoryFilter& category_filter, | 
| -                          Mode mode, | 
| -                          const TraceOptions& options) { | 
| +void TraceLog::SetEnabled(const TraceConfig& trace_config, Mode mode) { | 
| std::vector<EnabledStateObserver*> observer_list; | 
| { | 
| AutoLock lock(lock_); | 
| @@ -1357,7 +1352,7 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter, | 
| DCHECK(!flush_task_runner_); | 
|  | 
| InternalTraceOptions new_options = | 
| -        GetInternalOptionsFromTraceOptions(options); | 
| +        GetInternalOptionsFromTraceConfig(trace_config); | 
|  | 
| InternalTraceOptions old_options = trace_options(); | 
|  | 
| @@ -1371,7 +1366,7 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter, | 
| DLOG(ERROR) << "Attempting to re-enable tracing with a different mode."; | 
| } | 
|  | 
| -      category_filter_.Merge(category_filter); | 
| +      trace_config_.Merge(trace_config); | 
| UpdateCategoryGroupEnabledFlags(); | 
| return; | 
| } | 
| @@ -1391,9 +1386,9 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter, | 
|  | 
| num_traces_recorded_++; | 
|  | 
| -    category_filter_ = CategoryFilter(category_filter); | 
| +    trace_config_ = TraceConfig(trace_config); | 
| UpdateCategoryGroupEnabledFlags(); | 
| -    UpdateSyntheticDelaysFromCategoryFilter(); | 
| +    UpdateSyntheticDelaysFromTraceConfig(); | 
|  | 
| if (new_options & kInternalEnableSampling) { | 
| sampling_thread_.reset(new TraceSamplingThread); | 
| @@ -1436,13 +1431,13 @@ void TraceLog::SetArgumentFilterPredicate( | 
| argument_filter_predicate_ = argument_filter_predicate; | 
| } | 
|  | 
| -TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions( | 
| -    const TraceOptions& options) { | 
| +TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceConfig( | 
| +    const TraceConfig& config) { | 
| InternalTraceOptions ret = | 
| -      options.enable_sampling ? kInternalEnableSampling : kInternalNone; | 
| -  if (options.enable_argument_filter) | 
| +      config.IsSamplingEnabled() ? kInternalEnableSampling : kInternalNone; | 
| +  if (config.IsArgumentFilterEnabled()) | 
| ret |= kInternalEnableArgumentFilter; | 
| -  switch (options.record_mode) { | 
| +  switch (config.GetTraceRecordMode()) { | 
| case RECORD_UNTIL_FULL: | 
| return ret | kInternalRecordUntilFull; | 
| case RECORD_CONTINUOUSLY: | 
| @@ -1456,27 +1451,9 @@ TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions( | 
| return kInternalNone; | 
| } | 
|  | 
| -CategoryFilter TraceLog::GetCurrentCategoryFilter() { | 
| +TraceConfig TraceLog::GetCurrentTraceConfig() const { | 
| AutoLock lock(lock_); | 
| -  return category_filter_; | 
| -} | 
| - | 
| -TraceOptions TraceLog::GetCurrentTraceOptions() const { | 
| -  TraceOptions ret; | 
| -  InternalTraceOptions option = trace_options(); | 
| -  ret.enable_sampling = (option & kInternalEnableSampling) != 0; | 
| -  ret.enable_argument_filter = (option & kInternalEnableArgumentFilter) != 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 if (option & kInternalRecordAsMuchAsPossible) | 
| -    ret.record_mode = RECORD_AS_MUCH_AS_POSSIBLE; | 
| -  else | 
| -    NOTREACHED(); | 
| -  return ret; | 
| +  return trace_config_; | 
| } | 
|  | 
| void TraceLog::SetDisabled() { | 
| @@ -1508,7 +1485,7 @@ void TraceLog::SetDisabledWhileLocked() { | 
| sampling_thread_.reset(); | 
| } | 
|  | 
| -  category_filter_.Clear(); | 
| +  trace_config_.Clear(); | 
| subtle::NoBarrier_Store(&watch_category_, 0); | 
| watch_event_name_ = ""; | 
| UpdateCategoryGroupEnabledFlags(); | 
| @@ -1623,12 +1600,12 @@ void TraceLog::CheckIfBufferIsFullWhileLocked() { | 
| } | 
| } | 
|  | 
| -void TraceLog::SetEventCallbackEnabled(const CategoryFilter& category_filter, | 
| +void TraceLog::SetEventCallbackEnabled(const TraceConfig& trace_config, | 
| EventCallback cb) { | 
| AutoLock lock(lock_); | 
| subtle::NoBarrier_Store(&event_callback_, | 
| reinterpret_cast<subtle::AtomicWord>(cb)); | 
| -  event_callback_category_filter_ = category_filter; | 
| +  event_callback_trace_config_ = trace_config; | 
| UpdateCategoryGroupEnabledFlags(); | 
| }; | 
|  | 
|  |