Commit c443c00c authored by yasong's avatar yasong Committed by Commit bot

Enable HTTP/2 to use a LIFO scheduler to schedule write.

This CL lands server change 152524616 by yasong.

BUG=488484

Review-Url: https://codereview.chromium.org/2844963005
Cr-Commit-Position: refs/heads/master@{#467971}
parent b62c659f
...@@ -69,8 +69,7 @@ class LifoWriteScheduler : public WriteScheduler<StreamIdType> { ...@@ -69,8 +69,7 @@ class LifoWriteScheduler : public WriteScheduler<StreamIdType> {
} }
bool ShouldYield(StreamIdType stream_id) const override { bool ShouldYield(StreamIdType stream_id) const override {
// stream_id is not necessary to be on the ready list. return !ready_streams_.empty() && stream_id < *ready_streams_.rbegin();
return stream_id < *ready_streams_.rbegin();
} }
void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override; void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override;
...@@ -106,6 +105,7 @@ void LifoWriteScheduler<StreamIdType>::UnregisterStream( ...@@ -106,6 +105,7 @@ void LifoWriteScheduler<StreamIdType>::UnregisterStream(
return; return;
} }
registered_streams_.erase(stream_id); registered_streams_.erase(stream_id);
ready_streams_.erase(stream_id);
} }
template <typename StreamIdType> template <typename StreamIdType>
...@@ -161,7 +161,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id, ...@@ -161,7 +161,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id,
return; return;
} }
if (ready_streams_.find(stream_id) != ready_streams_.end()) { if (ready_streams_.find(stream_id) != ready_streams_.end()) {
SPDY_BUG << "Stream already exists in the list"; VLOG(1) << "Stream already exists in the list";
return; return;
} }
ready_streams_.insert(stream_id); ready_streams_.insert(stream_id);
...@@ -172,7 +172,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady( ...@@ -172,7 +172,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady(
StreamIdType stream_id) { StreamIdType stream_id) {
auto it = ready_streams_.find(stream_id); auto it = ready_streams_.find(stream_id);
if (it == ready_streams_.end()) { if (it == ready_streams_.end()) {
SPDY_BUG << "Try to remove a stream that is not on list"; VLOG(1) << "Try to remove a stream that is not on list";
return; return;
} }
ready_streams_.erase(it); ready_streams_.erase(it);
......
...@@ -61,12 +61,11 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) { ...@@ -61,12 +61,11 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) {
EXPECT_TRUE(lifo.HasReadyStreams()); EXPECT_TRUE(lifo.HasReadyStreams());
EXPECT_EQ((uint32_t)7, lifo.NumReadyStreams()); EXPECT_EQ((uint32_t)7, lifo.NumReadyStreams());
EXPECT_SPDY_BUG(lifo.MarkStreamReady(11, true), // Verify MarkStream(Not)Ready() can be called multiple times for the same
"Stream already exists in the list"); // stream.
EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(5), lifo.MarkStreamReady(11, true);
"Try to remove a stream that is not on list"); lifo.MarkStreamNotReady(5);
EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(21), lifo.MarkStreamNotReady(21);
"Try to remove a stream that is not on list");
EXPECT_EQ((uint32_t)17, lifo.PopNextReadyStream()); EXPECT_EQ((uint32_t)17, lifo.PopNextReadyStream());
EXPECT_EQ((uint32_t)15, std::get<0>(lifo.PopNextReadyStreamAndPrecedence())); EXPECT_EQ((uint32_t)15, std::get<0>(lifo.PopNextReadyStreamAndPrecedence()));
...@@ -81,6 +80,10 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) { ...@@ -81,6 +80,10 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) {
lifo.MarkStreamNotReady(7); lifo.MarkStreamNotReady(7);
EXPECT_TRUE(peer.GetReadyList()->find(7) == peer.GetReadyList()->end()); EXPECT_TRUE(peer.GetReadyList()->find(7) == peer.GetReadyList()->end());
EXPECT_EQ((uint32_t)2, lifo.NumReadyStreams()); EXPECT_EQ((uint32_t)2, lifo.NumReadyStreams());
lifo.MarkStreamNotReady(9);
lifo.MarkStreamNotReady(11);
EXPECT_FALSE(lifo.ShouldYield(1));
} }
// Test add and remove from registered list. // Test add and remove from registered list.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment