diff options
-rw-r--r-- | chrome/browser/dom_ui/net_internals_ui.cc | 3 | ||||
-rw-r--r-- | chrome/browser/net/chrome_net_log.cc | 16 | ||||
-rw-r--r-- | chrome/browser/net/chrome_net_log.h | 21 | ||||
-rw-r--r-- | chrome/browser/net/load_timing_observer.cc | 3 | ||||
-rw-r--r-- | chrome/browser/net/net_log_logger.cc | 2 | ||||
-rw-r--r-- | chrome/browser/net/passive_log_collector.cc | 3 | ||||
-rw-r--r-- | net/base/capturing_net_log.h | 2 | ||||
-rw-r--r-- | net/base/forwarding_net_log.cc | 4 | ||||
-rw-r--r-- | net/base/forwarding_net_log.h | 2 | ||||
-rw-r--r-- | net/base/net_log.cc | 10 | ||||
-rw-r--r-- | net/base/net_log.h | 19 | ||||
-rw-r--r-- | net/http/http_network_transaction.cc | 4 | ||||
-rw-r--r-- | net/http/http_proxy_client_socket.cc | 4 | ||||
-rw-r--r-- | net/proxy/proxy_service.cc | 2 | ||||
-rw-r--r-- | net/socket/tcp_client_socket_pool.cc | 2 | ||||
-rw-r--r-- | net/spdy/spdy_session.cc | 6 | ||||
-rw-r--r-- | net/url_request/url_request.cc | 2 |
17 files changed, 76 insertions, 29 deletions
diff --git a/chrome/browser/dom_ui/net_internals_ui.cc b/chrome/browser/dom_ui/net_internals_ui.cc index 1e8ec4b..b1e2950 100644 --- a/chrome/browser/dom_ui/net_internals_ui.cc +++ b/chrome/browser/dom_ui/net_internals_ui.cc @@ -416,7 +416,8 @@ NetInternalsMessageHandler::IOThreadImpl::IOThreadImpl( const base::WeakPtr<NetInternalsMessageHandler>& handler, IOThread* io_thread, URLRequestContextGetter* context_getter) - : handler_(handler), + : Observer(net::NetLog::LOG_ALL), + handler_(handler), io_thread_(io_thread), context_getter_(context_getter), is_observing_log_(false) { diff --git a/chrome/browser/net/chrome_net_log.cc b/chrome/browser/net/chrome_net_log.cc index de2466e..dd9c62f 100644 --- a/chrome/browser/net/chrome_net_log.cc +++ b/chrome/browser/net/chrome_net_log.cc @@ -15,6 +15,8 @@ #include "chrome/browser/net/passive_log_collector.h" #include "chrome/common/chrome_switches.h" +ChromeNetLog::Observer::Observer(LogLevel log_level) : log_level_(log_level) {} + ChromeNetLog::ChromeNetLog() : next_id_(1), passive_collector_(new PassiveLogCollector), @@ -56,10 +58,18 @@ uint32 ChromeNetLog::NextID() { return next_id_++; } -bool ChromeNetLog::HasListener() const { +net::NetLog::LogLevel ChromeNetLog::GetLogLevel() const { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); - // (Don't count the PassiveLogCollector observer). - return observers_.size() > 1; + + // 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; + ObserverListBase<Observer>::Iterator it(observers_); + Observer* observer; + while ((observer = it.GetNext()) != NULL) { + log_level = std::min(log_level, observer->log_level()); + } + return log_level; } void ChromeNetLog::AddObserver(Observer* observer) { diff --git a/chrome/browser/net/chrome_net_log.h b/chrome/browser/net/chrome_net_log.h index bee4c62..24183bf 100644 --- a/chrome/browser/net/chrome_net_log.h +++ b/chrome/browser/net/chrome_net_log.h @@ -28,12 +28,26 @@ class ChromeNetLog : public net::NetLog { // Interface for observing the events logged by the network stack. class Observer { public: + // Constructs an observer that wants to see network events, with + // the specified minimum event granularity. + // + // Typical observers should specify LOG_BASIC. + // + // Observers that need to see the full granularity of events can + // specify LOG_ALL. However doing so will have performance consequences, + // and may cause PassiveLogCollector to use more memory than anticiapted. + explicit Observer(LogLevel log_level); + virtual ~Observer() {} virtual void OnAddEntry(EventType type, const base::TimeTicks& time, const Source& source, EventPhase phase, EventParameters* params) = 0; + LogLevel log_level() const { return log_level_; } + private: + LogLevel log_level_; + DISALLOW_COPY_AND_ASSIGN(Observer); }; ChromeNetLog(); @@ -46,7 +60,7 @@ class ChromeNetLog : public net::NetLog { EventPhase phase, EventParameters* params); virtual uint32 NextID(); - virtual bool HasListener() const; + virtual LogLevel GetLogLevel() const; void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); @@ -64,7 +78,10 @@ class ChromeNetLog : public net::NetLog { scoped_ptr<PassiveLogCollector> passive_collector_; scoped_ptr<LoadTimingObserver> load_timing_observer_; scoped_ptr<NetLogLogger> net_log_logger_; - ObserverList<Observer, true> observers_; + + // Note that this needs to be "mutable" so we can iterate over the observer + // list in GetLogLevel(). + mutable ObserverList<Observer, true> observers_; DISALLOW_COPY_AND_ASSIGN(ChromeNetLog); }; diff --git a/chrome/browser/net/load_timing_observer.cc b/chrome/browser/net/load_timing_observer.cc index d2e45c6..7b292d0 100644 --- a/chrome/browser/net/load_timing_observer.cc +++ b/chrome/browser/net/load_timing_observer.cc @@ -49,7 +49,8 @@ LoadTimingObserver::URLRequestRecord::URLRequestRecord() } LoadTimingObserver::LoadTimingObserver() - : last_connect_job_id_(net::NetLog::Source::kInvalidId) { + : Observer(net::NetLog::LOG_BASIC), + last_connect_job_id_(net::NetLog::Source::kInvalidId) { } LoadTimingObserver::~LoadTimingObserver() { diff --git a/chrome/browser/net/net_log_logger.cc b/chrome/browser/net/net_log_logger.cc index e9905a7..4f5021f 100644 --- a/chrome/browser/net/net_log_logger.cc +++ b/chrome/browser/net/net_log_logger.cc @@ -7,7 +7,7 @@ #include "base/json/json_writer.h" #include "base/values.h" -NetLogLogger::NetLogLogger() {} +NetLogLogger::NetLogLogger() : Observer(net::NetLog::LOG_ALL) {} NetLogLogger::~NetLogLogger() {} diff --git a/chrome/browser/net/passive_log_collector.cc b/chrome/browser/net/passive_log_collector.cc index adc6500..3dd8ccd 100644 --- a/chrome/browser/net/passive_log_collector.cc +++ b/chrome/browser/net/passive_log_collector.cc @@ -42,7 +42,8 @@ bool SortByOrderComparator(const PassiveLogCollector::Entry& a, //---------------------------------------------------------------------------- PassiveLogCollector::PassiveLogCollector() - : ALLOW_THIS_IN_INITIALIZER_LIST(connect_job_tracker_(this)), + : Observer(net::NetLog::LOG_BASIC), + ALLOW_THIS_IN_INITIALIZER_LIST(connect_job_tracker_(this)), ALLOW_THIS_IN_INITIALIZER_LIST(url_request_tracker_(this)), ALLOW_THIS_IN_INITIALIZER_LIST(socket_stream_tracker_(this)), num_events_seen_(0) { diff --git a/net/base/capturing_net_log.h b/net/base/capturing_net_log.h index 9a5addd..9669445 100644 --- a/net/base/capturing_net_log.h +++ b/net/base/capturing_net_log.h @@ -53,7 +53,7 @@ class CapturingNetLog : public NetLog { EventPhase phase, EventParameters* extra_parameters); virtual uint32 NextID(); - virtual bool HasListener() const { return true; } + virtual LogLevel GetLogLevel() const { return LOG_ALL; } // Returns the list of all entries in the log. const EntryList& entries() const { return entries_; } diff --git a/net/base/forwarding_net_log.cc b/net/base/forwarding_net_log.cc index dfc8700..efe6eff 100644 --- a/net/base/forwarding_net_log.cc +++ b/net/base/forwarding_net_log.cc @@ -86,10 +86,10 @@ uint32 ForwardingNetLog::NextID() { return 0; } -bool ForwardingNetLog::HasListener() const { +NetLog::LogLevel ForwardingNetLog::GetLogLevel() const { // Can't forward a synchronous API. CHECK(false) << "Not supported"; - return false; + return LOG_ALL; } } // namespace net diff --git a/net/base/forwarding_net_log.h b/net/base/forwarding_net_log.h index 36ff9d2..257b4c7 100644 --- a/net/base/forwarding_net_log.h +++ b/net/base/forwarding_net_log.h @@ -39,7 +39,7 @@ class ForwardingNetLog : public NetLog { EventPhase phase, EventParameters* params); virtual uint32 NextID(); - virtual bool HasListener() const; + virtual LogLevel GetLogLevel() const; private: class Core; diff --git a/net/base/net_log.cc b/net/base/net_log.cc index 734cef1..2cc149f 100644 --- a/net/base/net_log.cc +++ b/net/base/net_log.cc @@ -122,10 +122,14 @@ void BoundNetLog::AddEntryWithTime( } } -bool BoundNetLog::HasListener() const { +NetLog::LogLevel BoundNetLog::GetLogLevel() const { if (net_log_) - return net_log_->HasListener(); - return false; + return net_log_->GetLogLevel(); + return NetLog::LOG_BASIC; +} + +bool BoundNetLog::IsLoggingAll() const { + return GetLogLevel() == NetLog::LOG_ALL; } void BoundNetLog::AddEvent( diff --git a/net/base/net_log.h b/net/base/net_log.h index d6eca7c..c97eb1a 100644 --- a/net/base/net_log.h +++ b/net/base/net_log.h @@ -95,6 +95,15 @@ class NetLog { DISALLOW_COPY_AND_ASSIGN(EventParameters); }; + // Specifies the granularity of events that should be emitted to the log. + enum LogLevel { + // Log everything possible, even if it is slow and memory expensive. + LOG_ALL, + + // Only log events which are cheap, and don't consume much memory. + LOG_BASIC, + }; + NetLog() {} virtual ~NetLog() {} @@ -117,8 +126,9 @@ class NetLog { // Returns a unique ID which can be used as a source ID. virtual uint32 NextID() = 0; - // Returns true if more complicated messages should be sent to the log. - virtual bool HasListener() const = 0; + // Returns the logging level for this NetLog. This is used to avoid computing + // and saving expensive log entries. + virtual LogLevel GetLogLevel() const = 0; // Returns a C-String symbolic name for |event_type|. static const char* EventTypeToString(EventType event_type); @@ -177,7 +187,10 @@ class BoundNetLog { void EndEvent(NetLog::EventType event_type, const scoped_refptr<NetLog::EventParameters>& params) const; - bool HasListener() const; + NetLog::LogLevel GetLogLevel() const; + + // Returns true if the log level is LOG_ALL. + bool IsLoggingAll() const; // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care // of creating a unique source ID, and handles the case of NULL net_log. diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 1dad416..aec4977 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -688,7 +688,7 @@ int HttpNetworkTransaction::DoSendRequest() { if (session_->network_delegate()) session_->network_delegate()->OnSendHttpRequest(&request_headers); - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, new NetLogHttpRequestParameter(request_line, request_headers)); @@ -784,7 +784,7 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { return rv; } - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, new NetLogHttpResponseParameter(response_.headers)); diff --git a/net/http/http_proxy_client_socket.cc b/net/http/http_proxy_client_socket.cc index 16f6e28..7ed80a5 100644 --- a/net/http/http_proxy_client_socket.cc +++ b/net/http/http_proxy_client_socket.cc @@ -337,7 +337,7 @@ int HttpProxyClientSocket::DoSendRequest() { HttpRequestHeaders request_headers; BuildTunnelRequest(&request_, authorization_headers, endpoint_, &request_line, &request_headers); - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, new NetLogHttpRequestParameter( @@ -373,7 +373,7 @@ int HttpProxyClientSocket::DoReadHeadersComplete(int result) { if (response_.headers->GetParsedHttpVersion() < HttpVersion(1, 0)) return ERR_TUNNEL_CONNECTION_FAILED; - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, new NetLogHttpResponseParameter(response_.headers)); diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc index ae180a0..3d1539f 100644 --- a/net/proxy/proxy_service.cc +++ b/net/proxy/proxy_service.cc @@ -652,7 +652,7 @@ int ProxyService::DidFinishResolvingProxy(ProxyInfo* result, // Log the result of the proxy resolution. if (result_code == OK) { // When full logging is enabled, dump the proxy list. - if (net_log.HasListener()) { + if (net_log.IsLoggingAll()) { net_log.AddEvent( NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, new NetLogStringParameter("pac_string", result->ToPacString())); diff --git a/net/socket/tcp_client_socket_pool.cc b/net/socket/tcp_client_socket_pool.cc index dce14dc..f3d94ac 100644 --- a/net/socket/tcp_client_socket_pool.cc +++ b/net/socket/tcp_client_socket_pool.cc @@ -217,7 +217,7 @@ int TCPClientSocketPool::RequestSocket( const scoped_refptr<TCPSocketParams>* casted_params = static_cast<const scoped_refptr<TCPSocketParams>*>(params); - if (net_log.HasListener()) { + if (net_log.IsLoggingAll()) { // TODO(eroman): Split out the host and port parameters. net_log.AddEvent( NetLog::TYPE_TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKET, diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 04037ac..957b90e 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -398,7 +398,7 @@ int SpdySession::WriteSynStream( streams_initiated_count_++; const BoundNetLog& log = stream->net_log(); - if (log.HasListener()) { + if (log.IsLoggingAll()) { log.AddEvent( NetLog::TYPE_SPDY_STREAM_SYN_STREAM, new NetLogSpdySynParameter(headers, flags, stream_id)); @@ -1012,7 +1012,7 @@ void SpdySession::OnSyn(const spdy::SpdySynStreamControlFrame& frame, stream = new SpdyStream(this, stream_id, true); - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( NetLog::TYPE_SPDY_SESSION_PUSHED_SYN_STREAM, new NetLogSpdySynParameter( @@ -1069,7 +1069,7 @@ void SpdySession::OnSynReply(const spdy::SpdySynReplyControlFrame& frame, stream->set_response_received(); const BoundNetLog& log = stream->net_log(); - if (log.HasListener()) { + if (log.IsLoggingAll()) { log.AddEvent( NetLog::TYPE_SPDY_STREAM_SYN_REPLY, new NetLogSpdySynParameter( diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index c87d9a3..b4f9d51 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc @@ -490,7 +490,7 @@ void URLRequest::OrphanJob() { } int URLRequest::Redirect(const GURL& location, int http_status_code) { - if (net_log_.HasListener()) { + if (net_log_.IsLoggingAll()) { net_log_.AddEvent( net::NetLog::TYPE_URL_REQUEST_REDIRECTED, new net::NetLogStringParameter( |