summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 15:55:51 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 15:55:51 +0000
commitee094b89dd380eed93bc0e6ce380d03a0b1b5329 (patch)
treed49719e986de616af7b59b95046be1613568a8f7 /chrome
parentbb872ba65a60c2ade48089f6f0bc538e0cc649ac (diff)
downloadchromium_src-ee094b89dd380eed93bc0e6ce380d03a0b1b5329.zip
chromium_src-ee094b89dd380eed93bc0e6ce380d03a0b1b5329.tar.gz
chromium_src-ee094b89dd380eed93bc0e6ce380d03a0b1b5329.tar.bz2
Adds HostResolveImpl Requests and Jobs to log.
Differences over the reverted version (http://codereview.chromium.org/3080034/show - reverted http://codereview.chromium.org/3137022/show ): * Jobs never log anything in their destructor, as the HostResolverImpl randomly outlives the NetLog, at least in some unit tests. * Removed the extra log entries for when a DNS lookup starts/completes. Instead, the job's event is ended in OnLookupComplete(). * Slight modification of the CanceledAsynchronousLookup unit test, as the Job is now closed before posting any events to the Request. For actual lookups, this behavior means the Job's duration more accurately reflects the time the DNS lookup takes itself. BUG=46844 TEST=Look at the net-internals screen. Review URL: http://codereview.chromium.org/3119027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57189 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/io_thread.cc6
-rw-r--r--chrome/browser/net/connection_tester.cc2
-rw-r--r--chrome/browser/net/passive_log_collector.cc51
-rw-r--r--chrome/browser/net/passive_log_collector.h32
-rw-r--r--chrome/browser/resources/net_internals/main.css5
-rw-r--r--chrome/browser/resources/net_internals/sourceentry.js29
-rw-r--r--chrome/service/net/service_url_request_context.cc3
7 files changed, 114 insertions, 14 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 4f9a244..1a0fdbf 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -27,7 +27,7 @@
namespace {
-net::HostResolver* CreateGlobalHostResolver() {
+net::HostResolver* CreateGlobalHostResolver(net::NetLog* net_log) {
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
size_t parallelism = net::HostResolver::kDefaultParallelism;
@@ -47,7 +47,7 @@ net::HostResolver* CreateGlobalHostResolver() {
}
net::HostResolver* global_host_resolver =
- net::CreateSystemHostResolver(parallelism);
+ net::CreateSystemHostResolver(parallelism, net_log);
// Determine if we should disable IPv6 support.
if (!command_line.HasSwitch(switches::kEnableIPv6)) {
@@ -186,7 +186,7 @@ void IOThread::Init() {
network_change_observer_.reset(
new LoggingNetworkChangeObserver(globals_->net_log.get()));
- globals_->host_resolver = CreateGlobalHostResolver();
+ globals_->host_resolver = CreateGlobalHostResolver(globals_->net_log.get());
globals_->http_auth_handler_factory.reset(CreateDefaultAuthHandlerFactory(
globals_->host_resolver));
}
diff --git a/chrome/browser/net/connection_tester.cc b/chrome/browser/net/connection_tester.cc
index 1dd598e..5f71795 100644
--- a/chrome/browser/net/connection_tester.cc
+++ b/chrome/browser/net/connection_tester.cc
@@ -82,7 +82,7 @@ class ExperimentURLRequestContext : public URLRequestContext {
// Create a vanilla HostResolver that disables caching.
const size_t kMaxJobs = 50u;
scoped_refptr<net::HostResolverImpl> impl =
- new net::HostResolverImpl(NULL, NULL, kMaxJobs);
+ new net::HostResolverImpl(NULL, NULL, kMaxJobs, NULL);
*host_resolver = impl;
diff --git a/chrome/browser/net/passive_log_collector.cc b/chrome/browser/net/passive_log_collector.cc
index 152d332..adc6500 100644
--- a/chrome/browser/net/passive_log_collector.cc
+++ b/chrome/browser/net/passive_log_collector.cc
@@ -57,7 +57,9 @@ PassiveLogCollector::PassiveLogCollector()
trackers_[net::NetLog::SOURCE_INIT_PROXY_RESOLVER] =
&init_proxy_resolver_tracker_;
trackers_[net::NetLog::SOURCE_SPDY_SESSION] = &spdy_session_tracker_;
-
+ trackers_[net::NetLog::SOURCE_HOST_RESOLVER_IMPL_REQUEST] =
+ &dns_request_tracker_;
+ trackers_[net::NetLog::SOURCE_HOST_RESOLVER_IMPL_JOB] = &dns_job_tracker_;
// Make sure our mapping is up-to-date.
for (size_t i = 0; i < arraysize(trackers_); ++i)
DCHECK(trackers_[i]) << "Unhandled SourceType: " << i;
@@ -485,3 +487,50 @@ PassiveLogCollector::SpdySessionTracker::DoAddEntry(const Entry& entry,
return ACTION_NONE;
}
}
+
+//----------------------------------------------------------------------------
+// DNSRequestTracker
+//----------------------------------------------------------------------------
+
+const size_t PassiveLogCollector::DNSRequestTracker::kMaxNumSources = 200;
+const size_t PassiveLogCollector::DNSRequestTracker::kMaxGraveyardSize = 20;
+
+PassiveLogCollector::DNSRequestTracker::DNSRequestTracker()
+ : SourceTracker(kMaxNumSources, kMaxGraveyardSize, NULL) {
+}
+
+PassiveLogCollector::SourceTracker::Action
+PassiveLogCollector::DNSRequestTracker::DoAddEntry(const Entry& entry,
+ SourceInfo* out_info) {
+ AddEntryToSourceInfo(entry, out_info);
+ if (entry.type == net::NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST &&
+ entry.phase == net::NetLog::PHASE_END) {
+ return ACTION_MOVE_TO_GRAVEYARD;
+ } else {
+ return ACTION_NONE;
+ }
+}
+
+//----------------------------------------------------------------------------
+// DNSJobTracker
+//----------------------------------------------------------------------------
+
+const size_t PassiveLogCollector::DNSJobTracker::kMaxNumSources = 100;
+const size_t PassiveLogCollector::DNSJobTracker::kMaxGraveyardSize = 15;
+
+PassiveLogCollector::DNSJobTracker::DNSJobTracker()
+ : SourceTracker(kMaxNumSources, kMaxGraveyardSize, NULL) {
+}
+
+PassiveLogCollector::SourceTracker::Action
+PassiveLogCollector::DNSJobTracker::DoAddEntry(const Entry& entry,
+ SourceInfo* out_info) {
+ AddEntryToSourceInfo(entry, out_info);
+ if (entry.type == net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB &&
+ entry.phase == net::NetLog::PHASE_END) {
+ return ACTION_MOVE_TO_GRAVEYARD;
+ } else {
+ return ACTION_NONE;
+ }
+}
+
diff --git a/chrome/browser/net/passive_log_collector.h b/chrome/browser/net/passive_log_collector.h
index e7d741f..8ffd459 100644
--- a/chrome/browser/net/passive_log_collector.h
+++ b/chrome/browser/net/passive_log_collector.h
@@ -283,6 +283,36 @@ class PassiveLogCollector : public ChromeNetLog::Observer {
DISALLOW_COPY_AND_ASSIGN(SpdySessionTracker);
};
+ // Tracks the log entries for the last seen SOURCE_HOST_RESOLVER_IMPL_REQUEST.
+ class DNSRequestTracker : public SourceTracker {
+ public:
+ static const size_t kMaxNumSources;
+ static const size_t kMaxGraveyardSize;
+
+ DNSRequestTracker();
+
+ protected:
+ virtual Action DoAddEntry(const Entry& entry, SourceInfo* out_info);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DNSRequestTracker);
+ };
+
+ // Tracks the log entries for the last seen SOURCE_HOST_RESOLVER_IMPL_JOB.
+ class DNSJobTracker : public SourceTracker {
+ public:
+ static const size_t kMaxNumSources;
+ static const size_t kMaxGraveyardSize;
+
+ DNSJobTracker();
+
+ protected:
+ virtual Action DoAddEntry(const Entry& entry, SourceInfo* out_info);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DNSJobTracker);
+ };
+
PassiveLogCollector();
~PassiveLogCollector();
@@ -317,6 +347,8 @@ class PassiveLogCollector : public ChromeNetLog::Observer {
RequestTracker socket_stream_tracker_;
InitProxyResolverTracker init_proxy_resolver_tracker_;
SpdySessionTracker spdy_session_tracker_;
+ DNSRequestTracker dns_request_tracker_;
+ DNSJobTracker dns_job_tracker_;
// This array maps each NetLog::SourceType to one of the tracker instances
// defined above. Use of this array avoid duplicating the list of trackers
diff --git a/chrome/browser/resources/net_internals/main.css b/chrome/browser/resources/net_internals/main.css
index ecef780..13b22b2 100644
--- a/chrome/browser/resources/net_internals/main.css
+++ b/chrome/browser/resources/net_internals/main.css
@@ -87,6 +87,11 @@ body {
color: blue;
}
+#requestsListTableBody .source_HOST_RESOLVER_IMPL_JOB,
+#requestsListTableBody .source_HOST_RESOLVER_IMPL_REQUEST {
+ color: #308080;
+}
+
#requestsListTableBody .source_SOCKET {
color: purple;
}
diff --git a/chrome/browser/resources/net_internals/sourceentry.js b/chrome/browser/resources/net_internals/sourceentry.js
index 2cbbf4e..2a74668 100644
--- a/chrome/browser/resources/net_internals/sourceentry.js
+++ b/chrome/browser/resources/net_internals/sourceentry.js
@@ -67,8 +67,11 @@ SourceEntry.prototype.update = function(logEntry) {
var curStartEntry = this.getStartEntry_();
// If we just got the first entry for this source.
- if (!prevStartEntry && curStartEntry) {
- this.createRow_();
+ if (prevStartEntry != curStartEntry) {
+ if (!prevStartEntry)
+ this.createRow_();
+ else
+ this.updateDescription_();
// Only apply the filter during the first update.
// TODO(eroman): once filters use other data, apply it on each update.
@@ -116,6 +119,11 @@ SourceEntry.prototype.onMouseout_ = function() {
this.setMouseoverStyle(false);
};
+SourceEntry.prototype.updateDescription_ = function() {
+ this.descriptionCell_.innerHTML = '';
+ addTextNode(this.descriptionCell_, this.getDescription());
+}
+
SourceEntry.prototype.createRow_ = function() {
// Create a row.
var tr = addNode(this.parentView_.tableBody_, 'tr');
@@ -131,6 +139,7 @@ SourceEntry.prototype.createRow_ = function() {
var typeCell = addNode(tr, 'td');
var descriptionCell = addNode(tr, 'td');
+ this.descriptionCell_ = descriptionCell;
// Connect listeners.
checkbox.onchange = this.onCheckboxToggled_.bind(this);
@@ -150,7 +159,7 @@ SourceEntry.prototype.createRow_ = function() {
addTextNode(idCell, "-");
var sourceTypeString = this.getSourceTypeString();
addTextNode(typeCell, sourceTypeString);
- addTextNode(descriptionCell, this.getDescription());
+ this.updateDescription_();
// Add a CSS classname specific to this source type (so CSS can specify
// different stylings for different types).
@@ -182,6 +191,9 @@ SourceEntry.prototype.getDescription = function() {
return e.params.url;
case LogSourceType.CONNECT_JOB:
return e.params.group_name;
+ case LogSourceType.HOST_RESOLVER_IMPL_REQUEST:
+ case LogSourceType.HOST_RESOLVER_IMPL_JOB:
+ return e.params.host;
}
return '';
@@ -196,11 +208,12 @@ SourceEntry.prototype.getDescription = function() {
SourceEntry.prototype.getStartEntry_ = function() {
if (this.entries_.length < 1)
return undefined;
- if (this.entries_[0].type != LogEventType.REQUEST_ALIVE)
- return this.entries_[0];
- if (this.entries_.length < 2)
- return undefined;
- return this.entries_[1];
+ if (this.entries_.length >= 2) {
+ if (this.entries_[0].type == LogEventType.REQUEST_ALIVE ||
+ this.entries_[0].type == LogEventType.SOCKET_POOL_CONNECT_JOB)
+ return this.entries_[1];
+ }
+ return this.entries_[0];
};
SourceEntry.prototype.getLogEntries = function() {
diff --git a/chrome/service/net/service_url_request_context.cc b/chrome/service/net/service_url_request_context.cc
index ad45796..e7069a5 100644
--- a/chrome/service/net/service_url_request_context.cc
+++ b/chrome/service/net/service_url_request_context.cc
@@ -22,7 +22,8 @@ ServiceURLRequestContextGetter::ServiceURLRequestContextGetter()
ServiceURLRequestContext::ServiceURLRequestContext() {
host_resolver_ =
- net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism);
+ net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism,
+ NULL);
DCHECK(g_service_process);
// TODO(sanjeevr): Change CreateSystemProxyConfigService to accept a
// MessageLoopProxy* instead of MessageLoop*.