Fix yperf_client_channel_v2 to work with level-triggered event loops

Note that this does not contain a test; to test under Linux, you'd have to replace QuicLibeventEventLoopFactory::Get() with QuicLibeventEventLoopFactory::GetLevelTriggeredBackendForTests().

PiperOrigin-RevId: 578679462
diff --git a/quiche/quic/tools/quic_client_default_network_helper.cc b/quiche/quic/tools/quic_client_default_network_helper.cc
index 7a2fc5a..f4b0bb2 100644
--- a/quiche/quic/tools/quic_client_default_network_helper.cc
+++ b/quiche/quic/tools/quic_client_default_network_helper.cc
@@ -16,6 +16,15 @@
 
 namespace quic {
 
+std::unique_ptr<QuicPacketWriter> CreateDefaultWriterForEventLoop(
+    SocketFd fd, QuicEventLoop* event_loop) {
+  if (event_loop->SupportsEdgeTriggered()) {
+    return std::make_unique<QuicDefaultPacketWriter>(fd);
+  } else {
+    return std::make_unique<QuicLevelTriggeredPacketWriter>(fd, event_loop);
+  }
+}
+
 QuicClientDefaultNetworkHelper::QuicClientDefaultNetworkHelper(
     QuicEventLoop* event_loop, QuicClientBase* client)
     : event_loop_(event_loop),
@@ -156,11 +165,7 @@
 }
 
 QuicPacketWriter* QuicClientDefaultNetworkHelper::CreateQuicPacketWriter() {
-  if (event_loop_->SupportsEdgeTriggered()) {
-    return new QuicDefaultPacketWriter(GetLatestFD());
-  } else {
-    return new QuicLevelTriggeredPacketWriter(GetLatestFD(), event_loop_);
-  }
+  return CreateDefaultWriterForEventLoop(GetLatestFD(), event_loop_).release();
 }
 
 void QuicClientDefaultNetworkHelper::SetClientPort(int port) {
diff --git a/quiche/quic/tools/quic_client_default_network_helper.h b/quiche/quic/tools/quic_client_default_network_helper.h
index 272a89a..fbc42c2 100644
--- a/quiche/quic/tools/quic_client_default_network_helper.h
+++ b/quiche/quic/tools/quic_client_default_network_helper.h
@@ -11,6 +11,7 @@
 
 #include "absl/types/optional.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
+#include "quiche/quic/core/io/socket.h"
 #include "quiche/quic/core/quic_default_packet_writer.h"
 #include "quiche/quic/core/quic_packet_reader.h"
 #include "quiche/quic/core/quic_udp_socket.h"
@@ -51,6 +52,9 @@
   QuicEventLoop* event_loop_;
 };
 
+std::unique_ptr<QuicPacketWriter> CreateDefaultWriterForEventLoop(
+    SocketFd fd, QuicEventLoop* event_loop);
+
 // An implementation of the QuicClientBase::NetworkHelper interface that is
 // based on the QuicEventLoop API.
 class QuicClientDefaultNetworkHelper : public QuicClientBase::NetworkHelper,