Deprecate gfe2_reloadable_flag_quic_deprecate_http2_priority_experiment.

PiperOrigin-RevId: 354306841
Change-Id: I5ba23aaa35b5a375c5028d33f6baf4df01a4fd12
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h
index 4704c4c..99f5372 100644
--- a/quic/core/crypto/crypto_protocol.h
+++ b/quic/core/crypto/crypto_protocol.h
@@ -28,7 +28,7 @@
 
 // The following tags have been deprecated and should not be reused:
 // "1CON", "BBQ4", "NCON", "RCID", "SREJ", "TBKP", "TB10", "SCLS", "SMHL",
-// "QNZR", "B2HI"
+// "QNZR", "B2HI", "H2PR", "FIFO", "LIFO", "RRWS"
 
 // clang-format off
 const QuicTag kCHLO = TAG('C', 'H', 'L', 'O');   // Client hello
@@ -337,14 +337,6 @@
 const QuicTag kMTUH = TAG('M', 'T', 'U', 'H');  // High-target MTU discovery.
 const QuicTag kMTUL = TAG('M', 'T', 'U', 'L');  // Low-target MTU discovery.
 
-// Enable Priority scheme experiment.
-const QuicTag kH2PR = TAG('H', '2', 'P', 'R');  // HTTP2 priorities.
-const QuicTag kFIFO = TAG('F', 'I', 'F', 'O');  // Stream with the smallest ID
-                                                // has the highest priority.
-const QuicTag kLIFO = TAG('L', 'I', 'F', 'O');  // Stream with the largest ID
-                                                // has the highest priority.
-const QuicTag kRRWS = TAG('R', 'R', 'W', 'S');  // Round robin write scheduling.
-
 const QuicTag kNSLC = TAG('N', 'S', 'L', 'C');  // Always send connection close
                                                 // for idle timeout.
 
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index e35d622..8026ac2 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -324,8 +324,8 @@
   void OnHeaders(SpdyStreamId stream_id,
                  bool has_priority,
                  int weight,
-                 SpdyStreamId parent_stream_id,
-                 bool exclusive,
+                 SpdyStreamId /* parent_stream_id */,
+                 bool /* exclusive */,
                  bool fin,
                  bool /*end*/) override {
     if (!session_->IsConnected()) {
@@ -342,13 +342,6 @@
         << "QuicSpdyStream use after free. "
         << session_->destruction_indicator() << QuicStackTrace();
 
-    if (session_->use_http2_priority_write_scheduler()) {
-      session_->OnHeaders(
-          stream_id, has_priority,
-          spdy::SpdyStreamPrecedence(parent_stream_id, weight, exclusive), fin);
-      return;
-    }
-
     SpdyPriority priority =
         has_priority ? Http2WeightToSpdy3Priority(weight) : 0;
     session_->OnHeaders(stream_id, has_priority,
@@ -379,18 +372,13 @@
   void OnContinuation(SpdyStreamId /*stream_id*/, bool /*end*/) override {}
 
   void OnPriority(SpdyStreamId stream_id,
-                  SpdyStreamId parent_id,
+                  SpdyStreamId /* parent_id */,
                   int weight,
-                  bool exclusive) override {
+                  bool /* exclusive */) override {
     DCHECK(!VersionUsesHttp3(session_->transport_version()));
     if (!session_->IsConnected()) {
       return;
     }
-    if (session_->use_http2_priority_write_scheduler()) {
-      session_->OnPriority(
-          stream_id, spdy::SpdyStreamPrecedence(parent_id, weight, exclusive));
-      return;
-    }
     SpdyPriority priority = Http2WeightToSpdy3Priority(weight);
     session_->OnPriority(stream_id, spdy::SpdyStreamPrecedence(priority));
   }
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 53b4e40..b30410b 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -28,7 +28,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_default_to_bbr, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_default_to_bbr_v2, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_delay_initial_ack, true)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_deprecate_http2_priority_experiment, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_server_blackhole_detection, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_29, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q043, false)
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index a50d7a6..5c308f0 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -111,9 +111,7 @@
       datagram_queue_(this, std::move(datagram_observer)),
       closed_streams_clean_up_alarm_(nullptr),
       supported_versions_(supported_versions),
-      use_http2_priority_write_scheduler_(false),
       is_configured_(false),
-      enable_round_robin_scheduling_(false),
       was_zero_rtt_rejected_(false),
       liveness_testing_in_progress_(false) {
   closed_streams_clean_up_alarm_ =
@@ -613,9 +611,7 @@
                << ", finished_writes: " << i
                << ", connected: " << connection_->connected()
                << ", connection level flow control blocked: "
-               << flow_controller_.IsBlocked() << ", scheduler type: "
-               << spdy::WriteSchedulerTypeToString(
-                      write_blocked_streams_.scheduler_type());
+               << flow_controller_.IsBlocked();
       for (QuicStreamId id : last_writing_stream_ids) {
         QUIC_LOG(WARNING) << "last_writing_stream_id: " << id;
       }
@@ -1271,32 +1267,6 @@
       if (ContainsQuicTag(config_.ReceivedConnectionOptions(), kIFWA)) {
         AdjustInitialFlowControlWindows(1024 * 1024);
       }
-      if (GetQuicReloadableFlag(quic_deprecate_http2_priority_experiment)) {
-        QUIC_CODE_COUNT(quic_deprecate_http2_priority_experiment);
-      } else {
-        if (ContainsQuicTag(config_.ReceivedConnectionOptions(), kH2PR) &&
-            !VersionHasIetfQuicFrames(transport_version())) {
-          // Enable HTTP2 (tree-style) priority write scheduler.
-          use_http2_priority_write_scheduler_ =
-              write_blocked_streams_.SwitchWriteScheduler(
-                  spdy::WriteSchedulerType::HTTP2, transport_version());
-        } else if (ContainsQuicTag(config_.ReceivedConnectionOptions(),
-                                   kFIFO)) {
-          // Enable FIFO write scheduler.
-          write_blocked_streams_.SwitchWriteScheduler(
-              spdy::WriteSchedulerType::FIFO, transport_version());
-        } else if (ContainsQuicTag(config_.ReceivedConnectionOptions(),
-                                   kLIFO)) {
-          // Enable LIFO write scheduler.
-          write_blocked_streams_.SwitchWriteScheduler(
-              spdy::WriteSchedulerType::LIFO, transport_version());
-        } else if (ContainsQuicTag(config_.ReceivedConnectionOptions(),
-                                   kRRWS) &&
-                   write_blocked_streams_.scheduler_type() ==
-                       spdy::WriteSchedulerType::SPDY) {
-          enable_round_robin_scheduling_ = true;
-        }
-      }
     }
 
     config_.SetStatelessResetTokenToSend(GetStatelessResetToken());
@@ -1807,13 +1777,6 @@
     QuicStreamId id,
     bool is_static,
     const spdy::SpdyStreamPrecedence& precedence) {
-  if (enable_round_robin_scheduling_) {
-    // Ignore provided precedence, instead, put all streams at the same priority
-    // bucket.
-    write_blocked_streams()->RegisterStream(
-        id, is_static, spdy::SpdyStreamPrecedence(spdy::kV3LowestPriority));
-    return;
-  }
   write_blocked_streams()->RegisterStream(id, is_static, precedence);
 }
 
