|
|
|
@ -32,6 +32,7 @@ |
|
|
|
|
#include "src/core/lib/debug/stats.h" |
|
|
|
|
#include "src/core/lib/iomgr/iomgr.h" |
|
|
|
|
#include "src/core/lib/slice/slice_internal.h" |
|
|
|
|
#include "src/core/lib/support/manual_constructor.h" |
|
|
|
|
#include "src/core/lib/support/memory.h" |
|
|
|
|
#include "src/core/lib/support/object_registry.h" |
|
|
|
|
#include "src/core/lib/support/string.h" |
|
|
|
@ -63,7 +64,7 @@ struct grpc_channel { |
|
|
|
|
gpr_mu registered_call_mu; |
|
|
|
|
registered_call* registered_calls; |
|
|
|
|
|
|
|
|
|
grpc_core::ChannelTracer* tracer; |
|
|
|
|
grpc_core::ManualConstructor<grpc_core::ChannelTracer> tracer; |
|
|
|
|
|
|
|
|
|
char* target; |
|
|
|
|
}; |
|
|
|
@ -103,7 +104,7 @@ grpc_channel* grpc_channel_create_with_builder( |
|
|
|
|
memset(channel, 0, sizeof(*channel)); |
|
|
|
|
channel->target = target; |
|
|
|
|
channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type); |
|
|
|
|
channel->tracer = nullptr; |
|
|
|
|
bool tracer_initialized = false; |
|
|
|
|
gpr_mu_init(&channel->registered_call_mu); |
|
|
|
|
channel->registered_calls = nullptr; |
|
|
|
|
|
|
|
|
@ -195,15 +196,13 @@ grpc_channel* grpc_channel_create_with_builder( |
|
|
|
|
0x1; /* always support no compression */ |
|
|
|
|
} else if (0 == |
|
|
|
|
strcmp(args->args[i].key, GRPC_ARG_CHANNEL_TRACING_MAX_NODES)) { |
|
|
|
|
GPR_ASSERT(channel->tracer == nullptr); |
|
|
|
|
GPR_ASSERT(!tracer_initialized); |
|
|
|
|
tracer_initialized = true; |
|
|
|
|
// max_nodes defaults to 10, clamped between 0 and 100.
|
|
|
|
|
const grpc_integer_options options = {10, 0, 100}; |
|
|
|
|
size_t max_nodes = |
|
|
|
|
(size_t)grpc_channel_arg_get_integer(&args->args[i], options); |
|
|
|
|
if (max_nodes > 0) { |
|
|
|
|
channel->tracer = grpc_core::New<grpc_core::ChannelTracer>( |
|
|
|
|
max_nodes); // TODO(ncteisen): leaky yo
|
|
|
|
|
} |
|
|
|
|
channel->tracer.Init(max_nodes); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -214,7 +213,7 @@ grpc_channel* grpc_channel_create_with_builder( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
char* grpc_channel_get_trace(grpc_channel* channel, bool recursive) { |
|
|
|
|
return channel->tracer ? channel->tracer->RenderTrace(recursive) : nullptr; |
|
|
|
|
return channel->tracer->RenderTrace(recursive); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_channel* grpc_channel_create(const char* target, |
|
|
|
|