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

Unified Diff: base/trace_event/trace_log.cc

Issue 1956323002: Introduce TraceLog::AsyncEnabledStateObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix more compile error Created 4 years, 7 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
« base/trace_event/trace_log.h ('K') | « base/trace_event/trace_log.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/trace_event/trace_log.cc
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc
index 5692e835bab88905786ba53616796c3ff086914c..5aac1a3bbabcccd1206bfa40a8557245e3de77d9 100644
--- a/base/trace_event/trace_log.cc
+++ b/base/trace_event/trace_log.cc
@@ -333,6 +333,15 @@ void TraceLog::ThreadLocalEventBuffer::FlushWhileLocked() {
// find the generation mismatch and delete this buffer soon.
}
+struct TraceLog::RegisteredAsyncObserver {
+ RegisteredAsyncObserver(WeakPtr<AsyncEnabledStateObserver> observer)
+ : observer(observer), task_runner(ThreadTaskRunnerHandle::Get()) {}
+ ~RegisteredAsyncObserver() {}
+
+ WeakPtr<AsyncEnabledStateObserver> observer;
+ scoped_refptr<SequencedTaskRunner> task_runner;
+};
+
TraceLogStatus::TraceLogStatus() : event_capacity(0), event_count(0) {}
TraceLogStatus::~TraceLogStatus() {}
@@ -632,6 +641,11 @@ void TraceLog::SetEnabled(const TraceConfig& trace_config, Mode mode) {
}
}
+ for (auto& it : async_observers_)
Primiano Tucci (use gerrit) 2016/05/10 14:20:26 I think this could even be +const, i.e. const auto
Xiaocheng 2016/05/11 05:19:20 Done.
+ it.second.task_runner->PostTask(
Sami 2016/05/10 14:42:16 nit: Please add braces around this loop.
Xiaocheng 2016/05/11 05:19:20 Done.
+ FROM_HERE, Bind(&AsyncEnabledStateObserver::OnTraceLogEnabled,
+ it.second.observer));
+
dispatching_to_observer_list_ = true;
observer_list = enabled_state_observer_list_;
}
@@ -716,6 +730,11 @@ void TraceLog::SetDisabledWhileLocked() {
// Remove metadata events so they will not get added to a subsequent trace.
metadata_events_.clear();
+ for (auto& it : async_observers_)
+ it.second.task_runner->PostTask(
Sami 2016/05/10 14:42:16 nit: Please add braces around this loop.
Xiaocheng 2016/05/11 05:19:20 Done.
+ FROM_HERE, Bind(&AsyncEnabledStateObserver::OnTraceLogDisabled,
+ it.second.observer));
+
dispatching_to_observer_list_ = true;
std::vector<EnabledStateObserver*> observer_list =
enabled_state_observer_list_;
@@ -1710,6 +1729,25 @@ void ConvertableToTraceFormat::EstimateTraceMemoryOverhead(
overhead->Add("ConvertableToTraceFormat(Unknown)", sizeof(*this));
}
+void TraceLog::AddAsyncEnabledStateObserver(
+ WeakPtr<AsyncEnabledStateObserver> listener) {
+ AutoLock lock(lock_);
+ async_observers_.insert(
+ std::make_pair(listener.get(), RegisteredAsyncObserver(listener)));
+}
+
+void TraceLog::RemoveAsyncEnabledStateObserver(
+ AsyncEnabledStateObserver* listener) {
+ AutoLock lock(lock_);
+ async_observers_.erase(listener);
+}
+
+bool TraceLog::HasAsyncEnabledStateObserver(
+ AsyncEnabledStateObserver* listener) const {
+ AutoLock lock(lock_);
+ return async_observers_.find(listener) != async_observers_.end();
Primiano Tucci (use gerrit) 2016/05/10 14:20:26 I think that .count(listener) != 0 is, in some STL
Xiaocheng 2016/05/11 05:19:20 Let's use ContainsKey() which looks less hacky (an
+}
+
} // namespace trace_event
} // namespace base
« base/trace_event/trace_log.h ('K') | « base/trace_event/trace_log.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698