@@ -1824,10 +1787,6 @@
 void QuicSession::UpdateStreamPriority(
     QuicStreamId id,
     const spdy::SpdyStreamPrecedence& new_precedence) {
-  if (enable_round_robin_scheduling_) {
-    // Ignore updated precedence.
-    return;
-  }
   write_blocked_streams()->UpdateStreamPriority(id, new_precedence);
 }
 
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 2101c28..b995c5d 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -543,10 +543,6 @@
 
   inline ParsedQuicVersion version() const { return connection_->version(); }
 
-  bool use_http2_priority_write_scheduler() const {
-    return use_http2_priority_write_scheduler_;
-  }
-
   bool is_configured() const { return is_configured_; }
 
   // Called to neuter crypto data of encryption |level|.
@@ -941,17 +937,10 @@
 
   absl::optional<std::string> user_agent_id_;
 
-  // If true, write_blocked_streams_ uses HTTP2 (tree-style) priority write
-  // scheduler.
-  bool use_http2_priority_write_scheduler_;
-
   // Initialized to false. Set to true when the session has been properly
   // configured and is ready for general operation.
   bool is_configured_;
 
-  // If true, enables round robin scheduling.
-  bool enable_round_robin_scheduling_;
-
   // Whether the session has received a 0-RTT rejection (QUIC+TLS only).
   bool was_zero_rtt_rejected_;
 
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index 3288047..7c5d9bb 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -1045,142 +1045,6 @@
   session_.OnCanWrite();
 }
 
