#ifndef GRPC_CORE_LIB_BACKOFF_BACKOFF_H
#define GRPC_CORE_LIB_BACKOFF_BACKOFF_H
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/exec_ctx.h"
namespace grpc_core {
class BackOff {
public:
class Options;
explicit BackOff(const Options& options);
grpc_millis NextAttemptTime();
void Reset();
void SetRandomSeed(unsigned int seed);
class Options {
public:
Options& set_initial_backoff(grpc_millis initial_backoff) {
initial_backoff_ = initial_backoff;
return *this;
}
Options& set_multiplier(double multiplier) {
multiplier_ = multiplier;
return *this;
}
Options& set_jitter(double jitter) {
jitter_ = jitter;
return *this;
}
Options& set_max_backoff(grpc_millis max_backoff) {
max_backoff_ = max_backoff;
return *this;
}
grpc_millis initial_backoff() const { return initial_backoff_; }
double multiplier() const { return multiplier_; }
double jitter() const { return jitter_; }
grpc_millis max_backoff() const { return max_backoff_; }
private:
grpc_millis initial_backoff_;
double multiplier_;
double jitter_;
grpc_millis max_backoff_;
};
private:
const Options options_;
uint32_t rng_state_;
bool initial_;
grpc_millis current_backoff_;
};
} #endif