Skip to content
Snippets Groups Projects
Commit 8dbc4734 authored by David G. Quintas's avatar David G. Quintas
Browse files

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

Cache encodings accepted by peer on mdelem
parents 665fbecc 42cc378a
No related branches found
No related tags found
No related merge requests found
...@@ -539,12 +539,24 @@ grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm( ...@@ -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( ...@@ -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, ...@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment