diff options
author | Craig Tiller <ctiller@google.com> | 2017-01-27 06:51:09 -0800 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2017-01-27 06:51:09 -0800 |
commit | 277eb9ea3ba6059873cf6b5cede2fc3306c14bae (patch) | |
tree | 8aa073818c3acb551dae390f208dfb75d9814334 /src/core | |
parent | 52e5f68f87fcc05d84be55d88afc6bfe146d36e6 (diff) |
Be more lazy about stream flow control updates
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/ext/transport/chttp2/transport/parsing.c | 7 | ||||
-rw-r--r-- | src/core/ext/transport/chttp2/transport/writing.c | 5 |
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( |