summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/dom_ui/net_internals_ui.cc3
-rw-r--r--chrome/browser/net/chrome_net_log.cc16
-rw-r--r--chrome/browser/net/chrome_net_log.h21
-rw-r--r--chrome/browser/net/load_timing_observer.cc3
-rw-r--r--chrome/browser/net/net_log_logger.cc2
-rw-r--r--chrome/browser/net/passive_log_collector.cc3
-rw-r--r--net/base/capturing_net_log.h2
-rw-r--r--net/base/forwarding_net_log.cc4
-rw-r--r--net/base/forwarding_net_log.h2
-rw-r--r--net/base/net_log.cc10
-rw-r--r--net/base/net_log.h19
-rw-r--r--net/http/http_network_transaction.cc4
-rw-r--r--net/http/http_proxy_client_socket.cc4
-rw-r--r--net/proxy/proxy_service.cc2
-rw-r--r--net/socket/tcp_client_socket_pool.cc2
-rw-r--r--net/spdy/spdy_session.cc6
-rw-r--r--net/url_request/url_request.cc2
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(