Add TCP tracing to chaotic good transport. PiperOrigin-RevId: 685956496
diff --git a/src/core/BUILD b/src/core/BUILD index c1482a1..38b1050 100644 --- a/src/core/BUILD +++ b/src/core/BUILD
@@ -8010,6 +8010,8 @@ "chaotic_good_transport", "context", "event_engine_context", + "event_engine_extensions", + "event_engine_query_extensions", "for_each", "grpc_promise_endpoint", "if",
diff --git a/src/core/ext/transport/chaotic_good/client_transport.cc b/src/core/ext/transport/chaotic_good/client_transport.cc index 3d58519..33fb467 100644 --- a/src/core/ext/transport/chaotic_good/client_transport.cc +++ b/src/core/ext/transport/chaotic_good/client_transport.cc
@@ -36,6 +36,8 @@ #include "src/core/ext/transport/chaotic_good/frame_header.h" #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" #include "src/core/lib/event_engine/event_engine_context.h" +#include "src/core/lib/event_engine/extensions/tcp_trace.h" +#include "src/core/lib/event_engine/query_extensions.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/promise/loop.h" #include "src/core/lib/promise/map.h" @@ -199,6 +201,15 @@ ->memory_quota() ->CreateMemoryAllocator("chaotic-good")), outgoing_frames_(4) { + // Set up TCP tracer if enabled. + if (args.GetBool(GRPC_ARG_TCP_TRACING_ENABLED).value_or(false)) { + auto* epte = grpc_event_engine::experimental::QueryExtension< + grpc_event_engine::experimental::TcpTraceExtension>( + data_endpoint.GetEventEngineEndpoint().get()); + if (epte != nullptr) { + epte->InitializeAndReturnTcpTracer(); + } + } auto transport = MakeRefCounted<ChaoticGoodTransport>( std::move(control_endpoint), std::move(data_endpoint), std::move(hpack_parser), std::move(hpack_encoder));
diff --git a/src/core/lib/transport/promise_endpoint.h b/src/core/lib/transport/promise_endpoint.h index 18af1a7..02033d9 100644 --- a/src/core/lib/transport/promise_endpoint.h +++ b/src/core/lib/transport/promise_endpoint.h
@@ -258,6 +258,11 @@ const grpc_event_engine::experimental::EventEngine::ResolvedAddress& GetLocalAddress() const; + std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint> + GetEventEngineEndpoint() const { + return endpoint_; + } + private: std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint> endpoint_;