| Index: net/base/backoff_entry.h
|
| ===================================================================
|
| --- net/base/backoff_entry.h (revision 133709)
|
| +++ net/base/backoff_entry.h (working copy)
|
| @@ -2,8 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef NET_BASE_BACKOFF_ITEM_H_
|
| -#define NET_BASE_BACKOFF_ITEM_H_
|
| +#ifndef NET_BASE_BACKOFF_ENTRY_H_
|
| +#define NET_BASE_BACKOFF_ENTRY_H_
|
| #pragma once
|
|
|
| #include "base/threading/non_thread_safe.h"
|
| @@ -17,8 +17,7 @@
|
| //
|
| // This utility class knows nothing about network specifics; it is
|
| // intended for reuse in various networking scenarios.
|
| -class NET_EXPORT_PRIVATE BackoffEntry
|
| - : NON_EXPORTED_BASE(public base::NonThreadSafe) {
|
| +class NET_EXPORT BackoffEntry : NON_EXPORTED_BASE(public base::NonThreadSafe) {
|
| public:
|
| // The set of parameters that define a back-off policy.
|
| struct Policy {
|
| @@ -26,8 +25,11 @@
|
| // exponential back-off rules.
|
| int num_errors_to_ignore;
|
|
|
| - // Initial delay for exponential back-off.
|
| - int initial_backoff_ms;
|
| + // Initial delay. The interpretation of this value depends on
|
| + // always_use_initial_delay. It's either how long we wait between
|
| + // requests before backoff starts, or how much we delay the first request
|
| + // after backoff starts.
|
| + int initial_delay_ms;
|
|
|
| // Factor by which the waiting time will be multiplied.
|
| double multiply_factor;
|
| @@ -43,6 +45,15 @@
|
| // Time to keep an entry from being discarded even when it
|
| // has no significant state, -1 to never discard.
|
| int64 entry_lifetime_ms;
|
| +
|
| + // If true, we always use a delay of initial_delay_ms, even before
|
| + // we've seen num_errors_to_ignore errors. Otherwise, initial_delay_ms
|
| + // is the first delay once we start exponential backoff.
|
| + //
|
| + // So if we're ignoring 1 error, we'll see (N, N, Nm, Nm^2, ...) if true,
|
| + // and (0, 0, N, Nm, ...) when false, where N is initial_backoff_ms and
|
| + // m is multiply_factor, assuming we've already seen one success.
|
| + bool always_use_initial_delay;
|
| };
|
|
|
| // Lifetime of policy must enclose lifetime of BackoffEntry. The
|
| @@ -62,13 +73,16 @@
|
| // state) will no longer reject requests.
|
| base::TimeTicks GetReleaseTime() const;
|
|
|
| + // Returns the time until a request can be sent.
|
| + base::TimeDelta GetTimeUntilRelease() const;
|
| +
|
| // Causes this object reject requests until the specified absolute time.
|
| // This can be used to e.g. implement support for a Retry-After header.
|
| void SetCustomReleaseTime(const base::TimeTicks& release_time);
|
|
|
| // Returns true if this object has no significant state (i.e. you could
|
| // just as well start with a fresh BackoffEntry object), and hasn't
|
| - // had for Policy::entry_lifetime_ms_.
|
| + // had for Policy::entry_lifetime_ms.
|
| bool CanDiscard() const;
|
|
|
| // Resets this entry to a fresh (as if just constructed) state.
|
| @@ -89,7 +103,7 @@
|
| // allowed to start sending requests again.
|
| base::TimeTicks exponential_backoff_release_time_;
|
|
|
| - // Counts request errors; reset on success.
|
| + // Counts request errors; decremented on success.
|
| int failure_count_;
|
|
|
| const Policy* const policy_;
|
| @@ -99,4 +113,4 @@
|
|
|
| } // namespace net
|
|
|
| -#endif // NET_BASE_BACKOFF_ITEM_H_
|
| +#endif // NET_BASE_BACKOFF_ENTRY_H_
|
|
|