OLD | NEW |
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ | 5 #ifndef NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ |
6 #define NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ | 6 #define NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 | 62 |
63 StreamIdType PopNextReadyStream() override; | 63 StreamIdType PopNextReadyStream() override; |
64 | 64 |
65 std::tuple<StreamIdType, StreamPrecedenceType> | 65 std::tuple<StreamIdType, StreamPrecedenceType> |
66 PopNextReadyStreamAndPrecedence() override { | 66 PopNextReadyStreamAndPrecedence() override { |
67 return std::make_tuple(PopNextReadyStream(), | 67 return std::make_tuple(PopNextReadyStream(), |
68 StreamPrecedenceType(kV3LowestPriority)); | 68 StreamPrecedenceType(kV3LowestPriority)); |
69 } | 69 } |
70 | 70 |
71 bool ShouldYield(StreamIdType stream_id) const override { | 71 bool ShouldYield(StreamIdType stream_id) const override { |
72 return !ready_streams_.empty() && stream_id < *ready_streams_.rbegin(); | 72 // stream_id is not necessary to be on the ready list. |
| 73 return stream_id < *ready_streams_.rbegin(); |
73 } | 74 } |
74 | 75 |
75 void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override; | 76 void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override; |
76 | 77 |
77 void MarkStreamNotReady(StreamIdType stream_id) override; | 78 void MarkStreamNotReady(StreamIdType stream_id) override; |
78 | 79 |
79 bool HasReadyStreams() const override { return !ready_streams_.empty(); } | 80 bool HasReadyStreams() const override { return !ready_streams_.empty(); } |
80 size_t NumReadyStreams() const override { return ready_streams_.size(); } | 81 size_t NumReadyStreams() const override { return ready_streams_.size(); } |
81 | 82 |
82 private: | 83 private: |
(...skipping 15 matching lines...) Expand all Loading... |
98 } | 99 } |
99 | 100 |
100 template <typename StreamIdType> | 101 template <typename StreamIdType> |
101 void LifoWriteScheduler<StreamIdType>::UnregisterStream( | 102 void LifoWriteScheduler<StreamIdType>::UnregisterStream( |
102 StreamIdType stream_id) { | 103 StreamIdType stream_id) { |
103 if (!StreamRegistered(stream_id)) { | 104 if (!StreamRegistered(stream_id)) { |
104 SPDY_BUG << "Stream " << stream_id << " is not registered"; | 105 SPDY_BUG << "Stream " << stream_id << " is not registered"; |
105 return; | 106 return; |
106 } | 107 } |
107 registered_streams_.erase(stream_id); | 108 registered_streams_.erase(stream_id); |
108 ready_streams_.erase(stream_id); | |
109 } | 109 } |
110 | 110 |
111 template <typename StreamIdType> | 111 template <typename StreamIdType> |
112 void LifoWriteScheduler<StreamIdType>::RecordStreamEventTime( | 112 void LifoWriteScheduler<StreamIdType>::RecordStreamEventTime( |
113 StreamIdType stream_id, | 113 StreamIdType stream_id, |
114 int64_t now_in_usec) { | 114 int64_t now_in_usec) { |
115 auto it = registered_streams_.find(stream_id); | 115 auto it = registered_streams_.find(stream_id); |
116 if (it != registered_streams_.end()) { | 116 if (it != registered_streams_.end()) { |
117 it->second = now_in_usec; | 117 it->second = now_in_usec; |
118 } else { | 118 } else { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 } | 154 } |
155 | 155 |
156 template <typename StreamIdType> | 156 template <typename StreamIdType> |
157 void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id, | 157 void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id, |
158 bool /*add_to_front*/) { | 158 bool /*add_to_front*/) { |
159 if (!StreamRegistered(stream_id)) { | 159 if (!StreamRegistered(stream_id)) { |
160 SPDY_BUG << "Stream " << stream_id << " is not registered"; | 160 SPDY_BUG << "Stream " << stream_id << " is not registered"; |
161 return; | 161 return; |
162 } | 162 } |
163 if (ready_streams_.find(stream_id) != ready_streams_.end()) { | 163 if (ready_streams_.find(stream_id) != ready_streams_.end()) { |
164 VLOG(1) << "Stream already exists in the list"; | 164 SPDY_BUG << "Stream already exists in the list"; |
165 return; | 165 return; |
166 } | 166 } |
167 ready_streams_.insert(stream_id); | 167 ready_streams_.insert(stream_id); |
168 } | 168 } |
169 | 169 |
170 template <typename StreamIdType> | 170 template <typename StreamIdType> |
171 void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady( | 171 void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady( |
172 StreamIdType stream_id) { | 172 StreamIdType stream_id) { |
173 auto it = ready_streams_.find(stream_id); | 173 auto it = ready_streams_.find(stream_id); |
174 if (it == ready_streams_.end()) { | 174 if (it == ready_streams_.end()) { |
175 VLOG(1) << "Try to remove a stream that is not on list"; | 175 SPDY_BUG << "Try to remove a stream that is not on list"; |
176 return; | 176 return; |
177 } | 177 } |
178 ready_streams_.erase(it); | 178 ready_streams_.erase(it); |
179 } | 179 } |
180 | 180 |
181 } // namespace net | 181 } // namespace net |
182 | 182 |
183 #endif // NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ | 183 #endif // NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_ |
OLD | NEW |