| 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 // stream_id is not necessary to be on the ready list. | 72 return !ready_streams_.empty() && stream_id < *ready_streams_.rbegin(); |
| 73 return stream_id < *ready_streams_.rbegin(); | |
| 74 } | 73 } |
| 75 | 74 |
| 76 void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override; | 75 void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override; |
| 77 | 76 |
| 78 void MarkStreamNotReady(StreamIdType stream_id) override; | 77 void MarkStreamNotReady(StreamIdType stream_id) override; |
| 79 | 78 |
| 80 bool HasReadyStreams() const override { return !ready_streams_.empty(); } | 79 bool HasReadyStreams() const override { return !ready_streams_.empty(); } |
| 81 size_t NumReadyStreams() const override { return ready_streams_.size(); } | 80 size_t NumReadyStreams() const override { return ready_streams_.size(); } |
| 82 | 81 |
| 83 private: | 82 private: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 99 } | 98 } |
| 100 | 99 |
| 101 template <typename StreamIdType> | 100 template <typename StreamIdType> |
| 102 void LifoWriteScheduler<StreamIdType>::UnregisterStream( | 101 void LifoWriteScheduler<StreamIdType>::UnregisterStream( |
| 103 StreamIdType stream_id) { | 102 StreamIdType stream_id) { |
| 104 if (!StreamRegistered(stream_id)) { | 103 if (!StreamRegistered(stream_id)) { |
| 105 SPDY_BUG << "Stream " << stream_id << " is not registered"; | 104 SPDY_BUG << "Stream " << stream_id << " is not registered"; |
| 106 return; | 105 return; |
| 107 } | 106 } |
| 108 registered_streams_.erase(stream_id); | 107 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 SPDY_BUG << "Stream already exists in the list"; | 164 VLOG(1) << "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 SPDY_BUG << "Try to remove a stream that is not on list"; | 175 VLOG(1) << "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 |