Chromium Code Reviews| Index: src/libplatform/tracing/tracing-controller.cc |
| diff --git a/src/libplatform/tracing/tracing-controller.cc b/src/libplatform/tracing/tracing-controller.cc |
| index e9a21725e289fd565391084a0b933a00c82df407..822c396fc6f605d260c77b5ae4b1048ddc991b9d 100644 |
| --- a/src/libplatform/tracing/tracing-controller.cc |
| +++ b/src/libplatform/tracing/tracing-controller.cc |
| @@ -38,8 +38,13 @@ const int g_num_builtin_categories = 4; |
| // Skip default categories. |
| v8::base::AtomicWord g_category_index = g_num_builtin_categories; |
| +TracingController::TracingController() {} |
| + |
| +TracingController::~TracingController() {} |
| + |
| void TracingController::Initialize(TraceBuffer* trace_buffer) { |
| trace_buffer_.reset(trace_buffer); |
| + mutex_.reset(new base::Mutex()); |
| } |
| uint64_t TracingController::AddTraceEvent( |
| @@ -93,11 +98,27 @@ void TracingController::StartTracing(TraceConfig* trace_config) { |
| trace_config_.reset(trace_config); |
| mode_ = RECORDING_MODE; |
| UpdateCategoryGroupEnabledFlags(); |
| + std::unordered_set<Platform::TraceStateObserver*> observers_copy; |
| + { |
| + base::LockGuard<base::Mutex> lock(mutex_.get()); |
| + observers_copy = observers_; |
|
fmeawad
2016/09/27 18:05:49
nit: I would argue that the copy constructor has t
caseq
2016/09/27 18:09:04
No. This is about not invoking callbacks from unde
|
| + } |
| + for (auto o : observers_copy) { |
| + o->OnTraceEnabled(); |
| + } |
| } |
| void TracingController::StopTracing() { |
| mode_ = DISABLED; |
| UpdateCategoryGroupEnabledFlags(); |
| + std::unordered_set<Platform::TraceStateObserver*> observers_copy; |
| + { |
| + base::LockGuard<base::Mutex> lock(mutex_.get()); |
| + observers_copy = observers_; |
| + } |
| + for (auto o : observers_copy) { |
| + o->OnTraceDisabled(); |
|
caseq
2016/09/27 17:50:22
I'm a bit concerned about this being potentially c
fmeawad
2016/09/27 18:05:49
We need to disable the observer on stop tracing, i
alph
2016/09/27 19:10:53
I moved StopTracing to the very beginning of platf
|
| + } |
| trace_buffer_->Flush(); |
| } |
| @@ -172,6 +193,19 @@ const uint8_t* TracingController::GetCategoryGroupEnabledInternal( |
| return category_group_enabled; |
| } |
| +void TracingController::AddTraceStateObserver( |
| + Platform::TraceStateObserver* observer) { |
| + base::LockGuard<base::Mutex> lock(mutex_.get()); |
| + observers_.insert(observer); |
| +} |
| + |
| +void TracingController::RemoveTraceStateObserver( |
| + Platform::TraceStateObserver* observer) { |
| + base::LockGuard<base::Mutex> lock(mutex_.get()); |
| + DCHECK(observers_.find(observer) != observers_.end()); |
| + observers_.erase(observer); |
| +} |
| + |
| } // namespace tracing |
| } // namespace platform |
| } // namespace v8 |