diff --git a/spdy/core/http2_priority_write_scheduler.h b/spdy/core/http2_priority_write_scheduler.h
index 1f72fdb..d08d125 100644
--- a/spdy/core/http2_priority_write_scheduler.h
+++ b/spdy/core/http2_priority_write_scheduler.h
@@ -76,11 +76,9 @@
   PopNextReadyStreamAndPrecedence() override;
   size_t NumReadyStreams() const override;
   bool IsStreamReady(StreamIdType stream_id) const override;
+  size_t NumRegisteredStreams() const override;
   SpdyString DebugString() const override;
 
-  // Return the number of streams currently in the tree.
-  int num_streams() const;
-
  private:
   friend class test::Http2PriorityWriteSchedulerPeer<StreamIdType>;
 
@@ -201,11 +199,6 @@
 }
 
 template <typename StreamIdType>
-int Http2PriorityWriteScheduler<StreamIdType>::num_streams() const {
-  return all_stream_infos_.size();
-}
-
-template <typename StreamIdType>
 bool Http2PriorityWriteScheduler<StreamIdType>::StreamRegistered(
     StreamIdType stream_id) const {
   return SpdyContainsKey(all_stream_infos_, stream_id);
@@ -696,8 +689,14 @@
 }
 
 template <typename StreamIdType>
+size_t Http2PriorityWriteScheduler<StreamIdType>::NumRegisteredStreams() const {
+  return all_stream_infos_.size();
+}
+
+template <typename StreamIdType>
 SpdyString Http2PriorityWriteScheduler<StreamIdType>::DebugString() const {
-  return SpdyStrCat("Http2PriorityWriteScheduler {num_streams=", num_streams(),
+  return SpdyStrCat("Http2PriorityWriteScheduler {num_registered_streams=",
+                    NumRegisteredStreams(),
                     " num_ready_streams=", NumReadyStreams(), "}");
 }
 
@@ -757,15 +756,15 @@
     }
   }
 
-  // Make sure num_streams reflects the total number of streams the map
-  // contains.
-  if (total_streams != num_streams()) {
+  // Make sure NumRegisteredStreams() reflects the total number of streams the
+  // map contains.
+  if (total_streams != NumRegisteredStreams()) {
     SPDY_DLOG(INFO) << "Map contains incorrect number of streams.";
     return false;
   }
   // Validate the validation function; we should have visited each stream twice
   // (except for the root)
-  DCHECK(streams_visited == 2 * num_streams() - 1);
+  DCHECK(streams_visited == 2 * NumRegisteredStreams() - 1);
   return true;
 }
 
