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

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: 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..e256cc427b7ac0cd5d8522ca888b976a9be61e6a 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,68 @@ void NetLog::AddGlobalEntry(
&parameters_callback);
}
+uint32 NetLog::NextID() {
+ return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1);
+}
+
+void NetLog::SetBaseLogLevel(LogLevel log_level) {
+ base_log_level_ = log_level;
mmenke 2013/06/03 14:27:09 Should have the lock for this, unfortunately. May
kouhei (in TOK) 2013/06/04 15:41:44 Done.
+
+ 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);
+ 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();
@@ -327,7 +398,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,

Powered by Google App Engine
This is Rietveld 408576698