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( |
¶meters_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_) |