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

Unified Diff: net/base/net_log.cc

Issue 16137008: Refactor net::NetLog to provide implementation of observer pattern, not just the interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert more Created 7 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
Index: net/base/net_log.cc
diff --git a/net/base/net_log.cc b/net/base/net_log.cc
index 4d9e55a15e412c9552d964c9b094840b56e36cd1..aff3e62e04b1a5b5a43244057e2297447b6e1a67 100644
--- a/net/base/net_log.cc
+++ b/net/base/net_log.cc
@@ -187,6 +187,15 @@ NetLog* NetLog::ThreadSafeObserver::net_log() const {
return net_log_;
}
+NetLog::NetLog(LogLevel base_log_level)
+ : last_id_(0),
+ base_log_level_(base_log_level),
+ effective_log_level_(LOG_NONE) {
mmenke 2013/05/30 18:18:59 effective_log_level_ isn't being set correctly her
kouhei (in TOK) 2013/05/31 06:30:03 Done.
+}
+
+NetLog::~NetLog() {
+}
+
void NetLog::AddGlobalEntry(EventType type) {
AddEntry(type,
Source(net::NetLog::SOURCE_NONE, NextID()),
@@ -203,6 +212,62 @@ void NetLog::AddGlobalEntry(
&parameters_callback);
}
+uint32 NetLog::NextID() {
+ return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1);
+}
+
+NetLog::LogLevel NetLog::GetLogLevel() const {
+ base::subtle::Atomic32 log_level =
+ base::subtle::NoBarrier_Load(&effective_log_level_);
+ return static_cast<net::NetLog::LogLevel>(log_level);
+}
+
+void NetLog::AddThreadSafeObserver(
+ net::NetLog::ThreadSafeObserver* observer,
+ LogLevel log_level) {
+ base::AutoLock lock(lock_);
+
+ observers_.AddObserver(observer);
+ OnAddObserver(observer, log_level);
+ UpdateLogLevel();
+}
+
+void NetLog::SetObserverLogLevel(
+ net::NetLog::ThreadSafeObserver* observer,
+ LogLevel log_level) {
+ base::AutoLock lock(lock_);
+
+ DCHECK(observers_.HasObserver(observer));
+ OnSetObserverLogLevel(observer, log_level);
+ UpdateLogLevel();
+}
+
+void NetLog::RemoveThreadSafeObserver(
+ net::NetLog::ThreadSafeObserver* observer) {
+ base::AutoLock lock(lock_);
+
+ DCHECK(observers_.HasObserver(observer));
+ observers_.RemoveObserver(observer);
+ OnRemoveObserver(observer);
+ UpdateLogLevel();
+}
+
+void NetLog::UpdateLogLevel() {
+ lock_.AssertAcquired();
+
+ // Look through all the observers and find the finest granularity
+ // log level (higher values of the enum imply *lower* log levels).
+ LogLevel new_effective_log_level = base_log_level_;
+ ObserverListBase<ThreadSafeObserver>::Iterator it(observers_);
+ ThreadSafeObserver* observer;
+ while ((observer = it.GetNext()) != NULL) {
+ new_effective_log_level =
+ std::min(new_effective_log_level, observer->log_level());
+ }
+ base::subtle::NoBarrier_Store(&effective_log_level_,
+ new_effective_log_level);
+}
+
// static
std::string NetLog::TickCountToString(const base::TimeTicks& time) {
int64 delta_time = (time - base::TimeTicks()).InMilliseconds();
@@ -330,6 +395,13 @@ void NetLog::AddEntry(EventType type,
OnAddEntry(entry);
}
+void NetLog::OnAddEntry(const Entry& entry) {
mmenke 2013/05/30 18:18:59 Can just get rid of this function and inline its b
kouhei (in TOK) 2013/05/31 06:30:03 Done.
+ base::AutoLock lock(lock_);
+
+ // Notify all of the log observers.
+ FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry));
+}
+
void BoundNetLog::AddEntry(NetLog::EventType type,
NetLog::EventPhase phase) const {
if (!net_log_)

Powered by Google App Engine
This is Rietveld 408576698