Chromium Code Reviews| 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( |
| ¶meters_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, |