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,