-TEST_P(QuicSessionTestServer, Http2Priority) {
-  if (GetQuicReloadableFlag(quic_deprecate_http2_priority_experiment)) {
-    return;
-  }
-
-  if (VersionHasIetfQuicFrames(GetParam().transport_version)) {
-    // The test is using HTTP/2 priority which is not supported in IETF QUIC.
-    return;
-  }
-  QuicTagVector copt;
-  copt.push_back(kH2PR);
-  QuicConfigPeer::SetReceivedConnectionOptions(session_.config(), copt);
-  connection_->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
-  session_.OnConfigNegotiated();
-  ASSERT_TRUE(session_.use_http2_priority_write_scheduler());
-
-  session_.set_writev_consumes_all_data(true);
-  TestStream* stream2 = session_.CreateOutgoingBidirectionalStream();
-  TestStream* stream4 = session_.CreateOutgoingBidirectionalStream();
-  TestStream* stream6 = session_.CreateOutgoingBidirectionalStream();
-
-  session_.set_writev_consumes_all_data(true);
-  /*
-           0
-          /|\
-         2 4 6
-  */
-  session_.MarkConnectionLevelWriteBlocked(stream2->id());
-  session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  session_.MarkConnectionLevelWriteBlocked(stream6->id());
-
-  // Verify streams are scheduled round robin.
-  InSequence s;
-  EXPECT_CALL(*stream2, OnCanWrite());
-  EXPECT_CALL(*stream4, OnCanWrite());
-  EXPECT_CALL(*stream6, OnCanWrite());
-  session_.OnCanWrite();
-
-  /*
-           0
-           |
-           4
-          / \
-         2   6
-  */
-  // Update stream 4's priority.
-  stream4->SetPriority(
-      spdy::SpdyStreamPrecedence(0, spdy::kHttp2DefaultStreamWeight, true));
-  session_.MarkConnectionLevelWriteBlocked(stream2->id());
-  session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  session_.MarkConnectionLevelWriteBlocked(stream6->id());
-
-  EXPECT_CALL(*stream4, OnCanWrite()).WillOnce(Invoke([this, stream4]() {
-    session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  }));
-  EXPECT_CALL(*stream4, OnCanWrite());
-  EXPECT_CALL(*stream2, OnCanWrite());
-  session_.OnCanWrite();
-  EXPECT_CALL(*stream6, OnCanWrite());
-  session_.OnCanWrite();
-
-  /*
-         0
-         |
-         6
-         |
-         4
-         |
-         2
-  */
-  // Update stream 6's priority.
-  stream6->SetPriority(
-      spdy::SpdyStreamPrecedence(0, spdy::kHttp2DefaultStreamWeight, true));
-  session_.MarkConnectionLevelWriteBlocked(stream2->id());
-  session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  session_.MarkConnectionLevelWriteBlocked(stream6->id());
-
-  EXPECT_CALL(*stream6, OnCanWrite()).WillOnce(Invoke([this, stream6]() {
-    session_.MarkConnectionLevelWriteBlocked(stream6->id());
-  }));
-  EXPECT_CALL(*stream6, OnCanWrite());
-  EXPECT_CALL(*stream4, OnCanWrite());
-  session_.OnCanWrite();
-  EXPECT_CALL(*stream2, OnCanWrite());
-  session_.OnCanWrite();
-}
-
-TEST_P(QuicSessionTestServer, RoundRobinScheduling) {
-  if (GetQuicReloadableFlag(quic_deprecate_http2_priority_experiment)) {
-    return;
-  }
-
-  if (VersionHasIetfQuicFrames(GetParam().transport_version)) {
-    // IETF QUIC currently doesn't support PRIORITY.
-    return;
-  }
-  QuicTagVector copt;
-  copt.push_back(kRRWS);
-  QuicConfigPeer::SetReceivedConnectionOptions(session_.config(), copt);
-  connection_->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
-  session_.OnConfigNegotiated();
-
-  session_.set_writev_consumes_all_data(true);
-  TestStream* stream2 = session_.CreateOutgoingBidirectionalStream();
-  TestStream* stream4 = session_.CreateOutgoingBidirectionalStream();
-  TestStream* stream6 = session_.CreateOutgoingBidirectionalStream();
-
-  session_.set_writev_consumes_all_data(true);
-  session_.MarkConnectionLevelWriteBlocked(stream2->id());
-  session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  session_.MarkConnectionLevelWriteBlocked(stream6->id());
-
-  // Verify streams are scheduled round robin.
-  InSequence s;
-  EXPECT_CALL(*stream2, OnCanWrite());
-  EXPECT_CALL(*stream4, OnCanWrite());
-  EXPECT_CALL(*stream6, OnCanWrite());
-  session_.OnCanWrite();
-
-  /* 2, 4, 6, 8 */
-  TestStream* stream8 = session_.CreateOutgoingBidirectionalStream();
-
-  // Verify updated priority is ignored.
-  stream4->SetPriority(spdy::SpdyStreamPrecedence(spdy::kV3HighestPriority));
-  session_.MarkConnectionLevelWriteBlocked(stream8->id());
-  session_.MarkConnectionLevelWriteBlocked(stream4->id());
-  session_.MarkConnectionLevelWriteBlocked(stream2->id());
-  session_.MarkConnectionLevelWriteBlocked(stream6->id());
-
-  EXPECT_CALL(*stream8, OnCanWrite());
-  EXPECT_CALL(*stream4, OnCanWrite());
-  EXPECT_CALL(*stream2, OnCanWrite());
-  EXPECT_CALL(*stream6, OnCanWrite());
-  session_.OnCanWrite();
-}
-
 TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
   // Encryption needs to be established before data can be sent.
   CompleteHandshake();
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index 5aa7150..b5cdd31 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -1458,16 +1458,10 @@
 // static
 spdy::SpdyStreamPrecedence QuicStream::CalculateDefaultPriority(
     const QuicSession* session) {
-  if (VersionUsesHttp3(session->transport_version())) {
-    return spdy::SpdyStreamPrecedence(kDefaultUrgency);
-  }
-
-  if (session->use_http2_priority_write_scheduler()) {
-    return spdy::SpdyStreamPrecedence(0, spdy::kHttp2DefaultStreamWeight,
-                                      false);
-  }
-
-  return spdy::SpdyStreamPrecedence(QuicStream::kDefaultPriority);
+  return spdy::SpdyStreamPrecedence(
+      VersionUsesHttp3(session->transport_version())
+          ? kDefaultUrgency
+          : QuicStream::kDefaultPriority);
 }
 
 }  // namespace quic
