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..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_) |