diff --git a/spdy/core/http2_priority_write_scheduler_test.cc b/spdy/core/http2_priority_write_scheduler_test.cc
index 17b7721..484e59a 100644
--- a/spdy/core/http2_priority_write_scheduler_test.cc
+++ b/spdy/core/http2_priority_write_scheduler_test.cc
@@ -46,12 +46,12 @@
 };
 
 TEST_F(Http2PriorityWriteSchedulerTest, RegisterAndUnregisterStreams) {
-  EXPECT_EQ(1, scheduler_.num_streams());
+  EXPECT_EQ(1u, scheduler_.NumRegisteredStreams());
   EXPECT_TRUE(scheduler_.StreamRegistered(0));
   EXPECT_FALSE(scheduler_.StreamRegistered(1));
 
   scheduler_.RegisterStream(1, SpdyStreamPrecedence(0, 100, false));
-  EXPECT_EQ(2, scheduler_.num_streams());
+  EXPECT_EQ(2u, scheduler_.NumRegisteredStreams());
   ASSERT_TRUE(scheduler_.StreamRegistered(1));
   EXPECT_EQ(100, scheduler_.GetStreamPrecedence(1).weight());
   EXPECT_FALSE(scheduler_.StreamRegistered(5));
@@ -62,14 +62,14 @@
   EXPECT_SPDY_BUG(
       scheduler_.RegisterStream(5, SpdyStreamPrecedence(1, 50, false)),
       "Stream 5 already registered");
-  EXPECT_EQ(3, scheduler_.num_streams());
+  EXPECT_EQ(3u, scheduler_.NumRegisteredStreams());
   EXPECT_TRUE(scheduler_.StreamRegistered(1));
   ASSERT_TRUE(scheduler_.StreamRegistered(5));
   EXPECT_EQ(50, scheduler_.GetStreamPrecedence(5).weight());
   EXPECT_FALSE(scheduler_.StreamRegistered(13));
 
   scheduler_.RegisterStream(13, SpdyStreamPrecedence(5, 130, true));
-  EXPECT_EQ(4, scheduler_.num_streams());
+  EXPECT_EQ(4u, scheduler_.NumRegisteredStreams());
   EXPECT_TRUE(scheduler_.StreamRegistered(1));
   EXPECT_TRUE(scheduler_.StreamRegistered(5));
   ASSERT_TRUE(scheduler_.StreamRegistered(13));
@@ -79,7 +79,7 @@
   scheduler_.UnregisterStream(5);
   // Cannot remove a stream that has already been removed.
   EXPECT_SPDY_BUG(scheduler_.UnregisterStream(5), "Stream 5 not registered");
-  EXPECT_EQ(3, scheduler_.num_streams());
+  EXPECT_EQ(3u, scheduler_.NumRegisteredStreams());
   EXPECT_TRUE(scheduler_.StreamRegistered(1));
   EXPECT_FALSE(scheduler_.StreamRegistered(5));
   EXPECT_TRUE(scheduler_.StreamRegistered(13));
diff --git a/spdy/core/priority_write_scheduler.h b/spdy/core/priority_write_scheduler.h
index bcacb25..e438583 100644
--- a/spdy/core/priority_write_scheduler.h
+++ b/spdy/core/priority_write_scheduler.h
@@ -258,6 +258,8 @@
   // Returns the number of ready streams.
   size_t NumReadyStreams() const override { return num_ready_streams_; }
 
+  size_t NumRegisteredStreams() const override { return stream_infos_.size(); }
+
   SpdyString DebugString() const override {
     return SpdyStrCat(
         "PriorityWriteScheduler {num_streams=", stream_infos_.size(),
diff --git a/spdy/core/priority_write_scheduler_test.cc b/spdy/core/priority_write_scheduler_test.cc
index ae348be..7488820 100644
--- a/spdy/core/priority_write_scheduler_test.cc
+++ b/spdy/core/priority_write_scheduler_test.cc
@@ -40,8 +40,10 @@
 TEST_F(PriorityWriteSchedulerTest, RegisterUnregisterStreams) {
   EXPECT_FALSE(scheduler_.HasReadyStreams());
   EXPECT_FALSE(scheduler_.StreamRegistered(1));
+  EXPECT_EQ(0u, scheduler_.NumRegisteredStreams());
   scheduler_.RegisterStream(1, SpdyStreamPrecedence(1));
   EXPECT_TRUE(scheduler_.StreamRegistered(1));
+  EXPECT_EQ(1u, scheduler_.NumRegisteredStreams());
 
   // Root stream counts as already registered.
   EXPECT_SPDY_BUG(
@@ -55,12 +57,15 @@
                   "Stream 1 already registered");
 
   scheduler_.RegisterStream(2, SpdyStreamPrecedence(3));
+  EXPECT_EQ(2u, scheduler_.NumRegisteredStreams());
 
   // Verify registration != ready.
   EXPECT_FALSE(scheduler_.HasReadyStreams());
 
   scheduler_.UnregisterStream(1);
+  EXPECT_EQ(1u, scheduler_.NumRegisteredStreams());
   scheduler_.UnregisterStream(2);
+  EXPECT_EQ(0u, scheduler_.NumRegisteredStreams());
 
   // Try redundant unregistration.
   EXPECT_SPDY_BUG(scheduler_.UnregisterStream(1), "Stream 1 not registered");
diff --git a/spdy/core/spdy_protocol.h b/spdy/core/spdy_protocol.h
index 92893d2..2d2ce96 100644
--- a/spdy/core/spdy_protocol.h
+++ b/spdy/core/spdy_protocol.h
@@ -196,6 +196,15 @@
   ERROR_CODE_MAX = ERROR_CODE_HTTP_1_1_REQUIRED
 };
 
+// Type of priority write scheduler.
+enum class WriteSchedulerType {
+  LIFO,  // Last added stream has the highest priority.
+  SPDY,  // Uses SPDY priorities described in
+         // https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1#TOC-2.3.3-Stream-priority.
+  HTTP2,  // Uses HTTP2 (tree-style) priority described in
+          // https://tools.ietf.org/html/rfc7540#section-5.3.
+};
+
 // A SPDY priority is a number between 0 and 7 (inclusive).
 typedef uint8_t SpdyPriority;
 
diff --git a/spdy/core/write_scheduler.h b/spdy/core/write_scheduler.h
index 7906ad7..98db442 100644
--- a/spdy/core/write_scheduler.h
+++ b/spdy/core/write_scheduler.h
@@ -150,6 +150,9 @@
   // Returns true if stream with |stream_id| is ready.
   virtual bool IsStreamReady(StreamIdType stream_id) const = 0;
 
+  // Returns the number of registered streams.
+  virtual size_t NumRegisteredStreams() const = 0;
+
   // Returns summary of internal state, for logging/debugging.
   virtual SpdyString DebugString() const = 0;
 };
