diff --git a/quiche/quic/test_tools/simulator/actor.cc b/quiche/quic/test_tools/simulator/actor.cc
index 5d28cab..213d861 100644
--- a/quiche/quic/test_tools/simulator/actor.cc
+++ b/quiche/quic/test_tools/simulator/actor.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "quiche/quic/test_tools/simulator/actor.h"
+
 #include "quiche/quic/test_tools/simulator/simulator.h"
 
 namespace quic {
@@ -15,17 +16,13 @@
   simulator_->AddActor(this);
 }
 
-Actor::~Actor() {
-  simulator_->RemoveActor(this);
-}
+Actor::~Actor() { simulator_->RemoveActor(this); }
 
 void Actor::Schedule(QuicTime next_tick) {
   simulator_->Schedule(this, next_tick);
 }
 
-void Actor::Unschedule() {
-  simulator_->Unschedule(this);
-}
+void Actor::Unschedule() { simulator_->Unschedule(this); }
 
 }  // namespace simulator
 }  // namespace quic
diff --git a/quiche/quic/test_tools/simulator/alarm_factory.cc b/quiche/quic/test_tools/simulator/alarm_factory.cc
index 4c9f811..48939b5 100644
--- a/quiche/quic/test_tools/simulator/alarm_factory.cc
+++ b/quiche/quic/test_tools/simulator/alarm_factory.cc
@@ -14,8 +14,7 @@
 // simulation timeline.
 class Alarm : public QuicAlarm {
  public:
-  Alarm(Simulator* simulator,
-        std::string name,
+  Alarm(Simulator* simulator, std::string name,
         QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
       : QuicAlarm(std::move(delegate)), adapter_(simulator, name, this) {}
   ~Alarm() override {}
diff --git a/quiche/quic/test_tools/simulator/link.cc b/quiche/quic/test_tools/simulator/link.cc
index ac2f56c..e2a094b 100644
--- a/quiche/quic/test_tools/simulator/link.cc
+++ b/quiche/quic/test_tools/simulator/link.cc
@@ -14,8 +14,7 @@
 // Parameters for random noise delay.
 const uint64_t kMaxRandomDelayUs = 10;
 
-OneWayLink::OneWayLink(Simulator* simulator,
-                       std::string name,
+OneWayLink::OneWayLink(Simulator* simulator, std::string name,
                        UnconstrainedPortInterface* sink,
                        QuicBandwidth bandwidth,
                        QuicTime::Delta propagation_delay)
@@ -90,34 +89,23 @@
   return delta;
 }
 
-SymmetricLink::SymmetricLink(Simulator* simulator,
-                             std::string name,
+SymmetricLink::SymmetricLink(Simulator* simulator, std::string name,
                              UnconstrainedPortInterface* sink_a,
                              UnconstrainedPortInterface* sink_b,
                              QuicBandwidth bandwidth,
                              QuicTime::Delta propagation_delay)
-    : a_to_b_link_(simulator,
-                   absl::StrCat(name, " (A-to-B)"),
-                   sink_b,
-                   bandwidth,
-                   propagation_delay),
-      b_to_a_link_(simulator,
-                   absl::StrCat(name, " (B-to-A)"),
-                   sink_a,
-                   bandwidth,
-                   propagation_delay) {}
+    : a_to_b_link_(simulator, absl::StrCat(name, " (A-to-B)"), sink_b,
+                   bandwidth, propagation_delay),
+      b_to_a_link_(simulator, absl::StrCat(name, " (B-to-A)"), sink_a,
+                   bandwidth, propagation_delay) {}
 
-SymmetricLink::SymmetricLink(Endpoint* endpoint_a,
-                             Endpoint* endpoint_b,
+SymmetricLink::SymmetricLink(Endpoint* endpoint_a, Endpoint* endpoint_b,
                              QuicBandwidth bandwidth,
                              QuicTime::Delta propagation_delay)
     : SymmetricLink(endpoint_a->simulator(),
-                    absl::StrFormat("Link [%s]<->[%s]",
-                                    endpoint_a->name(),
+                    absl::StrFormat("Link [%s]<->[%s]", endpoint_a->name(),
                                     endpoint_b->name()),
-                    endpoint_a->GetRxPort(),
-                    endpoint_b->GetRxPort(),
-                    bandwidth,
+                    endpoint_a->GetRxPort(), endpoint_b->GetRxPort(), bandwidth,
                     propagation_delay) {
   endpoint_a->SetTxPort(&a_to_b_link_);
   endpoint_b->SetTxPort(&b_to_a_link_);
diff --git a/quiche/quic/test_tools/simulator/link.h b/quiche/quic/test_tools/simulator/link.h
index a534876..19061dd 100644
--- a/quiche/quic/test_tools/simulator/link.h
+++ b/quiche/quic/test_tools/simulator/link.h
@@ -21,10 +21,8 @@
 // synchronization issues.
 class OneWayLink : public Actor, public ConstrainedPortInterface {
  public:
-  OneWayLink(Simulator* simulator,
-             std::string name,
-             UnconstrainedPortInterface* sink,
-             QuicBandwidth bandwidth,
+  OneWayLink(Simulator* simulator, std::string name,
+             UnconstrainedPortInterface* sink, QuicBandwidth bandwidth,
              QuicTime::Delta propagation_delay);
   OneWayLink(const OneWayLink&) = delete;
   OneWayLink& operator=(const OneWayLink&) = delete;
@@ -73,16 +71,12 @@
 // OneWayLink objects tied together.
 class SymmetricLink {
  public:
-  SymmetricLink(Simulator* simulator,
-                std::string name,
+  SymmetricLink(Simulator* simulator, std::string name,
                 UnconstrainedPortInterface* sink_a,
-                UnconstrainedPortInterface* sink_b,
-                QuicBandwidth bandwidth,
+                UnconstrainedPortInterface* sink_b, QuicBandwidth bandwidth,
                 QuicTime::Delta propagation_delay);
-  SymmetricLink(Endpoint* endpoint_a,
-                Endpoint* endpoint_b,
-                QuicBandwidth bandwidth,
-                QuicTime::Delta propagation_delay);
+  SymmetricLink(Endpoint* endpoint_a, Endpoint* endpoint_b,
+                QuicBandwidth bandwidth, QuicTime::Delta propagation_delay);
   SymmetricLink(const SymmetricLink&) = delete;
   SymmetricLink& operator=(const SymmetricLink&) = delete;
 
diff --git a/quiche/quic/test_tools/simulator/packet_filter.cc b/quiche/quic/test_tools/simulator/packet_filter.cc
index 68f90b0..fc07c15 100644
--- a/quiche/quic/test_tools/simulator/packet_filter.cc
+++ b/quiche/quic/test_tools/simulator/packet_filter.cc
@@ -7,8 +7,7 @@
 namespace quic {
 namespace simulator {
 
-PacketFilter::PacketFilter(Simulator* simulator,
-                           std::string name,
+PacketFilter::PacketFilter(Simulator* simulator, std::string name,
                            Endpoint* input)
     : Endpoint(simulator, name), input_(input) {
   input_->SetTxPort(this);
diff --git a/quiche/quic/test_tools/simulator/queue.cc b/quiche/quic/test_tools/simulator/queue.cc
index 2af1ec1..5a1eccf 100644
--- a/quiche/quic/test_tools/simulator/queue.cc
+++ b/quiche/quic/test_tools/simulator/queue.cc
@@ -28,9 +28,7 @@
 
 Queue::~Queue() { aggregation_timeout_alarm_->PermanentCancel(); }
 
-void Queue::set_tx_port(ConstrainedPortInterface* port) {
-  tx_port_ = port;
-}
+void Queue::set_tx_port(ConstrainedPortInterface* port) { tx_port_ = port; }
 
 void Queue::AcceptPacket(std::unique_ptr<Packet> packet) {
   if (packet->size + bytes_queued_ > capacity_) {
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint.cc b/quiche/quic/test_tools/simulator/quic_endpoint.cc
index 75194aa..72f62ad 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint.cc
+++ b/quiche/quic/test_tools/simulator/quic_endpoint.cc
@@ -23,10 +23,8 @@
 const QuicByteCount kWriteChunkSize = 128 * 1024;
 const char kStreamDataContents = 'Q';
 
-QuicEndpoint::QuicEndpoint(Simulator* simulator,
-                           std::string name,
-                           std::string peer_name,
-                           Perspective perspective,
+QuicEndpoint::QuicEndpoint(Simulator* simulator, std::string name,
+                           std::string peer_name, Perspective perspective,
                            QuicConnectionId connection_id)
     : QuicEndpointBase(simulator, name, peer_name),
       bytes_to_transfer_(0),
@@ -167,13 +165,9 @@
   }
   return bytes_to_transfer_ != 0;
 }
-bool QuicEndpoint::ShouldKeepConnectionAlive() const {
-  return true;
-}
+bool QuicEndpoint::ShouldKeepConnectionAlive() const { return true; }
 
-bool QuicEndpoint::AllowSelfAddressChange() const {
-  return false;
-}
+bool QuicEndpoint::AllowSelfAddressChange() const { return false; }
 
 bool QuicEndpoint::OnFrameAcked(const QuicFrame& frame,
                                 QuicTime::Delta ack_delay_time,
@@ -200,9 +194,7 @@
   return notifier_->IsFrameOutstanding(frame);
 }
 
-bool QuicEndpoint::HasUnackedCryptoData() const {
-  return false;
-}
+bool QuicEndpoint::HasUnackedCryptoData() const { return false; }
 
 bool QuicEndpoint::HasUnackedStreamData() const {
   if (notifier_ != nullptr) {
@@ -216,9 +208,7 @@
 }
 
 WriteStreamDataResult QuicEndpoint::DataProducer::WriteStreamData(
-    QuicStreamId /*id*/,
-    QuicStreamOffset /*offset*/,
-    QuicByteCount data_length,
+    QuicStreamId /*id*/, QuicStreamOffset /*offset*/, QuicByteCount data_length,
     QuicDataWriter* writer) {
   writer->WriteRepeatedByte(kStreamDataContents, data_length);
   return WRITE_SUCCESS;
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint.h b/quiche/quic/test_tools/simulator/quic_endpoint.h
index 6ce7b57..db23ece 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint.h
+++ b/quiche/quic/test_tools/simulator/quic_endpoint.h
@@ -31,11 +31,8 @@
                      public QuicConnectionVisitorInterface,
                      public SessionNotifierInterface {
  public:
-  QuicEndpoint(Simulator* simulator,
-               std::string name,
-               std::string peer_name,
-               Perspective perspective,
-               QuicConnectionId connection_id);
+  QuicEndpoint(Simulator* simulator, std::string name, std::string peer_name,
+               Perspective perspective, QuicConnectionId connection_id);
 
   QuicByteCount bytes_to_transfer() const;
   QuicByteCount bytes_transferred() const;
@@ -115,8 +112,7 @@
   // End QuicConnectionVisitorInterface implementation.
 
   // Begin SessionNotifierInterface methods:
-  bool OnFrameAcked(const QuicFrame& frame,
-                    QuicTime::Delta ack_delay_time,
+  bool OnFrameAcked(const QuicFrame& frame, QuicTime::Delta ack_delay_time,
                     QuicTime receive_timestamp) override;
   void OnStreamFrameRetransmitted(const QuicStreamFrame& /*frame*/) override {}
   void OnFrameLost(const QuicFrame& frame) override;
@@ -136,18 +132,14 @@
                                           QuicStreamOffset offset,
                                           QuicByteCount data_length,
                                           QuicDataWriter* writer) override;
-    bool WriteCryptoData(EncryptionLevel level,
-                         QuicStreamOffset offset,
+    bool WriteCryptoData(EncryptionLevel level, QuicStreamOffset offset,
                          QuicByteCount data_length,
                          QuicDataWriter* writer) override;
   };
 
   std::unique_ptr<QuicConnection> CreateConnection(
-      Simulator* simulator,
-      std::string name,
-      std::string peer_name,
-      Perspective perspective,
-      QuicConnectionId connection_id);
+      Simulator* simulator, std::string name, std::string peer_name,
+      Perspective perspective, QuicConnectionId connection_id);
 
   // Write stream data until |bytes_to_transfer_| is zero or the connection is
   // write-blocked.
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint_base.cc b/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
index ad8c662..d466c96 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
+++ b/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
@@ -53,14 +53,12 @@
   return QuicSocketAddress(host, port);
 }
 
-QuicEndpointBase::QuicEndpointBase(Simulator* simulator,
-                                   std::string name,
+QuicEndpointBase::QuicEndpointBase(Simulator* simulator, std::string name,
                                    std::string peer_name)
     : Endpoint(simulator, name),
       peer_name_(peer_name),
       writer_(this),
-      nic_tx_queue_(simulator,
-                    absl::StrCat(name, " (TX Queue)"),
+      nic_tx_queue_(simulator, absl::StrCat(name, " (TX Queue)"),
                     kMaxOutgoingPacketSize * kTxQueueSize),
       connection_(nullptr),
       write_blocked_count_(0),
@@ -79,9 +77,7 @@
   }
 }
 
-void QuicEndpointBase::DropNextIncomingPacket() {
-  drop_next_packet_ = true;
-}
+void QuicEndpointBase::DropNextIncomingPacket() { drop_next_packet_ = true; }
 
 void QuicEndpointBase::RecordTrace() {
   trace_visitor_ = std::make_unique<QuicTraceVisitor>(connection_.get());
@@ -103,9 +99,7 @@
                                 connection_->peer_address(), received_packet);
 }
 
-UnconstrainedPortInterface* QuicEndpointBase::GetRxPort() {
-  return this;
-}
+UnconstrainedPortInterface* QuicEndpointBase::GetRxPort() { return this; }
 
 void QuicEndpointBase::SetTxPort(ConstrainedPortInterface* port) {
   // Any egress done by the endpoint is actually handled by a queue on an NIC.
@@ -127,11 +121,8 @@
 QuicEndpointBase::Writer::~Writer() {}
 
 WriteResult QuicEndpointBase::Writer::WritePacket(
-    const char* buffer,
-    size_t buf_len,
-    const QuicIpAddress& /*self_address*/,
-    const QuicSocketAddress& /*peer_address*/,
-    PerPacketOptions* options) {
+    const char* buffer, size_t buf_len, const QuicIpAddress& /*self_address*/,
+    const QuicSocketAddress& /*peer_address*/, PerPacketOptions* options) {
   QUICHE_DCHECK(!IsWriteBlocked());
   QUICHE_DCHECK(options == nullptr);
   QUICHE_DCHECK(buf_len <= kMaxOutgoingPacketSize);
@@ -157,13 +148,9 @@
   return WriteResult(WRITE_STATUS_OK, buf_len);
 }
 
-bool QuicEndpointBase::Writer::IsWriteBlocked() const {
-  return is_blocked_;
-}
+bool QuicEndpointBase::Writer::IsWriteBlocked() const { return is_blocked_; }
 
-void QuicEndpointBase::Writer::SetWritable() {
-  is_blocked_ = false;
-}
+void QuicEndpointBase::Writer::SetWritable() { is_blocked_ = false; }
 
 absl::optional<int> QuicEndpointBase::Writer::MessageTooBigErrorCode() const {
   return absl::nullopt;
@@ -174,13 +161,9 @@
   return kMaxOutgoingPacketSize;
 }
 
-bool QuicEndpointBase::Writer::SupportsReleaseTime() const {
-  return false;
-}
+bool QuicEndpointBase::Writer::SupportsReleaseTime() const { return false; }
 
-bool QuicEndpointBase::Writer::IsBatchMode() const {
-  return false;
-}
+bool QuicEndpointBase::Writer::IsBatchMode() const { return false; }
 
 QuicPacketBuffer QuicEndpointBase::Writer::GetNextWriteLocation(
     const QuicIpAddress& /*self_address*/,
@@ -193,8 +176,7 @@
 }
 
 QuicEndpointMultiplexer::QuicEndpointMultiplexer(
-    std::string name,
-    const std::vector<QuicEndpointBase*>& endpoints)
+    std::string name, const std::vector<QuicEndpointBase*>& endpoints)
     : Endpoint((*endpoints.begin())->simulator(), name) {
   for (QuicEndpointBase* endpoint : endpoints) {
     mapping_.insert(std::make_pair(endpoint->name(), endpoint));
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint_base.h b/quiche/quic/test_tools/simulator/quic_endpoint_base.h
index 24a3c47..f4931c7 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint_base.h
+++ b/quiche/quic/test_tools/simulator/quic_endpoint_base.h
@@ -41,8 +41,7 @@
  public:
   // Does not create the connection; the subclass has to create connection by
   // itself.
-  QuicEndpointBase(Simulator* simulator,
-                   std::string name,
+  QuicEndpointBase(Simulator* simulator, std::string name,
                    std::string peer_name);
   ~QuicEndpointBase() override;
 
@@ -77,8 +76,7 @@
     explicit Writer(QuicEndpointBase* endpoint);
     ~Writer() override;
 
-    WriteResult WritePacket(const char* buffer,
-                            size_t buf_len,
+    WriteResult WritePacket(const char* buffer, size_t buf_len,
                             const QuicIpAddress& self_address,
                             const QuicSocketAddress& peer_address,
                             PerPacketOptions* options) override;
@@ -108,8 +106,7 @@
                                           QuicStreamOffset offset,
                                           QuicByteCount data_length,
                                           QuicDataWriter* writer) override;
-    bool WriteCryptoData(EncryptionLevel level,
-                         QuicStreamOffset offset,
+    bool WriteCryptoData(EncryptionLevel level, QuicStreamOffset offset,
                          QuicByteCount data_length,
                          QuicDataWriter* writer) override;
   };
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint_test.cc b/quiche/quic/test_tools/simulator/quic_endpoint_test.cc
index 6952684..823c190 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint_test.cc
+++ b/quiche/quic/test_tools/simulator/quic_endpoint_test.cc
@@ -42,8 +42,7 @@
                                            kDefaultPropagationDelay);
   }
 
-  std::unique_ptr<SymmetricLink> CustomLink(Endpoint* a,
-                                            Endpoint* b,
+  std::unique_ptr<SymmetricLink> CustomLink(Endpoint* a, Endpoint* b,
                                             uint64_t extra_rtt_ms) {
     return std::make_unique<SymmetricLink>(
         a, b, kDefaultBandwidth,
diff --git a/quiche/quic/test_tools/simulator/simulator.cc b/quiche/quic/test_tools/simulator/simulator.cc
index 2b3c5d5..49a0ae2 100644
--- a/quiche/quic/test_tools/simulator/simulator.cc
+++ b/quiche/quic/test_tools/simulator/simulator.cc
@@ -29,13 +29,9 @@
 
 Simulator::Clock::Clock() : now_(kStartTime) {}
 
-QuicTime Simulator::Clock::ApproximateNow() const {
-  return now_;
-}
+QuicTime Simulator::Clock::ApproximateNow() const { return now_; }
 
-QuicTime Simulator::Clock::Now() const {
-  return now_;
-}
+QuicTime Simulator::Clock::Now() const { return now_; }
 
 QuicWallTime Simulator::Clock::WallNow() const {
   return QuicWallTime::FromUNIXMicroseconds(
@@ -101,9 +97,7 @@
   QUICHE_DCHECK(false);
 }
 
-const QuicClock* Simulator::GetClock() const {
-  return &clock_;
-}
+const QuicClock* Simulator::GetClock() const { return &clock_; }
 
 QuicRandom* Simulator::GetRandomGenerator() {
   if (random_generator_ == nullptr) {
@@ -117,16 +111,12 @@
   return &buffer_allocator_;
 }
 
-QuicAlarmFactory* Simulator::GetAlarmFactory() {
-  return &alarm_factory_;
-}
+QuicAlarmFactory* Simulator::GetAlarmFactory() { return &alarm_factory_; }
 
 Simulator::RunForDelegate::RunForDelegate(bool* run_for_should_stop)
     : run_for_should_stop_(run_for_should_stop) {}
 
-void Simulator::RunForDelegate::OnAlarm() {
-  *run_for_should_stop_ = true;
-}
+void Simulator::RunForDelegate::OnAlarm() { *run_for_should_stop_ = true; }
 
 void Simulator::RunFor(QuicTime::Delta time_span) {
   QUICHE_DCHECK(!run_for_alarm_->IsSet());
diff --git a/quiche/quic/test_tools/simulator/simulator_test.cc b/quiche/quic/test_tools/simulator/simulator_test.cc
index 76ce046..e43c79c 100644
--- a/quiche/quic/test_tools/simulator/simulator_test.cc
+++ b/quiche/quic/test_tools/simulator/simulator_test.cc
@@ -111,10 +111,8 @@
 // CounterPort as an Rx interface.
 class LinkSaturator : public Endpoint {
  public:
-  LinkSaturator(Simulator* simulator,
-                std::string name,
-                QuicByteCount packet_size,
-                std::string destination)
+  LinkSaturator(Simulator* simulator, std::string name,
+                QuicByteCount packet_size, std::string destination)
       : Endpoint(simulator, name),
         packet_size_(packet_size),
         destination_(std::move(destination)),
@@ -429,9 +427,7 @@
 // instantiated.
 class AlarmToggler : public Actor {
  public:
-  AlarmToggler(Simulator* simulator,
-               std::string name,
-               QuicAlarm* alarm,
+  AlarmToggler(Simulator* simulator, std::string name, QuicAlarm* alarm,
                QuicTime::Delta interval)
       : Actor(simulator, name),
         alarm_(alarm),
diff --git a/quiche/quic/test_tools/simulator/switch.cc b/quiche/quic/test_tools/simulator/switch.cc
index f897ccb..fbd396e 100644
--- a/quiche/quic/test_tools/simulator/switch.cc
+++ b/quiche/quic/test_tools/simulator/switch.cc
@@ -2,19 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "quiche/quic/test_tools/simulator/switch.h"
+
 #include <cinttypes>
 #include <utility>
 
 #include "absl/strings/str_cat.h"
-#include "quiche/quic/test_tools/simulator/switch.h"
 
 namespace quic {
 namespace simulator {
 
-Switch::Switch(Simulator* simulator,
-               std::string name,
-               SwitchPortNumber port_count,
-               QuicByteCount queue_capacity) {
+Switch::Switch(Simulator* simulator, std::string name,
+               SwitchPortNumber port_count, QuicByteCount queue_capacity) {
   for (size_t port_number = 1; port_number <= port_count; port_number++) {
     ports_.emplace_back(simulator,
                         absl::StrCat(name, " (port ", port_number, ")"), this,
@@ -24,11 +23,8 @@
 
 Switch::~Switch() {}
 
-Switch::Port::Port(Simulator* simulator,
-                   std::string name,
-                   Switch* parent,
-                   SwitchPortNumber port_number,
-                   QuicByteCount queue_capacity)
+Switch::Port::Port(Simulator* simulator, std::string name, Switch* parent,
+                   SwitchPortNumber port_number, QuicByteCount queue_capacity)
     : Endpoint(simulator, name),
       parent_(parent),
       port_number_(port_number),
@@ -43,9 +39,7 @@
   queue_.AcceptPacket(std::move(packet));
 }
 
-UnconstrainedPortInterface* Switch::Port::GetRxPort() {
-  return this;
-}
+UnconstrainedPortInterface* Switch::Port::GetRxPort() { return this; }
 
 void Switch::Port::SetTxPort(ConstrainedPortInterface* port) {
   queue_.set_tx_port(port);
diff --git a/quiche/quic/test_tools/simulator/switch.h b/quiche/quic/test_tools/simulator/switch.h
index df25367..b73541c 100644
--- a/quiche/quic/test_tools/simulator/switch.h
+++ b/quiche/quic/test_tools/simulator/switch.h
@@ -20,9 +20,7 @@
 // on every output port.
 class Switch {
  public:
-  Switch(Simulator* simulator,
-         std::string name,
-         SwitchPortNumber port_count,
+  Switch(Simulator* simulator, std::string name, SwitchPortNumber port_count,
          QuicByteCount queue_capacity);
   Switch(const Switch&) = delete;
   Switch& operator=(const Switch&) = delete;
@@ -42,11 +40,8 @@
  private:
   class Port : public Endpoint, public UnconstrainedPortInterface {
    public:
-    Port(Simulator* simulator,
-         std::string name,
-         Switch* parent,
-         SwitchPortNumber port_number,
-         QuicByteCount queue_capacity);
+    Port(Simulator* simulator, std::string name, Switch* parent,
+         SwitchPortNumber port_number, QuicByteCount queue_capacity);
     Port(Port&&) = delete;
     Port(const Port&) = delete;
     Port& operator=(const Port&) = delete;
diff --git a/quiche/quic/test_tools/simulator/traffic_policer.cc b/quiche/quic/test_tools/simulator/traffic_policer.cc
index 8bd3a24..d701a16 100644
--- a/quiche/quic/test_tools/simulator/traffic_policer.cc
+++ b/quiche/quic/test_tools/simulator/traffic_policer.cc
@@ -9,12 +9,10 @@
 namespace quic {
 namespace simulator {
 
-TrafficPolicer::TrafficPolicer(Simulator* simulator,
-                               std::string name,
+TrafficPolicer::TrafficPolicer(Simulator* simulator, std::string name,
                                QuicByteCount initial_bucket_size,
                                QuicByteCount max_bucket_size,
-                               QuicBandwidth target_bandwidth,
-                               Endpoint* input)
+                               QuicBandwidth target_bandwidth, Endpoint* input)
     : PacketFilter(simulator, name, input),
       initial_bucket_size_(initial_bucket_size),
       max_bucket_size_(max_bucket_size),
diff --git a/quiche/quic/test_tools/simulator/traffic_policer.h b/quiche/quic/test_tools/simulator/traffic_policer.h
index f8b889e..710ad73 100644
--- a/quiche/quic/test_tools/simulator/traffic_policer.h
+++ b/quiche/quic/test_tools/simulator/traffic_policer.h
@@ -19,11 +19,9 @@
 // are hashed by the destination only.
 class TrafficPolicer : public PacketFilter {
  public:
-  TrafficPolicer(Simulator* simulator,
-                 std::string name,
+  TrafficPolicer(Simulator* simulator, std::string name,
                  QuicByteCount initial_bucket_size,
-                 QuicByteCount max_bucket_size,
-                 QuicBandwidth target_bandwidth,
+                 QuicByteCount max_bucket_size, QuicBandwidth target_bandwidth,
                  Endpoint* input);
   TrafficPolicer(const TrafficPolicer&) = delete;
   TrafficPolicer& operator=(const TrafficPolicer&) = delete;