diff --git a/quic/core/quic_write_blocked_list.cc b/quic/core/quic_write_blocked_list.cc
index 21e4fde..02b72e3 100644
--- a/quic/core/quic_write_blocked_list.cc
+++ b/quic/core/quic_write_blocked_list.cc
@@ -10,13 +10,10 @@
 namespace quic {
 
 QuicWriteBlockedList::QuicWriteBlockedList(QuicTransportVersion version)
-    : priority_write_scheduler_(
-          std::make_unique<spdy::PriorityWriteScheduler<QuicStreamId>>(
-              QuicVersionUsesCryptoFrames(version)
-                  ? std::numeric_limits<QuicStreamId>::max()
-                  : 0)),
-      last_priority_popped_(0),
-      scheduler_type_(spdy::WriteSchedulerType::SPDY) {
+    : priority_write_scheduler_(QuicVersionUsesCryptoFrames(version)
+                                    ? std::numeric_limits<QuicStreamId>::max()
+                                    : 0),
+      last_priority_popped_(0) {
   memset(batch_write_stream_id_, 0, sizeof(batch_write_stream_id_));
   memset(bytes_left_for_batch_write_, 0, sizeof(bytes_left_for_batch_write_));
 }
@@ -35,47 +32,7 @@
     }
   }
 
-  return priority_write_scheduler_->ShouldYield(id);
-}
-
-bool QuicWriteBlockedList::SwitchWriteScheduler(spdy::WriteSchedulerType type,
-                                                QuicTransportVersion version) {
-  if (scheduler_type_ == type) {
-    return true;
-  }
-  if (priority_write_scheduler_->NumRegisteredStreams() != 0) {
-    QUIC_BUG << "Cannot switch scheduler with registered streams";
-    return false;
-  }
-  QUIC_DVLOG(1) << "Switching to scheduler type: "
-                << spdy::WriteSchedulerTypeToString(type);
-  switch (type) {
-    case spdy::WriteSchedulerType::LIFO:
-      priority_write_scheduler_ =
-          std::make_unique<spdy::LifoWriteScheduler<QuicStreamId>>();
-      break;
-    case spdy::WriteSchedulerType::SPDY:
-      priority_write_scheduler_ =
-          std::make_unique<spdy::PriorityWriteScheduler<QuicStreamId>>(
-              QuicVersionUsesCryptoFrames(version)
-                  ? std::numeric_limits<QuicStreamId>::max()
-                  : 0);
-      break;
-    case spdy::WriteSchedulerType::HTTP2:
-      priority_write_scheduler_ =
-          std::make_unique<spdy::Http2PriorityWriteScheduler<QuicStreamId>>();
-      break;
-    case spdy::WriteSchedulerType::FIFO:
-      priority_write_scheduler_ =
-          std::make_unique<spdy::FifoWriteScheduler<QuicStreamId>>();
-      break;
-    default:
-      QUIC_BUG << "Scheduler is not supported for type: "
-               << spdy::WriteSchedulerTypeToString(type);
-      return false;
-  }
-  scheduler_type_ = type;
-  return true;
+  return priority_write_scheduler_.ShouldYield(id);
 }
 
 QuicStreamId QuicWriteBlockedList::PopFront() {
@@ -85,16 +42,12 @@
   }
 
   const auto id_and_precedence =
-      priority_write_scheduler_->PopNextReadyStreamAndPrecedence();
+      priority_write_scheduler_.PopNextReadyStreamAndPrecedence();
   const QuicStreamId id = std::get<0>(id_and_precedence);
