summaryrefslogtreecommitdiffstats
path: root/net/proxy/proxy_resolver_v8_tracing.cc
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-21 05:29:49 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-21 05:29:49 +0000
commit8cdc881d5400bb82a3b5cb1726f6ac82c4e7ac32 (patch)
tree06ea8a5334e1779faba2c91d8ad5402143016a89 /net/proxy/proxy_resolver_v8_tracing.cc
parentf7264ec3288024f79db2a6ed7f82ac74b888271c (diff)
downloadchromium_src-8cdc881d5400bb82a3b5cb1726f6ac82c4e7ac32.zip
chromium_src-8cdc881d5400bb82a3b5cb1726f6ac82c4e7ac32.tar.gz
chromium_src-8cdc881d5400bb82a3b5cb1726f6ac82c4e7ac32.tar.bz2
Optimization for ProxyResolverV8Tracing: early termination.
Tries to terminate the script V8 execution when the run is abandoned for DNS tracing. BUG=119151 Review URL: https://chromiumcodereview.appspot.com/12289019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@183743 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/proxy/proxy_resolver_v8_tracing.cc')
-rw-r--r--net/proxy/proxy_resolver_v8_tracing.cc20
1 files changed, 14 insertions, 6 deletions
diff --git a/net/proxy/proxy_resolver_v8_tracing.cc b/net/proxy/proxy_resolver_v8_tracing.cc
index 0d5160c..c15c3c2 100644
--- a/net/proxy/proxy_resolver_v8_tracing.cc
+++ b/net/proxy/proxy_resolver_v8_tracing.cc
@@ -155,7 +155,8 @@ class ProxyResolverV8Tracing::Job
// Implementation of ProxyResolverv8::JSBindings
virtual bool ResolveDns(const std::string& host,
ResolveDnsOperation op,
- std::string* output) OVERRIDE;
+ std::string* output,
+ bool* terminate) OVERRIDE;
virtual void Alert(const string16& message) OVERRIDE;
virtual void OnError(int line_number, const string16& error) OVERRIDE;
@@ -165,7 +166,8 @@ class ProxyResolverV8Tracing::Job
bool ResolveDnsNonBlocking(const std::string& host,
ResolveDnsOperation op,
- std::string* output);
+ std::string* output,
+ bool* terminate);
bool PostDnsOperationAndWait(const std::string& host,
ResolveDnsOperation op,
@@ -658,9 +660,12 @@ int ProxyResolverV8Tracing::Job::ExecuteProxyResolver() {
bool ProxyResolverV8Tracing::Job::ResolveDns(const std::string& host,
ResolveDnsOperation op,
- std::string* output) {
- if (cancelled_.IsSet())
+ std::string* output,
+ bool* terminate) {
+ if (cancelled_.IsSet()) {
+ *terminate = true;
return false;
+ }
if ((op == DNS_RESOLVE || op == DNS_RESOLVE_EX) && host.empty()) {
// a DNS resolve with an empty hostname is considered an error.
@@ -669,7 +674,7 @@ bool ProxyResolverV8Tracing::Job::ResolveDns(const std::string& host,
return blocking_dns_ ?
ResolveDnsBlocking(host, op, output) :
- ResolveDnsNonBlocking(host, op, output);
+ ResolveDnsNonBlocking(host, op, output, terminate);
}
void ProxyResolverV8Tracing::Job::Alert(const string16& message) {
@@ -712,7 +717,8 @@ bool ProxyResolverV8Tracing::Job::ResolveDnsBlocking(const std::string& host,
bool ProxyResolverV8Tracing::Job::ResolveDnsNonBlocking(const std::string& host,
ResolveDnsOperation op,
- std::string* output) {
+ std::string* output,
+ bool* terminate) {
CheckIsOnWorkerThread();
if (abandoned_) {
@@ -736,6 +742,7 @@ bool ProxyResolverV8Tracing::Job::ResolveDnsNonBlocking(const std::string& host,
if (num_dns_ <= last_num_dns_) {
// The sequence of DNS operations is different from last time!
ScheduleRestartWithBlockingDns();
+ *terminate = true;
return false;
}
@@ -759,6 +766,7 @@ bool ProxyResolverV8Tracing::Job::ResolveDnsNonBlocking(const std::string& host,
// been started. Abandon this invocation of FindProxyForURL(), it will be
// restarted once the DNS request completes.
abandoned_ = true;
+ *terminate = true;
last_num_dns_ = num_dns_;
return false;
}