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

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: 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..def404eea83f79953e5d922a4ad1027f3fdc0e1b 100644
--- a/base/trace_event/trace_log.cc
+++ b/base/trace_event/trace_log.cc
@@ -333,6 +333,16 @@ void TraceLog::ThreadLocalEventBuffer::FlushWhileLocked() {
// find the generation mismatch and delete this buffer soon.
}
+struct TraceLog::RegisteredThreadSafeObserver {
+ RegisteredThreadSafeObserver(WeakPtr<ThreadSafeEnabledStateObserver> observer)
+ : observer_(observer), task_runner_(ThreadTaskRunnerHandle::Get()) {}
+
+ ~RegisteredThreadSafeObserver() {}
+
+ WeakPtr<ThreadSafeEnabledStateObserver> observer_;
Primiano Tucci (use gerrit) 2016/05/09 17:18:29 nit since this is an internal struct, and you are
Xiaocheng 2016/05/10 09:33:33 Done.
+ scoped_refptr<TaskRunner> task_runner_;
Primiano Tucci (use gerrit) 2016/05/09 17:18:29 Can you s/TaskRunner/SequencedTaskRunner/. It will
Xiaocheng 2016/05/10 09:33:33 Done.
+};
+
TraceLogStatus::TraceLogStatus() : event_capacity(0), event_count(0) {}
TraceLogStatus::~TraceLogStatus() {}
@@ -632,6 +642,12 @@ void TraceLog::SetEnabled(const TraceConfig& trace_config, Mode mode) {
}
}
+ for (auto it = thread_safe_observers_.begin();
Primiano Tucci (use gerrit) 2016/05/09 17:18:29 I think you can more concisely: for (const auto& i
Xiaocheng 2016/05/10 09:33:33 Done.
+ it != thread_safe_observers_.end(); ++it)
+ it->second.task_runner_->PostTask(
+ FROM_HERE, Bind(&ThreadSafeEnabledStateObserver::OnTraceLogEnabled,
+ it->second.observer_));
+
dispatching_to_observer_list_ = true;
observer_list = enabled_state_observer_list_;
}
@@ -716,6 +732,12 @@ void TraceLog::SetDisabledWhileLocked() {
// Remove metadata events so they will not get added to a subsequent trace.
metadata_events_.clear();
+ for (auto it = thread_safe_observers_.begin();
+ it != thread_safe_observers_.end(); ++it)
+ it->second.task_runner_->PostTask(
+ FROM_HERE, Bind(&ThreadSafeEnabledStateObserver::OnTraceLogDisabled,
+ it->second.observer_));
+
dispatching_to_observer_list_ = true;
std::vector<EnabledStateObserver*> observer_list =
enabled_state_observer_list_;
@@ -1710,6 +1732,33 @@ void ConvertableToTraceFormat::EstimateTraceMemoryOverhead(
overhead->Add("ConvertableToTraceFormat(Unknown)", sizeof(*this));
}
+int TraceLog::AddThreadSafeEnabledStateObserver(
+ WeakPtr<ThreadSafeEnabledStateObserver> listener) {
+ AutoLock lock(lock_);
+ int id = thread_safe_observers_.empty()
Primiano Tucci (use gerrit) 2016/05/09 17:18:29 Yeah I think we don't need this ID logic. Just use
Xiaocheng 2016/05/10 09:33:33 Done.
+ ? 1
+ : thread_safe_observers_.rbegin()->first + 1;
+ thread_safe_observers_.insert(
+ std::make_pair(id, RegisteredThreadSafeObserver(listener)));
+ return id;
+}
+
+void TraceLog::RemoveThreadSafeEnabledStateObserver(int listener_id) {
+ AutoLock lock(lock_);
+ thread_safe_observers_.erase(listener_id);
+}
+
+bool TraceLog::HasThreadSafeEnabledStateObserver(int listener_id) const {
+ AutoLock lock(lock_);
+ return thread_safe_observers_.find(listener_id) !=
+ thread_safe_observers_.end();
+}
+
+size_t TraceLog::GetThreadSafeObserverCountForTest() const {
+ AutoLock lock(lock_);
+ return thread_safe_observers_.size();
+}
+
} // 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