Use QuicStreamPriority in QuicWriteBlockedList.

Still no functional change.

https://github.com/google/quiche/issues/25

PiperOrigin-RevId: 495948461
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index 3355080..ae7c41a 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -17,6 +17,7 @@
 #include "quiche/quic/core/quic_connection_context.h"
 #include "quiche/quic/core/quic_error_codes.h"
 #include "quiche/quic/core/quic_flow_controller.h"
+#include "quiche/quic/core/quic_stream_priority.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/core/quic_versions.h"
@@ -1802,8 +1803,7 @@
 
 void QuicSession::RegisterStreamPriority(QuicStreamId id, bool is_static,
                                          const QuicStreamPriority& priority) {
-  write_blocked_streams()->RegisterStream(
-      id, is_static, spdy::SpdyStreamPrecedence(priority.urgency));
+  write_blocked_streams()->RegisterStream(id, is_static, priority);
 }
 
 void QuicSession::UnregisterStreamPriority(QuicStreamId id, bool is_static) {
@@ -1812,8 +1812,7 @@
 
 void QuicSession::UpdateStreamPriority(QuicStreamId id,
                                        const QuicStreamPriority& new_priority) {
-  write_blocked_streams()->UpdateStreamPriority(
-      id, spdy::SpdyStreamPrecedence(new_priority.urgency));
+  write_blocked_streams()->UpdateStreamPriority(id, new_priority);
 }
 
 void QuicSession::ActivateStream(std::unique_ptr<QuicStream> stream) {
diff --git a/quiche/quic/core/quic_write_blocked_list.cc b/quiche/quic/core/quic_write_blocked_list.cc
index ad619b1..d54ccca 100644
--- a/quiche/quic/core/quic_write_blocked_list.cc
+++ b/quiche/quic/core/quic_write_blocked_list.cc
@@ -62,18 +62,18 @@
   return id;
 }
 
-void QuicWriteBlockedList::RegisterStream(
-    QuicStreamId stream_id, bool is_static_stream,
-    const spdy::SpdyStreamPrecedence& precedence) {
+void QuicWriteBlockedList::RegisterStream(QuicStreamId stream_id,
+                                          bool is_static_stream,
+                                          const QuicStreamPriority& priority) {
   QUICHE_DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id))
       << "stream " << stream_id << " already registered";
-  QUICHE_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, spdy::SpdyStreamPrecedence(priority.urgency));
 }
 
 void QuicWriteBlockedList::UnregisterStream(QuicStreamId stream_id,
@@ -86,10 +86,10 @@
 }
 
 void QuicWriteBlockedList::UpdateStreamPriority(
-    QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& new_precedence) {
+    QuicStreamId stream_id, const QuicStreamPriority& new_priority) {
   QUICHE_DCHECK(!static_stream_collection_.IsRegistered(stream_id));
-  QUICHE_DCHECK(new_precedence.is_spdy3_priority());
-  priority_write_scheduler_.UpdateStreamPrecedence(stream_id, new_precedence);
+  priority_write_scheduler_.UpdateStreamPrecedence(
+      stream_id, spdy::SpdyStreamPrecedence(new_priority.urgency));
 }
 
 void QuicWriteBlockedList::UpdateBytesForStream(QuicStreamId stream_id,
diff --git a/quiche/quic/core/quic_write_blocked_list.h b/quiche/quic/core/quic_write_blocked_list.h
index 3020c22..30eb337 100644
--- a/quiche/quic/core/quic_write_blocked_list.h
+++ b/quiche/quic/core/quic_write_blocked_list.h
@@ -12,9 +12,11 @@
 #include "absl/container/inlined_vector.h"
 #include "quiche/http2/core/priority_write_scheduler.h"
 #include "quiche/quic/core/quic_packets.h"
+#include "quiche/quic/core/quic_stream_priority.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/quic/platform/api/quic_flags.h"
+#include "quiche/spdy/core/spdy_protocol.h"
 
 namespace quic {
 
@@ -57,12 +59,12 @@
   QuicStreamId PopFront();
 
   void RegisterStream(QuicStreamId stream_id, bool is_static_stream,
-                      const spdy::SpdyStreamPrecedence& precedence);
+                      const QuicStreamPriority& priority);
 
   void UnregisterStream(QuicStreamId stream_id, bool is_static);
 
   void UpdateStreamPriority(QuicStreamId stream_id,
-                            const spdy::SpdyStreamPrecedence& new_precedence);
+                            const QuicStreamPriority& new_priority);
 
   void UpdateBytesForStream(QuicStreamId stream_id, size_t bytes);
 
