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> {
}
bool ShouldYield(StreamIdType stream_id) const override {
// stream_id is not necessary to be on the ready list.
return stream_id < *ready_streams_.rbegin();
return !ready_streams_.empty() && stream_id < *ready_streams_.rbegin();
}
void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override;
......@@ -106,6 +105,7 @@ void LifoWriteScheduler<StreamIdType>::UnregisterStream(
return;
}
registered_streams_.erase(stream_id);
ready_streams_.erase(stream_id);
}
template <typename StreamIdType>
......@@ -161,7 +161,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id,
return;
}
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;
}
ready_streams_.insert(stream_id);
......@@ -172,7 +172,7 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady(
StreamIdType stream_id) {
auto it = ready_streams_.find(stream_id);
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;
}
ready_streams_.erase(it);
......
......@@ -61,12 +61,11 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) {
EXPECT_TRUE(lifo.HasReadyStreams());
EXPECT_EQ((uint32_t)7, lifo.NumReadyStreams());
EXPECT_SPDY_BUG(lifo.MarkStreamReady(11, true),
"Stream already exists in the list");
EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(5),
"Try to remove a stream that is not on list");
EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(21),
"Try to remove a stream that is not on list");
// Verify MarkStream(Not)Ready() can be called multiple times for the same
// stream.
lifo.MarkStreamReady(11, true);
lifo.MarkStreamNotReady(5);
lifo.MarkStreamNotReady(21);
EXPECT_EQ((uint32_t)17, lifo.PopNextReadyStream());
EXPECT_EQ((uint32_t)15, std::get<0>(lifo.PopNextReadyStreamAndPrecedence()));
......@@ -81,6 +80,10 @@ TEST(LifoWriteSchedulerTest, ReadyListTest) {
lifo.MarkStreamNotReady(7);
EXPECT_TRUE(peer.GetReadyList()->find(7) == peer.GetReadyList()->end());
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.
......
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