-  if (scheduler_type_ != spdy::WriteSchedulerType::SPDY) {
-    // No batch writing logic for non-SPDY priority write scheduler.
-    return id;
-  }
   const spdy::SpdyPriority priority =
       std::get<1>(id_and_precedence).spdy3_priority();
 
-  if (!priority_write_scheduler_->HasReadyStreams()) {
+  if (!priority_write_scheduler_.HasReadyStreams()) {
     // If no streams are blocked, don't bother latching.  This stream will be
     // the first popped for its priority anyway.
     batch_write_stream_id_[priority] = 0;
@@ -113,15 +66,15 @@
     QuicStreamId stream_id,
     bool is_static_stream,
     const spdy::SpdyStreamPrecedence& precedence) {
-  DCHECK(!priority_write_scheduler_->StreamRegistered(stream_id))
+  DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id))
       << "stream " << stream_id << " already registered";
-  DCHECK(PrecedenceMatchesSchedulerType(precedence));
+  DCHECK(precedence.is_spdy3_priority());
   if (is_static_stream) {
     static_stream_collection_.Register(stream_id);
     return;
   }
 
-  priority_write_scheduler_->RegisterStream(stream_id, precedence);
+  priority_write_scheduler_.RegisterStream(stream_id, precedence);
 }
 
 void QuicWriteBlockedList::UnregisterStream(QuicStreamId stream_id,
@@ -130,22 +83,19 @@
     static_stream_collection_.Unregister(stream_id);
     return;
   }
-  priority_write_scheduler_->UnregisterStream(stream_id);
+  priority_write_scheduler_.UnregisterStream(stream_id);
 }
 
 void QuicWriteBlockedList::UpdateStreamPriority(
     QuicStreamId stream_id,
     const spdy::SpdyStreamPrecedence& new_precedence) {
   DCHECK(!static_stream_collection_.IsRegistered(stream_id));
-  DCHECK(PrecedenceMatchesSchedulerType(new_precedence));
-  priority_write_scheduler_->UpdateStreamPrecedence(stream_id, new_precedence);
+  DCHECK(new_precedence.is_spdy3_priority());
+  priority_write_scheduler_.UpdateStreamPrecedence(stream_id, new_precedence);
 }
 
 void QuicWriteBlockedList::UpdateBytesForStream(QuicStreamId stream_id,
                                                 size_t bytes) {
-  if (scheduler_type_ != spdy::WriteSchedulerType::SPDY) {
-    return;
-  }
   if (batch_write_stream_id_[last_priority_popped_] == stream_id) {
     // If this was the last data stream popped by PopFront, update the
     // bytes remaining in its batch write.
@@ -160,10 +110,9 @@
   }
 
   bool push_front =
-      scheduler_type_ == spdy::WriteSchedulerType::SPDY &&
       stream_id == batch_write_stream_id_[last_priority_popped_] &&
       bytes_left_for_batch_write_[last_priority_popped_] > 0;
-  priority_write_scheduler_->MarkStreamReady(stream_id, push_front);
+  priority_write_scheduler_.MarkStreamReady(stream_id, push_front);
 }
 
 bool QuicWriteBlockedList::IsStreamBlocked(QuicStreamId stream_id) const {
@@ -173,25 +122,7 @@
     }
   }
 