diff --git a/quiche/quic/core/quic_write_blocked_list_test.cc b/quiche/quic/core/quic_write_blocked_list_test.cc
index 784a333..ba02a08 100644
--- a/quiche/quic/core/quic_write_blocked_list_test.cc
+++ b/quiche/quic/core/quic_write_blocked_list_test.cc
@@ -15,6 +15,10 @@
 namespace test {
 namespace {
 
+// Default value for `incremental`, see RFC9218.
+// TODO(b/147306124): Add support and tests for `incremental` being true.
+constexpr bool kNotIncremental = false;
+
 class QuicWriteBlockedListTest : public QuicTestWithParam<bool> {
  public:
   QuicWriteBlockedListTest()
@@ -37,15 +41,15 @@
   // Mark streams blocked in roughly reverse priority order, and
   // verify that streams are sorted.
   write_blocked_list_.RegisterStream(
-      40, false, spdy::SpdyStreamPrecedence(kV3LowestPriority));
+      40, false, QuicStreamPriority{kV3LowestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      23, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      23, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      17, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      17, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      1, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      3, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
 
   write_blocked_list_.AddStream(40);
   EXPECT_TRUE(write_blocked_list_.IsStreamBlocked(40));
@@ -86,7 +90,7 @@
 
 TEST_F(QuicWriteBlockedListTest, CryptoStream) {
   write_blocked_list_.RegisterStream(
-      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      1, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.AddStream(1);
 
   EXPECT_EQ(1u, write_blocked_list_.NumBlockedStreams());
@@ -98,7 +102,7 @@
 
 TEST_F(QuicWriteBlockedListTest, HeadersStream) {
   write_blocked_list_.RegisterStream(
-      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      3, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.AddStream(3);
 
   EXPECT_EQ(1u, write_blocked_list_.NumBlockedStreams());
@@ -110,9 +114,9 @@
 
 TEST_F(QuicWriteBlockedListTest, VerifyHeadersStream) {
   write_blocked_list_.RegisterStream(
-      5, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      5, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      3, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.AddStream(5);
   write_blocked_list_.AddStream(3);
 
@@ -134,7 +138,8 @@
   // priority.
   const QuicStreamId kBlockedId = 3 + 2;
   write_blocked_list_.RegisterStream(
-      kBlockedId, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      kBlockedId, false,
+      QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.AddStream(kBlockedId);
   write_blocked_list_.AddStream(kBlockedId);
   write_blocked_list_.AddStream(kBlockedId);
@@ -154,11 +159,11 @@
   const QuicStreamId id2 = id1 + 2;
   const QuicStreamId id3 = id2 + 2;
   write_blocked_list_.RegisterStream(
-      id1, false, spdy::SpdyStreamPrecedence(kV3LowestPriority));
+      id1, false, QuicStreamPriority{kV3LowestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      id2, false, spdy::SpdyStreamPrecedence(kV3LowestPriority));
+      id2, false, QuicStreamPriority{kV3LowestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      id3, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      id3, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
 
   write_blocked_list_.AddStream(id1);
   write_blocked_list_.AddStream(id2);
@@ -217,16 +222,19 @@
        7
   */
   write_blocked_list_.RegisterStream(
-      15, false, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      15, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   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));
+      16, false, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
+  write_blocked_list_.RegisterStream(5, false,
+                                     QuicStreamPriority{5, kNotIncremental});
+  write_blocked_list_.RegisterStream(4, false,
+                                     QuicStreamPriority{5, kNotIncremental});
+  write_blocked_list_.RegisterStream(7, false,
+                                     QuicStreamPriority{7, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      1, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      1, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
   write_blocked_list_.RegisterStream(
-      3, true, spdy::SpdyStreamPrecedence(kV3HighestPriority));
+      3, true, QuicStreamPriority{kV3HighestPriority, kNotIncremental});
 
   // When nothing is on the list, nothing yields.
   EXPECT_FALSE(write_blocked_list_.ShouldYield(5));
diff --git a/quiche/quic/qbone/qbone_stream_test.cc b/quiche/quic/qbone/qbone_stream_test.cc
index d7e0c81..ea5fafb 100644
--- a/quiche/quic/qbone/qbone_stream_test.cc
+++ b/quiche/quic/qbone/qbone_stream_test.cc
@@ -9,6 +9,7 @@
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/core/quic_session.h"
+#include "quiche/quic/core/quic_stream_priority.h"
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/platform/api/quic_test.h"
 #include "quiche/quic/platform/api/quic_test_loopback.h"
@@ -18,7 +19,6 @@
 #include "quiche/quic/test_tools/mock_connection_id_generator.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/common/simple_buffer_allocator.h"
-#include "quiche/spdy/core/spdy_protocol.h"
 
 namespace quic {
 
@@ -70,8 +70,8 @@
     // priority.
     write_blocked_streams()->RegisterStream(
         stream_id,
-        /*is_static_stream=*/false,
-        /* precedence= */ spdy::SpdyStreamPrecedence(3));
+        /* is_static_stream = */ false,
+        QuicStreamPriority{3, QuicStreamPriority::kDefaultIncremental});
   }
 
   // The session take ownership of the stream.