aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-01-27 06:51:09 -0800
committerGravatar Craig Tiller <ctiller@google.com>2017-01-27 06:51:09 -0800
commit277eb9ea3ba6059873cf6b5cede2fc3306c14bae (patch)
tree8aa073818c3acb551dae390f208dfb75d9814334 /src
parent52e5f68f87fcc05d84be55d88afc6bfe146d36e6 (diff)
Be more lazy about stream flow control updates
Diffstat (limited to 'src')
-rw-r--r--src/core/ext/transport/chttp2/transport/parsing.c7
-rw-r--r--src/core/ext/transport/chttp2/transport/writing.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 4373391e44..08472a46ab 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -375,9 +375,14 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
return err;
}
+ uint32_t target_incoming_window = GPR_MAX(
+ t->settings[GRPC_SENT_SETTINGS][GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
+ 1024);
GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", t, incoming_window,
incoming_frame_size);
- grpc_chttp2_initiate_write(exec_ctx, t, false, "flow_control");
+ if (t->incoming_window < target_incoming_window / 2) {
+ grpc_chttp2_initiate_write(exec_ctx, t, false, "flow_control");
+ }
if (s != NULL) {
if (incoming_frame_size >
diff --git a/src/core/ext/transport/chttp2/transport/writing.c b/src/core/ext/transport/chttp2/transport/writing.c
index 3f25eca239..5df979d59a 100644
--- a/src/core/ext/transport/chttp2/transport/writing.c
+++ b/src/core/ext/transport/chttp2/transport/writing.c
@@ -295,7 +295,10 @@ bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx,
uint32_t target_incoming_window = GPR_MAX(
t->settings[GRPC_SENT_SETTINGS][GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
1024);
- if (t->incoming_window < 3 * target_incoming_window / 4) {
+ uint32_t threshold_to_send_transport_window_update =
+ t->outbuf.count > 0 ? target_incoming_window
+ : 3 * target_incoming_window / 4;
+ if (t->incoming_window < threshold_to_send_transport_window_update) {
maybe_initiate_ping(exec_ctx, t,
GRPC_CHTTP2_PING_BEFORE_TRANSPORT_WINDOW_UPDATE);
uint32_t announced = (uint32_t)GPR_CLAMP(