-  return priority_write_scheduler_->IsStreamReady(stream_id);
-}
-
-bool QuicWriteBlockedList::PrecedenceMatchesSchedulerType(
-    const spdy::SpdyStreamPrecedence& precedence) {
-  switch (scheduler_type_) {
-    case spdy::WriteSchedulerType::LIFO:
-      break;
-    case spdy::WriteSchedulerType::SPDY:
-      return precedence.is_spdy3_priority();
-    case spdy::WriteSchedulerType::HTTP2:
-      return !precedence.is_spdy3_priority();
-    case spdy::WriteSchedulerType::FIFO:
-      break;
-    default:
-      DCHECK(false);
-      return false;
-  }
-  return true;
+  return priority_write_scheduler_.IsStreamReady(stream_id);
 }
 
 void QuicWriteBlockedList::StaticStreamCollection::Register(QuicStreamId id) {
diff --git a/quic/core/quic_write_blocked_list.h b/quic/core/quic_write_blocked_list.h
index 7b5f29f..2d87847 100644
--- a/quic/core/quic_write_blocked_list.h
+++ b/quic/core/quic_write_blocked_list.h
@@ -26,9 +26,6 @@
 // priority.  QUIC stream priority order is:
 // Crypto stream > Headers stream > Data streams by requested priority.
 class QUIC_EXPORT_PRIVATE QuicWriteBlockedList {
- private:
-  using QuicPriorityWriteScheduler = spdy::WriteScheduler<QuicStreamId>;
-
  public:
   explicit QuicWriteBlockedList(QuicTransportVersion version);
   QuicWriteBlockedList(const QuicWriteBlockedList&) = delete;
@@ -36,7 +33,7 @@
   ~QuicWriteBlockedList();
 
   bool HasWriteBlockedDataStreams() const {
-    return priority_write_scheduler_->HasReadyStreams();
+    return priority_write_scheduler_.HasReadyStreams();
   }
 
   bool HasWriteBlockedSpecialStream() const {
@@ -49,20 +46,15 @@
 
   size_t NumBlockedStreams() const {
     return NumBlockedSpecialStreams() +
-           priority_write_scheduler_->NumReadyStreams();
+           priority_write_scheduler_.NumReadyStreams();
   }
 
   bool ShouldYield(QuicStreamId id) const;
 
   spdy::SpdyPriority GetSpdyPriorityofStream(QuicStreamId id) const {
-    return priority_write_scheduler_->GetStreamPrecedence(id).spdy3_priority();
+    return priority_write_scheduler_.GetStreamPrecedence(id).spdy3_priority();
   }
 
-  // Switches write scheduler. This can only be called before any stream is
-  // registered.
-  bool SwitchWriteScheduler(spdy::WriteSchedulerType type,
-                            QuicTransportVersion version);
-
   // Pops the highest priority stream, special casing crypto and headers
   // streams. Latches the most recently popped data stream for batch writing
   // purposes.
@@ -88,13 +80,8 @@
   // Returns true if stream with |stream_id| is write blocked.
   bool IsStreamBlocked(QuicStreamId stream_id) const;
 
-  spdy::WriteSchedulerType scheduler_type() const { return scheduler_type_; }
-
  private:
-  bool PrecedenceMatchesSchedulerType(
-      const spdy::SpdyStreamPrecedence& precedence);
-
-  std::unique_ptr<QuicPriorityWriteScheduler> priority_write_scheduler_;
+  spdy::PriorityWriteScheduler<QuicStreamId> priority_write_scheduler_;
 
   // If performing batch writes, this will be the stream ID of the stream doing
   // batch writes for this priority level.  We will allow this stream to write
@@ -152,8 +139,6 @@
   };
 
   StaticStreamCollection static_stream_collection_;
-
-  spdy::WriteSchedulerType scheduler_type_;
 };
 
 }  // namespace quic
