flow_control.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_H
20 #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_H
21 
23 
24 #include <stdint.h>
25 
26 #include <iosfwd>
27 #include <string>
28 
29 #include "absl/functional/function_ref.h"
30 #include "absl/status/status.h"
31 #include "absl/types/optional.h"
32 #include "absl/utility/utility.h"
33 
34 #include <grpc/support/log.h>
35 
41 
43 
44 namespace grpc {
45 namespace testing {
46 class TrickledCHTTP2; // to make this a friend
47 } // namespace testing
48 } // namespace grpc
49 
50 namespace grpc_core {
51 namespace chttp2 {
52 
53 static constexpr uint32_t kDefaultWindow = 65535;
54 static constexpr uint32_t kDefaultFrameSize = 16384;
55 static constexpr int64_t kMaxWindow = static_cast<int64_t>((1u << 31) - 1);
56 // TODO(ncteisen): Tune this
57 static constexpr uint32_t kFrameSize = 1024 * 1024;
58 static constexpr const uint32_t kMinInitialWindowSize = 128;
59 static constexpr const uint32_t kMaxInitialWindowSize = (1u << 30);
60 // The maximum per-stream flow control window delta to advertise.
61 static constexpr const int64_t kMaxWindowDelta = (1u << 20);
62 
64 class StreamFlowControl;
65 
67 
68 // Encapsulates a collections of actions the transport needs to take with
69 // regard to flow control. Each action comes with urgencies that tell the
70 // transport how quickly the action must take place.
72  public:
73  enum class Urgency : uint8_t {
74  // Nothing to be done.
75  NO_ACTION_NEEDED = 0,
76  // Initiate a write to update the initial window immediately.
78  // Push the flow control update into a send buffer, to be sent
79  // out the next time a write is initiated.
81  };
82 
87  }
90  }
93 
96  return *this;
97  }
100  return *this;
101  }
103  uint32_t update) {
106  return *this;
107  }
109  uint32_t update) {
112  return *this;
113  }
114 
115  static const char* UrgencyString(Urgency u);
116  std::string DebugString() const;
117 
118  void AssertEmpty() { GPR_ASSERT(*this == FlowControlAction()); }
119 
120  bool operator==(const FlowControlAction& other) const {
121  return send_stream_update_ == other.send_stream_update_ &&
129  }
130 
131  private:
138 };
139 
140 std::ostream& operator<<(std::ostream& out, FlowControlAction::Urgency urgency);
141 std::ostream& operator<<(std::ostream& out, const FlowControlAction& action);
142 
143 // Implementation of flow control that abides to HTTP/2 spec and attempts
144 // to be as performant as possible.
145 class TransportFlowControl final {
146  public:
147  explicit TransportFlowControl(const char* name, bool enable_bdp_probe,
148  MemoryOwner* memory_owner);
150 
151  bool bdp_probe() const { return enable_bdp_probe_; }
152 
153  // returns an announce if we should send a transport update to our peer,
154  // else returns zero; writing_anyway indicates if a write would happen
155  // regardless of the send - if it is false and this function returns non-zero,
156  // this announce will cause a write to occur
157  uint32_t MaybeSendUpdate(bool writing_anyway);
158 
159  // Track an update to the incoming flow control counters - that is how many
160  // tokens we report to our peer that we're willing to accept.
161  // Instantiators *must* call MakeAction before destruction of this value.
163  public:
166 
169 
170  // Reads the flow control data and returns an actionable struct that will
171  // tell chttp2 exactly what it needs to do
173  return absl::exchange(tfc_, nullptr)->UpdateAction(FlowControlAction());
174  }
175 
176  // Notify of data receipt. Returns OkStatus if the data was accepted,
177  // else an error status if the connection should be closed.
179  int64_t incoming_frame_size, absl::FunctionRef<absl::Status()> stream =
180  []() { return absl::OkStatus(); });
181 
182  // Update a stream announce window delta, keeping track of how much total
183  // positive delta is present on the transport.
185  if (change == 0) return;
186  if (*delta > 0) {
188  }
189  *delta += change;
190  if (*delta > 0) {
192  }
193  }
194 
195  private:
197  };
198 
199  // Track an update to the outgoing flow control counters - that is how many
200  // tokens our peer has said we can send.
202  public:
205 
206  // we have received a WINDOW_UPDATE frame for a transport
208 
209  // Finish the update and check whether we became stalled or unstalled.
211  bool is_stalled = tfc_->remote_window_ <= 0;
212  if (is_stalled != was_stalled_) {
213  return is_stalled ? StallEdge::kStalled : StallEdge::kUnstalled;
214  } else {
215  return StallEdge::kNoChange;
216  }
217  }
218 
219  private:
221  const bool was_stalled_ = tfc_->remote_window_ <= 0;
222  };
223 
224  // Call periodically (at a low-ish rate, 100ms - 10s makes sense)
225  // to perform more complex flow control calculations and return an action
226  // to let chttp2 change its parameters
228 
229  int64_t target_window() const;
231 
233 
235 
237 
238  // Getters
241 
244  }
245 
247  if (delta > 0) {
249  }
250  }
251 
252  private:
253  double TargetLogBdp();
254  double SmoothLogBdp(double value);
255  static void UpdateSetting(int64_t* desired_value, int64_t new_desired_value,
259 
261 
263 
273 
275  const bool enable_bdp_probe_;
276 
277  /* bdp estimation */
279 
280  /* pid controller */
283 
289 };
290 
291 // Implementation of flow control that abides to HTTP/2 spec and attempts
292 // to be as performant as possible.
293 class StreamFlowControl final {
294  public:
298  }
299 
300  // Track an update to the incoming flow control counters - that is how many
301  // tokens we report to our peer that we're willing to accept.
302  // Instantiators *must* call MakeAction before destruction of this value.
304  public:
306  : tfc_upd_(sfc->tfc_), sfc_(sfc) {}
307 
310  }
311 
312  // we have received data from the wire
313  absl::Status RecvData(int64_t incoming_frame_size);
314 
315  // the application is asking for a certain amount of bytes
318  }
319 
320  void SetPendingSize(int64_t pending_size);
321 
322  private:
325  };
326 
327  // Track an update to the outgoing flow control counters - that is how many
328  // tokens our peer has said we can send.
330  public:
332  : tfc_upd_(sfc->tfc_), sfc_(sfc) {}
333  // we have received a WINDOW_UPDATE frame for a stream
335  // we have sent data on the wire, we must track this in our bookkeeping for
336  // the remote peer's flow control.
337  void SentData(int64_t outgoing_frame_size) {
338  tfc_upd_.StreamSentData(outgoing_frame_size);
339  sfc_->remote_window_delta_ -= outgoing_frame_size;
340  }
341 
342  private:
345  };
346 
347  // returns an announce if we should send a stream update to our peer, else
348  // returns zero
350 
354 
355  private:
361 
364 };
365 
367  public:
370  double current_target) = 0;
371 };
372 
373 extern TestOnlyTransportTargetWindowEstimatesMocker*
375 
376 } // namespace chttp2
377 } // namespace grpc_core
378 
379 #endif // GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_H
grpc_flowctl_trace
grpc_core::TraceFlag grpc_flowctl_trace
trace.h
grpc_core::MemoryOwner
Definition: memory_quota.h:381
grpc_core::chttp2::StallEdge::kStalled
@ kStalled
grpc_core::chttp2::StreamFlowControl::min_progress_size
uint32_t min_progress_size() const
Definition: flow_control.h:353
grpc_core::chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY
@ UPDATE_IMMEDIATELY
grpc_core::chttp2::TransportFlowControl::announced_stream_total_over_incoming_window_
int64_t announced_stream_total_over_incoming_window_
Definition: flow_control.h:272
testing
Definition: aws_request_signer_test.cc:25
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
grpc_core::chttp2::FlowControlAction::AssertEmpty
void AssertEmpty()
Definition: flow_control.h:118
log.h
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::tfc_upd_
TransportFlowControl::IncomingUpdateContext tfc_upd_
Definition: flow_control.h:323
grpc_core::chttp2::FlowControlAction::initial_window_size_
uint32_t initial_window_size_
Definition: flow_control.h:136
grpc_core::chttp2::TransportFlowControl::last_pid_update_
Timestamp last_pid_update_
Definition: flow_control.h:282
grpc
Definition: grpcpp/alarm.h:33
grpc_core::chttp2::FlowControlAction::Urgency::QUEUE_UPDATE
@ QUEUE_UPDATE
grpc_core::chttp2::FlowControlAction::send_stream_update_
Urgency send_stream_update_
Definition: flow_control.h:132
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::SetPendingSize
void SetPendingSize(int64_t pending_size)
Definition: flow_control.cc:307
grpc_core::chttp2::TransportFlowControl::target_frame_size_
int64_t target_frame_size_
Definition: flow_control.h:286
grpc_core::chttp2::FlowControlAction::set_send_transport_update
FlowControlAction & set_send_transport_update(Urgency u)
Definition: flow_control.h:98
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::chttp2::StreamFlowControl::DesiredAnnounceSize
uint32_t DesiredAnnounceSize() const
Definition: flow_control.cc:276
grpc_core::chttp2::TransportFlowControl::UpdateAction
FlowControlAction UpdateAction(FlowControlAction action)
Definition: flow_control.cc:174
grpc_core::chttp2::FlowControlAction::send_transport_update
Urgency send_transport_update() const
Definition: flow_control.h:84
grpc_core::Timestamp
Definition: src/core/lib/gprpp/time.h:62
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_core::chttp2::kMaxInitialWindowSize
static constexpr const uint32_t kMaxInitialWindowSize
Definition: flow_control.h:59
grpc_core::chttp2::FlowControlAction::send_max_frame_size_update
Urgency send_max_frame_size_update() const
Definition: flow_control.h:88
absl::OkStatus
Status OkStatus()
Definition: third_party/abseil-cpp/absl/status/status.h:882
grpc_core::chttp2::TransportFlowControl::target_window
int64_t target_window() const
Definition: flow_control.cc:165
u
OPENSSL_EXPORT pem_password_cb void * u
Definition: pem.h:351
grpc_core::chttp2::TransportFlowControl::~TransportFlowControl
~TransportFlowControl()
Definition: flow_control.h:149
grpc_core::chttp2::TransportFlowControl::announced_window
int64_t announced_window() const
Definition: flow_control.h:240
grpc_core::chttp2::kDefaultWindow
static constexpr uint32_t kDefaultWindow
Definition: flow_control.h:53
setup.name
name
Definition: setup.py:542
grpc_core::chttp2::FlowControlAction::max_frame_size
uint32_t max_frame_size() const
Definition: flow_control.h:92
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::IncomingUpdateContext
IncomingUpdateContext(StreamFlowControl *sfc)
Definition: flow_control.h:305
grpc_core::chttp2::FlowControlAction::Urgency::NO_ACTION_NEEDED
@ NO_ACTION_NEEDED
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
grpc_core::chttp2::TransportFlowControl::memory_owner_
MemoryOwner *const memory_owner_
Definition: flow_control.h:262
grpc_core::chttp2::TransportFlowControl::acked_init_window_
uint32_t acked_init_window_
Definition: flow_control.h:288
grpc_core::chttp2::TransportFlowControl::SmoothLogBdp
double SmoothLogBdp(double value)
Definition: flow_control.cc:205
grpc_core::chttp2::TransportFlowControl::RemoveAnnouncedWindowDelta
void RemoveAnnouncedWindowDelta(int64_t delta)
Definition: flow_control.h:246
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::sfc_
StreamFlowControl *const sfc_
Definition: flow_control.h:324
grpc_core::chttp2::FlowControlAction::send_initial_window_update
Urgency send_initial_window_update() const
Definition: flow_control.h:85
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::MakeAction
FlowControlAction MakeAction()
Definition: flow_control.h:308
grpc_core::chttp2::FlowControlAction::max_frame_size_
uint32_t max_frame_size_
Definition: flow_control.h:137
grpc_core::chttp2::TransportFlowControl::remote_window_
int64_t remote_window_
Definition: flow_control.h:284
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext::sfc_
StreamFlowControl *const sfc_
Definition: flow_control.h:344
grpc_core::chttp2::TransportFlowControl::PeriodicUpdate
FlowControlAction PeriodicUpdate()
Definition: flow_control.cc:229
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext::SentData
void SentData(int64_t outgoing_frame_size)
Definition: flow_control.h:337
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext
Definition: flow_control.h:201
grpc_core::chttp2::StreamFlowControl::announced_window_delta_
int64_t announced_window_delta_
Definition: flow_control.h:359
grpc_core::chttp2::TransportFlowControl::TargetLogBdp
double TargetLogBdp()
Definition: flow_control.cc:199
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_core::chttp2::kMinInitialWindowSize
static constexpr const uint32_t kMinInitialWindowSize
Definition: flow_control.h:58
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
grpc_core::chttp2::TransportFlowControl
Definition: flow_control.h:145
grpc_core::chttp2::TransportFlowControl::target_initial_window_size_
int64_t target_initial_window_size_
Definition: flow_control.h:285
grpc_core::chttp2::FlowControlAction::send_max_frame_size_update_
Urgency send_max_frame_size_update_
Definition: flow_control.h:135
grpc_core::chttp2::FlowControlAction::set_send_stream_update
FlowControlAction & set_send_stream_update(Urgency u)
Definition: flow_control.h:94
grpc_core::chttp2::FlowControlAction::operator==
bool operator==(const FlowControlAction &other) const
Definition: flow_control.h:120
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext
Definition: flow_control.h:303
grpc_core::chttp2::StreamFlowControl::UpdateAction
FlowControlAction UpdateAction(FlowControlAction action)
Definition: flow_control.cc:293
grpc_core::chttp2::TransportFlowControl::target_frame_size
int64_t target_frame_size() const
Definition: flow_control.h:230
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::StreamSentData
void StreamSentData(int64_t size)
Definition: flow_control.h:204
grpc_core::chttp2::TransportFlowControl::TransportFlowControl
TransportFlowControl(const char *name, bool enable_bdp_probe, MemoryOwner *memory_owner)
Definition: flow_control.cc:101
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::SetMinProgressSize
void SetMinProgressSize(uint32_t min_progress_size)
Definition: flow_control.h:316
grpc_core::chttp2::StreamFlowControl::remote_window_delta_
int64_t remote_window_delta_
Definition: flow_control.h:358
grpc_core::chttp2::FlowControlAction::send_transport_update_
Urgency send_transport_update_
Definition: flow_control.h:133
grpc_core::chttp2::StallEdge::kUnstalled
@ kUnstalled
absl::optional< int64_t >
grpc_core::chttp2::TestOnlyTransportTargetWindowEstimatesMocker::ComputeNextTargetInitialWindowSizeFromPeriodicUpdate
virtual double ComputeNextTargetInitialWindowSizeFromPeriodicUpdate(double current_target)=0
grpc_core::chttp2::FlowControlAction::send_initial_window_update_
Urgency send_initial_window_update_
Definition: flow_control.h:134
grpc_core::chttp2::TestOnlyTransportTargetWindowEstimatesMocker::~TestOnlyTransportTargetWindowEstimatesMocker
virtual ~TestOnlyTransportTargetWindowEstimatesMocker()
Definition: flow_control.h:368
time.h
grpc_core::chttp2::TransportFlowControl::remote_window
int64_t remote_window() const
Definition: flow_control.h:239
grpc_core::chttp2::kMaxWindowDelta
static constexpr const int64_t kMaxWindowDelta
Definition: flow_control.h:61
grpc_core::chttp2::FlowControlAction::set_send_initial_window_update
FlowControlAction & set_send_initial_window_update(Urgency u, uint32_t update)
Definition: flow_control.h:102
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext::RecvUpdate
void RecvUpdate(uint32_t size)
Definition: flow_control.h:334
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::RecvData
absl::Status RecvData(int64_t incoming_frame_size, absl::FunctionRef< absl::Status()> stream=[]() { return absl::OkStatus();})
Definition: flow_control.cc:152
grpc_core::chttp2::operator<<
std::ostream & operator<<(std::ostream &out, FlowControlAction::Urgency u)
Definition: flow_control.cc:70
grpc_core::chttp2::FlowControlAction::DebugString
std::string DebugString() const
Definition: flow_control.cc:74
grpc_core::chttp2::FlowControlAction
Definition: flow_control.h:71
grpc_core::chttp2::TransportFlowControl::MaybeSendUpdate
uint32_t MaybeSendUpdate(bool writing_anyway)
Definition: flow_control.cc:117
grpc_core::chttp2::StreamFlowControl::announced_window_delta
int64_t announced_window_delta() const
Definition: flow_control.h:352
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::OutgoingUpdateContext
OutgoingUpdateContext(TransportFlowControl *tfc)
Definition: flow_control.h:203
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::Finish
StallEdge Finish()
Definition: flow_control.h:210
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::operator=
IncomingUpdateContext & operator=(const IncomingUpdateContext &)=delete
grpc_core::chttp2::g_test_only_transport_target_window_estimates_mocker
TestOnlyTransportTargetWindowEstimatesMocker * g_test_only_transport_target_window_estimates_mocker
Definition: flow_control.cc:48
stdint.h
grpc_core::chttp2::TransportFlowControl::pid_controller_
PidController pid_controller_
Definition: flow_control.h:281
bdp_estimator.h
grpc_core::TraceFlag
Definition: debug/trace.h:63
grpc_core::chttp2::StreamFlowControl
Definition: flow_control.h:293
grpc_core::chttp2::TransportFlowControl::SetAckedInitialWindow
void SetAckedInitialWindow(uint32_t value)
Definition: flow_control.h:236
grpc_core::chttp2::TestOnlyTransportTargetWindowEstimatesMocker
Definition: flow_control.h:366
grpc_core::chttp2::TransportFlowControl::UpdateSetting
static void UpdateSetting(int64_t *desired_value, int64_t new_desired_value, FlowControlAction *action, FlowControlAction &(FlowControlAction::*set)(FlowControlAction::Urgency, uint32_t))
Definition: flow_control.cc:215
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::IncomingUpdateContext
IncomingUpdateContext(TransportFlowControl *tfc)
Definition: flow_control.h:164
value
const char * value
Definition: hpack_parser_table.cc:165
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext::RecvData
absl::Status RecvData(int64_t incoming_frame_size)
Definition: flow_control.cc:133
grpc_core::chttp2::TransportFlowControl::announced_window_
int64_t announced_window_
Definition: flow_control.h:287
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext::OutgoingUpdateContext
OutgoingUpdateContext(StreamFlowControl *sfc)
Definition: flow_control.h:331
grpc_core::chttp2::StreamFlowControl::~StreamFlowControl
~StreamFlowControl()
Definition: flow_control.h:296
grpc_core::chttp2::StallEdge
StallEdge
Definition: flow_control.h:66
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::~IncomingUpdateContext
~IncomingUpdateContext()
Definition: flow_control.h:165
client.action
action
Definition: examples/python/xds/client.py:49
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext
Definition: flow_control.h:162
grpc_core::chttp2::kDefaultFrameSize
static constexpr uint32_t kDefaultFrameSize
Definition: flow_control.h:54
grpc_core::chttp2::TransportFlowControl::enable_bdp_probe_
const bool enable_bdp_probe_
Definition: flow_control.h:275
grpc_core::chttp2::StreamFlowControl::tfc_
TransportFlowControl *const tfc_
Definition: flow_control.h:356
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::UpdateAnnouncedWindowDelta
void UpdateAnnouncedWindowDelta(int64_t *delta, int64_t change)
Definition: flow_control.h:184
absl::Status
Definition: third_party/abseil-cpp/absl/status/status.h:424
grpc_core::chttp2::StreamFlowControl::min_progress_size_
int64_t min_progress_size_
Definition: flow_control.h:357
grpc_core::PidController
Definition: pid_controller.h:35
grpc_core::chttp2::FlowControlAction::UrgencyString
static const char * UrgencyString(Urgency u)
Definition: flow_control.cc:56
grpc_core::chttp2::FlowControlAction::Urgency
Urgency
Definition: flow_control.h:73
cpp.gmock_class.set
set
Definition: bloaty/third_party/googletest/googlemock/scripts/generator/cpp/gmock_class.py:44
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::was_stalled_
const bool was_stalled_
Definition: flow_control.h:221
grpc_core::chttp2::StreamFlowControl::remote_window_delta
int64_t remote_window_delta() const
Definition: flow_control.h:351
grpc_core::chttp2::TransportFlowControl::bdp_estimator_
BdpEstimator bdp_estimator_
Definition: flow_control.h:278
grpc_core::chttp2::FlowControlAction::set_send_max_frame_size_update
FlowControlAction & set_send_max_frame_size_update(Urgency u, uint32_t update)
Definition: flow_control.h:108
memory_quota.h
absl::FunctionRef
Definition: abseil-cpp/absl/functional/function_ref.h:65
grpc_core::chttp2::FlowControlAction::send_stream_update
Urgency send_stream_update() const
Definition: flow_control.h:83
grpc_core::chttp2::StreamFlowControl::StreamFlowControl
StreamFlowControl(TransportFlowControl *tfc)
Definition: flow_control.cc:131
pid_controller.h
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::tfc_
TransportFlowControl * tfc_
Definition: flow_control.h:220
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::MakeAction
FlowControlAction MakeAction()
Definition: flow_control.h:172
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext
Definition: flow_control.h:329
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext::tfc_
TransportFlowControl * tfc_
Definition: flow_control.h:196
grpc_core::chttp2::TransportFlowControl::OutgoingUpdateContext::RecvUpdate
void RecvUpdate(uint32_t size)
Definition: flow_control.h:207
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc_core::chttp2::kFrameSize
static constexpr uint32_t kFrameSize
Definition: flow_control.h:57
grpc_core::chttp2::StallEdge::kNoChange
@ kNoChange
grpc_core::chttp2::FlowControlAction::initial_window_size
uint32_t initial_window_size() const
Definition: flow_control.h:91
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext::tfc_upd_
TransportFlowControl::OutgoingUpdateContext tfc_upd_
Definition: flow_control.h:343
grpc_core::chttp2::TransportFlowControl::bdp_estimator
BdpEstimator * bdp_estimator()
Definition: flow_control.h:232
update
absl::optional< XdsClusterResource > update
Definition: cds.cc:150
grpc_core::chttp2::TransportFlowControl::announced_stream_total_over_incoming_window
int64_t announced_stream_total_over_incoming_window() const
Definition: flow_control.h:242
grpc_core::chttp2::StreamFlowControl::MaybeSendUpdate
uint32_t MaybeSendUpdate()
Definition: flow_control.cc:266
grpc_core::chttp2::TransportFlowControl::acked_init_window
uint32_t acked_init_window() const
Definition: flow_control.h:234
absl::exchange
T exchange(T &obj, U &&new_value)
Definition: abseil-cpp/absl/utility/utility.h:314
grpc_core::BdpEstimator
Definition: bdp_estimator.h:37
grpc_core::chttp2::StreamFlowControl::pending_size_
absl::optional< int64_t > pending_size_
Definition: flow_control.h:360
grpc_core::chttp2::TransportFlowControl::bdp_probe
bool bdp_probe() const
Definition: flow_control.h:151
port_platform.h
grpc_core::chttp2::kMaxWindow
static constexpr int64_t kMaxWindow
Definition: flow_control.h:55
stream
voidpf stream
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:22