diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-21 05:29:49 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-21 05:29:49 +0000 |
commit | 8cdc881d5400bb82a3b5cb1726f6ac82c4e7ac32 (patch) | |
tree | 06ea8a5334e1779faba2c91d8ad5402143016a89 /net/proxy/proxy_resolver_v8_tracing.cc | |
parent | f7264ec3288024f79db2a6ed7f82ac74b888271c (diff) | |
download | chromium_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.cc | 20 |
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; } |