diff --git a/quic/core/quic_write_blocked_list_test.cc b/quic/core/quic_write_blocked_list_test.cc
index 9ce822d..7cf7797 100644
--- a/quic/core/quic_write_blocked_list_test.cc
+++ b/quic/core/quic_write_blocked_list_test.cc
@@ -15,73 +15,37 @@
 namespace test {
 namespace {
 
-const bool kExclusiveBit = true;
-
 class QuicWriteBlockedListTest : public QuicTestWithParam<bool> {
  public:
   QuicWriteBlockedListTest()
-      : write_blocked_list_(AllSupportedVersions()[0].transport_version) {
-    if (GetParam()) {
-      write_blocked_list_.SwitchWriteScheduler(
-          spdy::WriteSchedulerType::HTTP2,
-          AllSupportedVersions()[0].transport_version);
-    }
-  }
+      : write_blocked_list_(AllSupportedVersions()[0].transport_version) {}
 
  protected:
   QuicWriteBlockedList write_blocked_list_;
 };
 
-INSTANTIATE_TEST_SUITE_P(Tests,
-                         QuicWriteBlockedListTest,
-                         ::testing::Bool(),
-                         ::testing::PrintToStringParamName());
-
-TEST_P(QuicWriteBlockedListTest, PriorityOrder) {
-  if (GetParam()) {
-    /*
-         0
-         |
-         23
-         |
-         17
-         |
-         40
-    */
-    write_blocked_list_.RegisterStream(
-        17, false,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        40, false,
-        spdy::SpdyStreamPrecedence(17, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        23, false,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        1, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        3, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
-    // Mark streams blocked in roughly reverse priority order, and
-    // verify that streams are sorted.
-    write_blocked_list_.RegisterStream(
-        40, false, spdy::SpdyStreamPrecedence(kV3LowestPriority));
-    write_blocked_list_.RegisterStream(
-        23, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        17, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
+TEST_F(QuicWriteBlockedListTest, PriorityOrder) {
+  /*
+       0
+       |
+       23
+       |
+       17
+       |
+       40
+  */
+  // Mark streams blocked in roughly reverse priority order, and
+  // verify that streams are sorted.
+  write_blocked_list_.RegisterStream(
+      40, false, spdy::SpdyStreamPrecedence(kV3LowestPriority));
+  write_blocked_list_.RegisterStream(
+      23, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      17, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
 
   write_blocked_list_.AddStream(40);
   EXPECT_TRUE(write_blocked_list_.IsStreamBlocked(40));
@@ -120,16 +84,9 @@
   EXPECT_FALSE(write_blocked_list_.HasWriteBlockedDataStreams());
 }
 
-TEST_P(QuicWriteBlockedListTest, CryptoStream) {
-  if (GetParam()) {
-    write_blocked_list_.RegisterStream(
-        1, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
-    write_blocked_list_.RegisterStream(
-        1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
+TEST_F(QuicWriteBlockedListTest, CryptoStream) {
+  write_blocked_list_.RegisterStream(
+      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
   write_blocked_list_.AddStream(1);
 
   EXPECT_EQ(1u, write_blocked_list_.NumBlockedStreams());
@@ -139,16 +96,9 @@
   EXPECT_FALSE(write_blocked_list_.HasWriteBlockedSpecialStream());
 }
 
-TEST_P(QuicWriteBlockedListTest, HeadersStream) {
-  if (GetParam()) {
-    write_blocked_list_.RegisterStream(
-        3, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
-    write_blocked_list_.RegisterStream(
-        3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
+TEST_F(QuicWriteBlockedListTest, HeadersStream) {
+  write_blocked_list_.RegisterStream(
+      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
   write_blocked_list_.AddStream(3);
 
   EXPECT_EQ(1u, write_blocked_list_.NumBlockedStreams());
@@ -158,22 +108,11 @@
   EXPECT_FALSE(write_blocked_list_.HasWriteBlockedSpecialStream());
 }
 
-TEST_P(QuicWriteBlockedListTest, VerifyHeadersStream) {
-  if (GetParam()) {
-    write_blocked_list_.RegisterStream(
-        5, false,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        3, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
-    write_blocked_list_.RegisterStream(
-        5, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
+TEST_F(QuicWriteBlockedListTest, VerifyHeadersStream) {
+  write_blocked_list_.RegisterStream(
+      5, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
   write_blocked_list_.AddStream(5);
   write_blocked_list_.AddStream(3);
 
@@ -189,20 +128,13 @@
   EXPECT_FALSE(write_blocked_list_.HasWriteBlockedDataStreams());
 }
 
-TEST_P(QuicWriteBlockedListTest, NoDuplicateEntries) {
+TEST_F(QuicWriteBlockedListTest, NoDuplicateEntries) {
   // Test that QuicWriteBlockedList doesn't allow duplicate entries.
   // Try to add a stream to the write blocked list multiple times at the same
   // priority.
   const QuicStreamId kBlockedId = 3 + 2;
-  if (GetParam()) {
-    write_blocked_list_.RegisterStream(
-        kBlockedId, false,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
     write_blocked_list_.RegisterStream(
         kBlockedId, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
   write_blocked_list_.AddStream(kBlockedId);
   write_blocked_list_.AddStream(kBlockedId);
   write_blocked_list_.AddStream(kBlockedId);
@@ -217,10 +149,7 @@
   EXPECT_FALSE(write_blocked_list_.HasWriteBlockedDataStreams());
 }
 
-TEST_P(QuicWriteBlockedListTest, BatchingWrites) {
-  if (GetParam()) {
-    return;
-  }
+TEST_F(QuicWriteBlockedListTest, BatchingWrites) {
   const QuicStreamId id1 = 3 + 2;
   const QuicStreamId id2 = id1 + 2;
   const QuicStreamId id3 = id2 + 2;
@@ -273,62 +202,31 @@
   EXPECT_EQ(id1, write_blocked_list_.PopFront());
 }
 
-TEST_P(QuicWriteBlockedListTest, Ceding) {
-  if (GetParam()) {
-    /*
-         0
-         |
-         15
-         |
-         16
-         |
-         5
-         |
-         4
-         |
-         7
-    */
-    write_blocked_list_.RegisterStream(
-        15, false,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        16, false,
-        spdy::SpdyStreamPrecedence(15, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        4, false,
-        spdy::SpdyStreamPrecedence(16, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        5, false,
-        spdy::SpdyStreamPrecedence(16, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        7, false,
-        spdy::SpdyStreamPrecedence(4, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        1, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-    write_blocked_list_.RegisterStream(
-        3, true,
-        spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight,
-                                   kExclusiveBit));
-  } else {
-    write_blocked_list_.RegisterStream(
-        15, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        16, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(5, false, spdy::SpdyStreamPrecedence(5));
-    write_blocked_list_.RegisterStream(4, false, spdy::SpdyStreamPrecedence(5));
-    write_blocked_list_.RegisterStream(7, false, spdy::SpdyStreamPrecedence(7));
-    write_blocked_list_.RegisterStream(
-        1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-    write_blocked_list_.RegisterStream(
-        3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
-  }
+TEST_F(QuicWriteBlockedListTest, Ceding) {
+  /*
+       0
+       |
+       15
+       |
+       16
+       |
+       5
+       |
+       4
+       |
+       7
+  */
+  write_blocked_list_.RegisterStream(
+      15, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      16, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(5, false, spdy::SpdyStreamPrecedence(5));
+  write_blocked_list_.RegisterStream(4, false, spdy::SpdyStreamPrecedence(5));
+  write_blocked_list_.RegisterStream(7, false, spdy::SpdyStreamPrecedence(7));
+  write_blocked_list_.RegisterStream(
+      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+  write_blocked_list_.RegisterStream(
+      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
 
   // When nothing is on the list, nothing yields.
   EXPECT_FALSE(write_blocked_list_.ShouldYield(5));
@@ -366,66 +264,6 @@
   EXPECT_FALSE(write_blocked_list_.ShouldYield(1));
 }
 
-TEST_P(QuicWriteBlockedListTest, UpdateStreamPriority) {
-  if (!GetParam()) {
-    return;
-  }
-  /*
-       0
-       |
-       5
-       |
-       7
-       |
-       9
-       |
-       11
-  */
-  write_blocked_list_.RegisterStream(
-      5, false,
-      spdy::SpdyStreamPrecedence(0, kHttp2DefaultStreamWeight, kExclusiveBit));
-  write_blocked_list_.RegisterStream(
-      7, false,
-      spdy::SpdyStreamPrecedence(5, kHttp2DefaultStreamWeight, kExclusiveBit));
-  write_blocked_list_.RegisterStream(
-      9, false,
-      spdy::SpdyStreamPrecedence(7, kHttp2DefaultStreamWeight, kExclusiveBit));
-  write_blocked_list_.RegisterStream(
-      11, false,
-      spdy::SpdyStreamPrecedence(9, kHttp2DefaultStreamWeight, kExclusiveBit));
-
-  write_blocked_list_.AddStream(7);
-  EXPECT_FALSE(write_blocked_list_.ShouldYield(5));
-  EXPECT_TRUE(write_blocked_list_.ShouldYield(9));
-  EXPECT_TRUE(write_blocked_list_.ShouldYield(11));
-
-  // Update 9's priority.
-  if (GetParam()) {
-    /*
-         0
-         |
-         5
-        / \
-       7   9
-           |
-           11
-    */
-    write_blocked_list_.UpdateStreamPriority(
-        9, spdy::SpdyStreamPrecedence(5, kHttp2DefaultStreamWeight,
-                                      kExclusiveBit));
-  } else {
-    write_blocked_list_.UpdateStreamPriority(9, spdy::SpdyStreamPrecedence(1));
-  }
-  EXPECT_FALSE(write_blocked_list_.ShouldYield(5));
-  // Verify 9 now does not yield to 7.
-  EXPECT_FALSE(write_blocked_list_.ShouldYield(9));
-  EXPECT_FALSE(write_blocked_list_.ShouldYield(11));
-
-  write_blocked_list_.AddStream(9);
-  // Verify 11 yield to 9.
-  EXPECT_TRUE(write_blocked_list_.ShouldYield(11));
-}
-
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/quic/tools/quic_simple_server_session.cc b/quic/tools/quic_simple_server_session.cc
index 33bad6b..740b591 100644
--- a/quic/tools/quic_simple_server_session.cc
+++ b/quic/tools/quic_simple_server_session.cc
@@ -65,7 +65,7 @@
     const std::string& request_url,
     const std::list<QuicBackendResponse::ServerPushInfo>& resources,
     QuicStreamId original_stream_id,
-    const spdy::SpdyStreamPrecedence& original_precedence,
+    const spdy::SpdyStreamPrecedence& /* original_precedence */,
     const spdy::Http2HeaderBlock& original_request_headers) {
   if (!server_push_enabled()) {
     return;
@@ -85,11 +85,9 @@
     highest_promised_stream_id_ = new_highest_promised_stream_id;
     SendPushPromise(original_stream_id, highest_promised_stream_id_,
                     headers.Clone());
-    promised_streams_.push_back(PromisedStreamInfo(
-        std::move(headers), highest_promised_stream_id_,
-        use_http2_priority_write_scheduler()
-            ? original_precedence
-            : spdy::SpdyStreamPrecedence(resource.priority)));
+    promised_streams_.push_back(
+        PromisedStreamInfo(std::move(headers), highest_promised_stream_id_,
+                           spdy::SpdyStreamPrecedence(resource.priority)));
   }
 
   // Procese promised push request as many as possible.