Merge pull request #3767 from ctiller/cache-accept-enc

Cache encodings accepted by peer on mdelem
pull/3858/head
David G. Quintas 9 years ago
commit 8dbc4734d8
  1. 24
      src/core/surface/call.c

@ -539,12 +539,24 @@ grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
return algorithm; return algorithm;
} }
static void set_encodings_accepted_by_peer( static void destroy_encodings_accepted_by_peer(void *p) { return; }
grpc_call *call, const gpr_slice accept_encoding_slice) {
static void set_encodings_accepted_by_peer(grpc_call *call, grpc_mdelem *mdel) {
size_t i; size_t i;
grpc_compression_algorithm algorithm; grpc_compression_algorithm algorithm;
gpr_slice_buffer accept_encoding_parts; gpr_slice_buffer accept_encoding_parts;
gpr_slice accept_encoding_slice;
void *accepted_user_data;
accepted_user_data =
grpc_mdelem_get_user_data(mdel, destroy_encodings_accepted_by_peer);
if (accepted_user_data != NULL) {
call->encodings_accepted_by_peer =
(gpr_uint32)(((gpr_uintptr)accepted_user_data) - 1);
return;
}
accept_encoding_slice = mdel->value->slice;
gpr_slice_buffer_init(&accept_encoding_parts); gpr_slice_buffer_init(&accept_encoding_parts);
gpr_slice_split(accept_encoding_slice, ",", &accept_encoding_parts); gpr_slice_split(accept_encoding_slice, ",", &accept_encoding_parts);
@ -568,6 +580,12 @@ static void set_encodings_accepted_by_peer(
gpr_free(accept_encoding_entry_str); gpr_free(accept_encoding_entry_str);
} }
} }
gpr_slice_buffer_destroy(&accept_encoding_parts);
grpc_mdelem_set_user_data(
mdel, destroy_encodings_accepted_by_peer,
(void *)(((gpr_uintptr)call->encodings_accepted_by_peer) + 1));
} }
gpr_uint32 grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call *call) { gpr_uint32 grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call *call) {
@ -1549,7 +1567,7 @@ static void recv_metadata(grpc_exec_ctx *exec_ctx, grpc_call *call,
} else if (key == grpc_channel_get_encodings_accepted_by_peer_string( } else if (key == grpc_channel_get_encodings_accepted_by_peer_string(
call->channel)) { call->channel)) {
GPR_TIMER_BEGIN("encodings_accepted_by_peer", 0); GPR_TIMER_BEGIN("encodings_accepted_by_peer", 0);
set_encodings_accepted_by_peer(call, mdel->value->slice); set_encodings_accepted_by_peer(call, mdel);
GPR_TIMER_END("encodings_accepted_by_peer", 0); GPR_TIMER_END("encodings_accepted_by_peer", 0);
} else { } else {
GPR_TIMER_BEGIN("report_up", 0); GPR_TIMER_BEGIN("report_up", 0);

Loading…
Cancel
Save