OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "net/spdy/spdy_stream.h" | 5 #include "net/spdy/spdy_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW, | 185 NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW, |
186 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( | 186 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( |
187 stream_id_, -delta_window_size, send_window_size_))); | 187 stream_id_, -delta_window_size, send_window_size_))); |
188 } | 188 } |
189 | 189 |
190 void SpdyStream::IncreaseRecvWindowSize(int32 delta_window_size) { | 190 void SpdyStream::IncreaseRecvWindowSize(int32 delta_window_size) { |
191 DCHECK_GE(delta_window_size, 1); | 191 DCHECK_GE(delta_window_size, 1); |
192 // By the time a read is isued, stream may become inactive. | 192 // By the time a read is isued, stream may become inactive. |
193 if (!session_->IsStreamActive(stream_id_)) | 193 if (!session_->IsStreamActive(stream_id_)) |
194 return; | 194 return; |
| 195 |
| 196 if (!session_->is_flow_control_enabled()) |
| 197 return; |
| 198 |
195 int32 new_window_size = recv_window_size_ + delta_window_size; | 199 int32 new_window_size = recv_window_size_ + delta_window_size; |
196 if (recv_window_size_ > 0) | 200 if (recv_window_size_ > 0) |
197 DCHECK(new_window_size > 0); | 201 DCHECK(new_window_size > 0); |
198 | 202 |
199 recv_window_size_ = new_window_size; | 203 recv_window_size_ = new_window_size; |
200 net_log_.AddEvent( | 204 net_log_.AddEvent( |
201 NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW, | 205 NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW, |
202 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( | 206 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( |
203 stream_id_, delta_window_size, recv_window_size_))); | 207 stream_id_, delta_window_size, recv_window_size_))); |
204 session_->SendWindowUpdate(stream_id_, delta_window_size); | 208 session_->SendWindowUpdate(stream_id_, delta_window_size); |
205 } | 209 } |
206 | 210 |
207 void SpdyStream::DecreaseRecvWindowSize(int32 delta_window_size) { | 211 void SpdyStream::DecreaseRecvWindowSize(int32 delta_window_size) { |
208 DCHECK_GE(delta_window_size, 1); | 212 DCHECK_GE(delta_window_size, 1); |
209 | 213 |
| 214 if (!session_->is_flow_control_enabled()) |
| 215 return; |
| 216 |
210 recv_window_size_ -= delta_window_size; | 217 recv_window_size_ -= delta_window_size; |
211 net_log_.AddEvent( | 218 net_log_.AddEvent( |
212 NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW, | 219 NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW, |
213 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( | 220 make_scoped_refptr(new NetLogSpdyStreamWindowUpdateParameter( |
214 stream_id_, -delta_window_size, recv_window_size_))); | 221 stream_id_, -delta_window_size, recv_window_size_))); |
215 | 222 |
216 // Since we never decrease the initial window size, we should never hit | 223 // Since we never decrease the initial window size, we should never hit |
217 // a negative |recv_window_size_|, if we do, it's a client side bug, so we use | 224 // a negative |recv_window_size_|, if we do, it's a client side bug, so we use |
218 // PROTOCOL_ERROR for lack of a better error code. | 225 // PROTOCOL_ERROR for lack of a better error code. |
219 if (recv_window_size_ < 0) { | 226 if (recv_window_size_ < 0) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 CHECK(!closed()); | 333 CHECK(!closed()); |
327 | 334 |
328 // A zero-length read means that the stream is being closed. | 335 // A zero-length read means that the stream is being closed. |
329 if (!length) { | 336 if (!length) { |
330 metrics_.StopStream(); | 337 metrics_.StopStream(); |
331 session_->CloseStream(stream_id_, net::OK); | 338 session_->CloseStream(stream_id_, net::OK); |
332 // Note: |this| may be deleted after calling CloseStream. | 339 // Note: |this| may be deleted after calling CloseStream. |
333 return; | 340 return; |
334 } | 341 } |
335 | 342 |
336 if (session_->is_flow_control_enabled()) | 343 DecreaseRecvWindowSize(length); |
337 DecreaseRecvWindowSize(length); | |
338 | 344 |
339 // Track our bandwidth. | 345 // Track our bandwidth. |
340 metrics_.RecordBytes(length); | 346 metrics_.RecordBytes(length); |
341 recv_bytes_ += length; | 347 recv_bytes_ += length; |
342 recv_last_byte_time_ = base::TimeTicks::Now(); | 348 recv_last_byte_time_ = base::TimeTicks::Now(); |
343 | 349 |
344 if (!delegate_) { | 350 if (!delegate_) { |
345 // It should be valid for this to happen in the server push case. | 351 // It should be valid for this to happen in the server push case. |
346 // We'll return received data when delegate gets attached to the stream. | 352 // We'll return received data when delegate gets attached to the stream. |
347 IOBufferWithSize* buf = new IOBufferWithSize(length); | 353 IOBufferWithSize* buf = new IOBufferWithSize(length); |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 UMA_HISTOGRAM_TIMES("Net.SpdyStreamDownloadTime", | 686 UMA_HISTOGRAM_TIMES("Net.SpdyStreamDownloadTime", |
681 recv_last_byte_time_ - recv_first_byte_time_); | 687 recv_last_byte_time_ - recv_first_byte_time_); |
682 UMA_HISTOGRAM_TIMES("Net.SpdyStreamTime", | 688 UMA_HISTOGRAM_TIMES("Net.SpdyStreamTime", |
683 recv_last_byte_time_ - send_time_); | 689 recv_last_byte_time_ - send_time_); |
684 | 690 |
685 UMA_HISTOGRAM_COUNTS("Net.SpdySendBytes", send_bytes_); | 691 UMA_HISTOGRAM_COUNTS("Net.SpdySendBytes", send_bytes_); |
686 UMA_HISTOGRAM_COUNTS("Net.SpdyRecvBytes", recv_bytes_); | 692 UMA_HISTOGRAM_COUNTS("Net.SpdyRecvBytes", recv_bytes_); |
687 } | 693 } |
688 | 694 |
689 } // namespace net | 695 } // namespace net |
OLD | NEW |