19 #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_H
20 #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_H
46 static constexpr uint32_t kDefaultWindow = 65535;
47 static constexpr int64_t kMaxWindow =
static_cast<int64_t
>((1u << 31) - 1);
49 static constexpr uint32_t kFrameSize = 1024 * 1024;
51 class TransportFlowControl;
52 class StreamFlowControl;
72 return send_initial_window_update_;
75 return send_max_frame_size_update_;
81 send_stream_update_ = u;
85 send_transport_update_ = u;
90 send_initial_window_update_ = u;
91 initial_window_size_ =
update;
96 send_max_frame_size_update_ = u;
109 uint32_t initial_window_size_ = 0;
110 uint32_t max_frame_size_ = 0;
117 if (enabled_) Init(reason, tfc, sfc);
121 if (enabled_) Finish();
134 int64_t remote_window_;
135 int64_t target_window_;
136 int64_t announced_window_;
137 int64_t remote_window_delta_;
138 int64_t local_window_delta_;
139 int64_t announced_window_delta_;
191 friend class ::grpc::testing::TrickledCHTTP2;
271 return static_cast<uint32_t
> GPR_MIN(
272 (int64_t)((1u << 31) - 1),
273 announced_stream_total_over_incoming_window_ +
281 announced_stream_total_over_incoming_window_ -= delta;
287 announced_stream_total_over_incoming_window_ += delta;
299 double TargetLogBdp();
300 double SmoothLogBdp(
double value);
322 int64_t announced_stream_total_over_incoming_window_ = 0;
325 const bool enable_bdp_probe_;
381 friend class ::grpc::testing::TrickledCHTTP2;
423 void SentData(int64_t outgoing_frame_size)
override {
444 size_t have_already)
override;
473 double current_target) = 0;
absl::optional< XdsApi::CdsUpdate > update
Definition: cds.cc:114
Definition: bdp_estimator.h:38
Definition: pid_controller.h:35
Definition: flow_control.h:57
FlowControlAction & set_send_max_frame_size_update(Urgency u, uint32_t update)
Definition: flow_control.h:94
uint32_t max_frame_size() const
Definition: flow_control.h:78
FlowControlAction & set_send_initial_window_update(Urgency u, uint32_t update)
Definition: flow_control.h:88
uint32_t initial_window_size() const
Definition: flow_control.h:77
Urgency send_stream_update() const
Definition: flow_control.h:69
Urgency send_max_frame_size_update() const
Definition: flow_control.h:74
FlowControlAction & set_send_stream_update(Urgency u)
Definition: flow_control.h:80
static const char * UrgencyString(Urgency u)
Definition: flow_control.cc:128
FlowControlAction & set_send_transport_update(Urgency u)
Definition: flow_control.h:84
Urgency
Definition: flow_control.h:59
Urgency send_transport_update() const
Definition: flow_control.h:70
void Trace(grpc_chttp2_transport *t) const
Definition: flow_control.cc:142
Urgency send_initial_window_update() const
Definition: flow_control.h:71
Definition: flow_control.h:113
~FlowControlTrace()
Definition: flow_control.h:120
FlowControlTrace(const char *reason, TransportFlowControl *tfc, StreamFlowControl *sfc)
Definition: flow_control.h:115
Definition: flow_control.h:337
int64_t local_window_delta()
Definition: flow_control.h:377
StreamFlowControlBase()
Definition: flow_control.h:339
virtual FlowControlAction UpdateAction(FlowControlAction)
Definition: flow_control.h:343
virtual void SentData(int64_t)=0
virtual void IncomingByteStreamUpdate(size_t, size_t)
Definition: flow_control.h:366
virtual ~StreamFlowControlBase()
Definition: flow_control.h:340
virtual uint32_t MaybeSendUpdate()=0
int64_t announced_window_delta()
Definition: flow_control.h:378
virtual grpc_error_handle RecvData(int64_t)=0
int64_t remote_window_delta()
Definition: flow_control.h:376
virtual void RecvUpdate(uint32_t)=0
int64_t announced_window_delta_
Definition: flow_control.h:384
virtual void TestOnlyForceHugeWindow()
Definition: flow_control.h:373
int64_t local_window_delta_
Definition: flow_control.h:383
virtual FlowControlAction MakeAction()=0
int64_t remote_window_delta_
Definition: flow_control.h:382
Definition: flow_control.h:391
void SentData(int64_t) override
Definition: flow_control.h:397
FlowControlAction MakeAction() override
Definition: flow_control.h:396
FlowControlAction UpdateAction(FlowControlAction action) override
Definition: flow_control.h:393
void RecvUpdate(uint32_t) override
Definition: flow_control.h:402
void IncomingByteStreamUpdate(size_t, size_t) override
Definition: flow_control.h:403
grpc_error_handle RecvData(int64_t) override
Definition: flow_control.h:398
uint32_t MaybeSendUpdate() override
Definition: flow_control.h:401
Definition: flow_control.h:409
FlowControlAction MakeAction() override
Definition: flow_control.h:417
StreamFlowControl(TransportFlowControl *tfc, const grpc_chttp2_stream *s)
Definition: flow_control.cc:218
int64_t local_window_delta() const
Definition: flow_control.h:447
int64_t remote_window_delta() const
Definition: flow_control.h:446
~StreamFlowControl() override
Definition: flow_control.h:412
void SentData(int64_t outgoing_frame_size) override
Definition: flow_control.h:423
grpc_error_handle RecvData(int64_t incoming_frame_size) override
Definition: flow_control.cc:222
void RecvUpdate(uint32_t size) override
Definition: flow_control.h:437
uint32_t MaybeSendUpdate() override
Definition: flow_control.cc:265
void IncomingByteStreamUpdate(size_t max_size_hint, size_t have_already) override
Definition: flow_control.cc:276
int64_t announced_window_delta() const
Definition: flow_control.h:448
FlowControlAction UpdateAction(FlowControlAction action) override
Definition: flow_control.cc:392
const grpc_chttp2_stream * stream() const
Definition: flow_control.h:450
void TestOnlyForceHugeWindow() override
Definition: flow_control.h:452
Definition: flow_control.h:469
virtual ~TestOnlyTransportTargetWindowEstimatesMocker()
Definition: flow_control.h:471
virtual double ComputeNextTargetInitialWindowSizeFromPeriodicUpdate(double current_target)=0
Definition: flow_control.h:144
virtual uint32_t MaybeSendUpdate(bool)=0
int64_t announced_window() const
Definition: flow_control.h:184
virtual BdpEstimator * bdp_estimator()
Definition: flow_control.h:179
virtual int64_t target_window() const
Definition: flow_control.h:183
virtual bool flow_control_enabled() const =0
virtual ~TransportFlowControlBase()
Definition: flow_control.h:147
int64_t remote_window() const
Definition: flow_control.h:182
TransportFlowControlBase()
Definition: flow_control.h:146
virtual void TestOnlyForceHugeWindow()
Definition: flow_control.h:188
int64_t target_initial_window_size_
Definition: flow_control.h:193
int64_t announced_window_
Definition: flow_control.h:194
virtual void RecvUpdate(uint32_t)=0
virtual FlowControlAction PeriodicUpdate()=0
virtual grpc_error_handle RecvData(int64_t)=0
int64_t remote_window_
Definition: flow_control.h:192
virtual void StreamSentData(int64_t)=0
virtual FlowControlAction MakeAction()=0
Definition: flow_control.h:201
bool flow_control_enabled() const override
Definition: flow_control.h:206
FlowControlAction PeriodicUpdate() override
Definition: flow_control.h:211
void RecvUpdate(uint32_t) override
Definition: flow_control.h:216
grpc_error_handle RecvData(int64_t) override
Definition: flow_control.h:213
void StreamSentData(int64_t) override
Definition: flow_control.h:212
TransportFlowControlDisabled(grpc_chttp2_transport *t)
Definition: flow_control.cc:158
uint32_t MaybeSendUpdate(bool) override
Definition: flow_control.h:209
FlowControlAction MakeAction() override
Definition: flow_control.h:210
Definition: flow_control.h:221
void RecvUpdate(uint32_t size) override
Definition: flow_control.h:263
void StreamSentData(int64_t size) override
Definition: flow_control.h:247
BdpEstimator * bdp_estimator() override
Definition: flow_control.h:291
void TestOnlyForceHugeWindow() override
Definition: flow_control.h:293
FlowControlAction MakeAction() override
Definition: flow_control.h:238
void PreUpdateAnnouncedWindowOverIncomingWindow(int64_t delta)
Definition: flow_control.h:279
int64_t target_window() const override
Definition: flow_control.h:270
void CommitRecvData(int64_t incoming_frame_size)
Definition: flow_control.h:250
grpc_error_handle ValidateRecvData(int64_t incoming_frame_size)
Definition: flow_control.cc:206
~TransportFlowControl() override
Definition: flow_control.h:224
const grpc_chttp2_transport * transport() const
Definition: flow_control.h:277
grpc_error_handle RecvData(int64_t incoming_frame_size) override
Definition: flow_control.h:254
FlowControlAction PeriodicUpdate() override
Definition: flow_control.cc:354
bool bdp_probe() const
Definition: flow_control.h:228
TransportFlowControl(const grpc_chttp2_transport *t, bool enable_bdp_probe)
Definition: flow_control.cc:177
uint32_t MaybeSendUpdate(bool writing_anyway) override
Definition: flow_control.cc:192
void PostUpdateAnnouncedWindowOverIncomingWindow(int64_t delta)
Definition: flow_control.h:285
bool flow_control_enabled() const override
Definition: flow_control.h:226
#define GRPC_ERROR_NONE
The following "special" errors can be propagated without allocating memory.
Definition: error.h:228
int64_t grpc_millis
Definition: exec_ctx.h:37
grpc_core::TraceFlag grpc_flowctl_trace
grpc_chttp2_setting_id
Definition: http2_settings.h:29
grpc_error_handle error
Definition: lame_client.cc:54
TestOnlyTransportTargetWindowEstimatesMocker * g_test_only_transport_target_window_estimates_mocker
Definition: flow_control.cc:44
Round Robin Policy.
Definition: backend_metric.cc:26
Definition: flow_control.h:37
Definition: internal.h:509
Definition: internal.h:288
Definition: error_internal.h:41
#define GRPC_TRACE_FLAG_ENABLED(f)
Definition: trace.h:112
#define GPR_MIN(a, b)
useful macros that don't belong anywhere else
Definition: useful.h:24
TraceFlag * tracer
Definition: xds_api.cc:907