summaryrefslogtreecommitdiffstats
path: root/net/base/backoff_entry.cc
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 22:48:10 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 22:48:10 +0000
commit6dc408a40e64ece68e37528ddb2fc01035e83807 (patch)
treebe7fc43034d949501013cb7ac070203395ed336e /net/base/backoff_entry.cc
parent5b3e6d6cce783d9cb9b878f51d26235b7d9606b1 (diff)
downloadchromium_src-6dc408a40e64ece68e37528ddb2fc01035e83807.zip
chromium_src-6dc408a40e64ece68e37528ddb2fc01035e83807.tar.gz
chromium_src-6dc408a40e64ece68e37528ddb2fc01035e83807.tar.bz2
BackoffEntry: Add the option to use a delay between requests
before backoff starts due to failures, for use with captive portal code. R=joi@chroimium.org BUG=87100, 115487 Review URL: http://codereview.chromium.org/10173005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133792 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/backoff_entry.cc')
-rw-r--r--net/base/backoff_entry.cc20
1 files changed, 18 insertions, 2 deletions
diff --git a/net/base/backoff_entry.cc b/net/base/backoff_entry.cc
index f00dd40..b1826b7 100644
--- a/net/base/backoff_entry.cc
+++ b/net/base/backoff_entry.cc
@@ -47,8 +47,11 @@ void BackoffEntry::InformOfRequest(bool succeeded) {
// those failures will not reset the release time, further
// requests will then need to wait the delay caused by the 2
// failures.
+ base::TimeDelta delay;
+ if (policy_->always_use_initial_delay)
+ delay = base::TimeDelta::FromMilliseconds(policy_->initial_delay_ms);
exponential_backoff_release_time_ = std::max(
- ImplGetTimeNow(), exponential_backoff_release_time_);
+ ImplGetTimeNow() + delay, exponential_backoff_release_time_);
}
}
@@ -56,6 +59,13 @@ bool BackoffEntry::ShouldRejectRequest() const {
return exponential_backoff_release_time_ > ImplGetTimeNow();
}
+base::TimeDelta BackoffEntry::GetTimeUntilRelease() const {
+ base::TimeTicks now = ImplGetTimeNow();
+ if (exponential_backoff_release_time_ <= now)
+ return base::TimeDelta();
+ return exponential_backoff_release_time_ - now;
+}
+
base::TimeTicks BackoffEntry::GetReleaseTime() const {
return exponential_backoff_release_time_;
}
@@ -107,6 +117,12 @@ base::TimeTicks BackoffEntry::ImplGetTimeNow() const {
base::TimeTicks BackoffEntry::CalculateReleaseTime() const {
int effective_failure_count =
std::max(0, failure_count_ - policy_->num_errors_to_ignore);
+
+ // If always_use_initial_delay is true, it's equivalent to
+ // the effective_failure_count always being one greater than when it's false.
+ if (policy_->always_use_initial_delay)
+ ++effective_failure_count;
+
if (effective_failure_count == 0) {
// Never reduce previously set release horizon, e.g. due to Retry-After
// header.
@@ -116,7 +132,7 @@ base::TimeTicks BackoffEntry::CalculateReleaseTime() const {
// The delay is calculated with this formula:
// delay = initial_backoff * multiply_factor^(
// effective_failure_count - 1) * Uniform(1 - jitter_factor, 1]
- double delay = policy_->initial_backoff_ms;
+ double delay = policy_->initial_delay_ms;
delay *= pow(policy_->multiply_factor, effective_failure_count - 1);
delay -= base::RandDouble() * policy_->jitter_factor * delay;