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

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: private Observer Created 7 years, 6 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..63603dcdd4a917506cfa61fc8ba6363eb14dd8c6 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()
+ : last_id_(0),
+ base_log_level_(LOG_NONE),
+ effective_log_level_(LOG_NONE) {
+}
+
+NetLog::~NetLog() {
+}
+
void NetLog::AddGlobalEntry(EventType type) {
AddEntry(type,
Source(net::NetLog::SOURCE_NONE, NextID()),
@@ -203,6 +212,73 @@ void NetLog::AddGlobalEntry(
&parameters_callback);
}
+uint32 NetLog::NextID() {
+ return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1);
+}
+
+void NetLog::SetBaseLogLevel(LogLevel log_level) {
+ base::AutoLock lock(lock_);
+ base_log_level_ = log_level;
+
+ UpdateLogLevel();
+}
+
+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);
+ DCHECK(!observer->net_log_);
mmenke 2013/06/05 16:22:14 optional nit: Suggest moving this up a line, just
kouhei (in TOK) 2013/06/06 00:49:40 Done.
+ observer->net_log_ = this;
+ observer->log_level_ = log_level;
+ UpdateLogLevel();
+}
+
+void NetLog::SetObserverLogLevel(
+ net::NetLog::ThreadSafeObserver* observer,
+ LogLevel log_level) {
+ base::AutoLock lock(lock_);
+
+ DCHECK(observers_.HasObserver(observer));
+ DCHECK_EQ(this, observer->net_log_);
+ observer->log_level_ = log_level;
+ UpdateLogLevel();
+}
+
+void NetLog::RemoveThreadSafeObserver(
+ net::NetLog::ThreadSafeObserver* observer) {
+ base::AutoLock lock(lock_);
+
+ DCHECK(observers_.HasObserver(observer));
+ observers_.RemoveObserver(observer);
+ DCHECK_EQ(this, observer->net_log_);
mmenke 2013/06/05 16:22:14 optional nit: Suggest moving this up a line.
kouhei (in TOK) 2013/06/06 00:49:40 Done.
+ observer->net_log_ = NULL;
+ 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();
@@ -301,23 +377,6 @@ NetLog::ParametersCallback NetLog::StringCallback(const char* name,
return base::Bind(&NetLogString16Callback, name, value);
}
-void NetLog::OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level) {
- DCHECK(!observer->net_log_);
- observer->net_log_ = this;
- observer->log_level_ = log_level;
-}
-
-void NetLog::OnSetObserverLogLevel(ThreadSafeObserver* observer,
- LogLevel log_level) {
- DCHECK_EQ(this, observer->net_log_);
- observer->log_level_ = log_level;
-}
-
-void NetLog::OnRemoveObserver(ThreadSafeObserver* observer) {
- DCHECK_EQ(this, observer->net_log_);
- observer->net_log_ = NULL;
-}
-
void NetLog::AddEntry(EventType type,
const Source& source,
EventPhase phase,
@@ -327,7 +386,10 @@ void NetLog::AddEntry(EventType type,
return;
Entry entry(type, source, phase, base::TimeTicks::Now(),
parameters_callback, log_level);
- OnAddEntry(entry);
+
+ // Notify all of the log observers.
+ base::AutoLock lock(lock_);
+ FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry));
}
void BoundNetLog::AddEntry(NetLog::EventType type,
« no previous file with comments | « net/base/net_log.h ('k') | net/base/net_log_unittest.cc » ('j') | net/base/net_log_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698