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_;