Index: chrome/browser/net/chrome_net_log.cc |
=================================================================== |
--- chrome/browser/net/chrome_net_log.cc (revision 65207) |
+++ chrome/browser/net/chrome_net_log.cc (working copy) |
@@ -7,9 +7,10 @@ |
#include <algorithm> |
#include "base/command_line.h" |
+#include "base/lock.h" |
#include "base/logging.h" |
#include "base/string_util.h" |
-#include "chrome/browser/browser_thread.h" |
+#include "base/values.h" |
#include "chrome/browser/net/load_timing_observer.h" |
#include "chrome/browser/net/net_log_logger.h" |
#include "chrome/browser/net/passive_log_collector.h" |
@@ -21,15 +22,34 @@ |
return log_level_; |
} |
-void ChromeNetLog::Observer::set_log_level(net::NetLog::LogLevel log_level) { |
+void ChromeNetLog::Observer::SetLogLevel(net::NetLog::LogLevel log_level, |
+ ChromeNetLog* net_log) { |
+ DCHECK(net_log); |
+ AutoLock lock(net_log->lock_); |
log_level_ = log_level; |
+ net_log->UpdateLogLevel_(); |
} |
+ChromeNetLog::Entry::Entry(uint32 order, |
+ net::NetLog::EventType type, |
+ const base::TimeTicks& time, |
+ net::NetLog::Source source, |
+ net::NetLog::EventPhase phase, |
+ net::NetLog::EventParameters* params) |
+ : order(order), |
+ type(type), |
+ time(time), |
+ source(source), |
+ phase(phase), |
+ params(params) { |
+} |
+ |
+ChromeNetLog::Entry::~Entry() {} |
+ |
ChromeNetLog::ChromeNetLog() |
- : next_id_(1), |
+ : last_id_(0), |
eroman
2010/11/17 05:59:02
Where is log_level_ initialized? (it may still be
mmenke
2010/11/17 21:42:14
It's actually initialized on the first call to Add
|
passive_collector_(new PassiveLogCollector), |
load_timing_observer_(new LoadTimingObserver) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
AddObserver(passive_collector_.get()); |
AddObserver(load_timing_observer_.get()); |
@@ -41,7 +61,6 @@ |
} |
ChromeNetLog::~ChromeNetLog() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
RemoveObserver(passive_collector_.get()); |
RemoveObserver(load_timing_observer_.get()); |
if (net_log_logger_.get()) { |
@@ -54,11 +73,7 @@ |
const Source& source, |
EventPhase phase, |
EventParameters* params) { |
- // This must be invoked when we're on the IO thread, or if the IO thread's |
- // message loop isn't valid. The later can happen if this is invoked when the |
- // IOThread is shuting down the MessageLoop. |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO) || |
- !BrowserThread::IsMessageLoopValid(BrowserThread::IO)); |
+ AutoLock lock(lock_); |
// Notify all of the log observers. |
FOR_EACH_OBSERVER(Observer, observers_, |
@@ -66,30 +81,46 @@ |
} |
uint32 ChromeNetLog::NextID() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- return next_id_++; |
+ return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); |
} |
net::NetLog::LogLevel ChromeNetLog::GetLogLevel() const { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ base::subtle::Atomic32 log_level = base::subtle::NoBarrier_Load(&log_level_); |
eroman
2010/11/17 05:59:02
I need to buff up on my concurrency... what is the
mmenke
2010/11/17 21:42:14
I'm pretty weak here, too, but the barrier will ma
|
+ return static_cast<net::NetLog::LogLevel>(log_level); |
+} |
+void ChromeNetLog::AddObserver(Observer* observer) { |
+ AutoLock lock(lock_); |
+ observers_.AddObserver(observer); |
+ UpdateLogLevel_(); |
+} |
+ |
+void ChromeNetLog::RemoveObserver(Observer* observer) { |
+ AutoLock lock(lock_); |
+ observers_.RemoveObserver(observer); |
+ UpdateLogLevel_(); |
+} |
+ |
+void ChromeNetLog::AddObserverAndGetAllCapturedEvents( |
+ Observer* observer, |
+ EntryList* passive_entries) { |
+ AutoLock lock(lock_); |
+ observers_.AddObserver(observer); |
+ UpdateLogLevel_(); |
+ passive_collector_->GetAllCapturedEvents(passive_entries); |
+} |
+ |
+void ChromeNetLog::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 log_level = LOG_BASIC; |
+ LogLevel new_log_level = LOG_BASIC; |
ObserverListBase<Observer>::Iterator it(observers_); |
Observer* observer; |
while ((observer = it.GetNext()) != NULL) { |
- log_level = std::min(log_level, observer->log_level()); |
+ new_log_level = std::min(new_log_level, observer->log_level()); |
} |
- return log_level; |
+ base::subtle::NoBarrier_Store(&log_level_, new_log_level); |
} |
-void ChromeNetLog::AddObserver(Observer* observer) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- observers_.AddObserver(observer); |
-} |
- |
-void ChromeNetLog::RemoveObserver(Observer* observer) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- observers_.RemoveObserver(observer); |
-} |