diff --git a/quic/quartc/quartc_session.cc b/quic/quartc/quartc_session.cc
index 80031dd..38e1c62 100644
--- a/quic/quartc/quartc_session.cc
+++ b/quic/quartc/quartc_session.cc
@@ -64,6 +64,8 @@
 }
 
 void QuartcSession::ProcessSendMessageQueue() {
+  QuicConnection::ScopedPacketFlusher flusher(
+      connection(), QuicConnection::AckBundling::NO_ACK);
   while (!send_message_queue_.empty()) {
     struct iovec iov = {const_cast<char*>(send_message_queue_.front().data()),
                         send_message_queue_.front().length()};
@@ -120,6 +122,17 @@
   QuicSession::OnCanWrite();
 }
 
+bool QuartcSession::SendProbingData() {
+  if (QuicSession::SendProbingData()) {
+    return true;
+  }
+
+  SetTransmissionType(PROBING_RETRANSMISSION);
+  SendPing();
+  WriteControlFrame(QuicFrame(QuicPaddingFrame()));
+  return true;
+}
+
 void QuartcSession::OnCryptoHandshakeEvent(CryptoHandshakeEvent event) {
   QuicSession::OnCryptoHandshakeEvent(event);
   switch (event) {
@@ -197,7 +210,7 @@
 
 void QuartcSession::SetDelegate(Delegate* session_delegate) {
   if (session_delegate_) {
-    LOG(WARNING) << "The delegate for the session has already been set.";
+    QUIC_LOG(WARNING) << "The delegate for the session has already been set.";
   }
   session_delegate_ = session_delegate;
   DCHECK(session_delegate_);
@@ -337,7 +350,7 @@
           std::vector<std::string>{kDummyCertName}, /*cert_sct=*/"",
           /*chlo_hash=*/"", /*signature=*/"anything");
     } else {
-      LOG(DFATAL) << "Unable to set server config, error=" << error;
+      QUIC_LOG(DFATAL) << "Unable to set server config, error=" << error;
     }
   }
 
diff --git a/quic/quartc/quartc_session.h b/quic/quartc/quartc_session.h
index 29e6306..9da306e 100644
--- a/quic/quartc/quartc_session.h
+++ b/quic/quartc/quartc_session.h
@@ -67,6 +67,7 @@
   bool ShouldKeepConnectionAlive() const override;
 
   void OnCanWrite() override;
+  bool SendProbingData() override;
 
   void OnConnectionClosed(QuicErrorCode error,
                           const std::string& error_details,
diff --git a/quic/quartc/test/quartc_peer.cc b/quic/quartc/test/quartc_peer.cc
index 8aa1c1a..036ba03 100644
--- a/quic/quartc/test/quartc_peer.cc
+++ b/quic/quartc/test/quartc_peer.cc
@@ -71,7 +71,6 @@
 
 void QuartcPeer::OnCryptoHandshakeComplete() {
   SetEnabled(true);
-  session_->SendPing();  // Hack to make probing work.
 }
 
 void QuartcPeer::OnConnectionWritable() {
diff --git a/quic/quartc/test/quartc_peer_test.cc b/quic/quartc/test/quartc_peer_test.cc
index 9b4f3fb..9f76fe6 100644
--- a/quic/quartc/test/quartc_peer_test.cc
+++ b/quic/quartc/test/quartc_peer_test.cc
@@ -10,6 +10,7 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/quartc/quartc_endpoint.h"
 #include "net/third_party/quiche/src/quic/quartc/simulated_packet_transport.h"
+#include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
 #include "net/third_party/quiche/src/quic/test_tools/simulator/link.h"
 #include "net/third_party/quiche/src/quic/test_tools/simulator/simulator.h"
 
@@ -31,7 +32,9 @@
         client_server_link_(&client_transport_,
                             &server_transport_,
                             QuicBandwidth::FromKBitsPerSecond(512),
-                            QuicTime::Delta::FromMilliseconds(100)) {}
+                            QuicTime::Delta::FromMilliseconds(100)) {
+    simulator_.set_random_generator(&rng_);
+  }
 
   void CreatePeers(const std::vector<QuartcDataSource::Config>& configs) {
     client_peer_ = QuicMakeUnique<QuartcPeer>(
@@ -59,6 +62,7 @@
     client_endpoint_->Connect(&client_transport_);
   }
 
+  SimpleRandom rng_;
   simulator::Simulator simulator_;
   simulator::SimulatedQuartcPacketTransport client_transport_;
   simulator::SimulatedQuartcPacketTransport server_transport_;
@@ -124,7 +128,7 @@
   Connect();
 
   // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // The peers generate frames that fit in one packet.
   EXPECT_LT(client_peer_->received_messages().back().frame.size,
@@ -143,7 +147,7 @@
   Connect();
 
   // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // The peers generate frames that fit in one packet.
   EXPECT_LT(client_peer_->received_messages().back().frame.size,
@@ -164,10 +168,7 @@
   Connect();
 
   // Run long enough for the bandwidth estimate to ramp up.
-  // Note that the ramp-up time is longer for this test because of the long
-  // frame_interval.  This seems especially true when QUIC enables all flags for
-  // testing.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(30));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   EXPECT_EQ(client_peer_->received_messages().back().frame.size, 100);
   EXPECT_EQ(server_peer_->received_messages().back().frame.size, 100);
@@ -182,7 +183,7 @@
   Connect();
 
   // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // Max frame sizes smaller than the header are ignored, and the frame size is
   // limited by packet size.
@@ -271,7 +272,7 @@
 
   // Run for long enough that bandwidth ramps up and meets the requirements of
   // all three sources.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // The last message from each source should be the size allowed by that
   // source's maximum bandwidth and frame interval.
@@ -323,7 +324,7 @@
   Connect();
 
   // Run for long enough that bandwidth ramps up to link capacity.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   const std::vector<ReceivedMessage>& client_messages =
       client_peer_->received_messages();
@@ -371,7 +372,7 @@
   CreatePeers({config});
   Connect();
 
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // After these calls, we should observe no new messages.
   server_peer_->SetEnabled(false);
@@ -382,7 +383,7 @@
   std::map<int32_t, int64_t> last_sent_by_server =
       server_peer_->GetLastSequenceNumbers();
 
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(15));
+  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   ASSERT_FALSE(client_peer_->received_messages().empty());
   EXPECT_EQ(client_peer_->received_messages().back().frame.sequence_number,
