Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Side by Side Diff: net/quic/reliable_quic_stream.cc

Issue 216423006: Send BLOCKED frame directly from ReliableQuicStream. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_session.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/quic/reliable_quic_stream.h" 5 #include "net/quic/reliable_quic_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/quic/iovector.h" 8 #include "net/quic/iovector.h"
9 #include "net/quic/quic_session.h" 9 #include "net/quic/quic_session.h"
10 #include "net/quic/quic_write_blocked_list.h" 10 #include "net/quic/quic_write_blocked_list.h"
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 344
345 // How much data we are allowed to write from flow control. 345 // How much data we are allowed to write from flow control.
346 size_t send_window = SendWindowSize(); 346 size_t send_window = SendWindowSize();
347 347
348 // A FIN with zero data payload should not be flow control blocked. 348 // A FIN with zero data payload should not be flow control blocked.
349 bool fin_with_zero_data = (fin && write_length == 0); 349 bool fin_with_zero_data = (fin && write_length == 0);
350 350
351 if (IsFlowControlEnabled()) { 351 if (IsFlowControlEnabled()) {
352 if (send_window == 0 && !fin_with_zero_data) { 352 if (send_window == 0 && !fin_with_zero_data) {
353 // Quick return if we can't send anything. 353 // Quick return if we can't send anything.
354 session_->MarkFlowControlBlocked(id(), EffectivePriority()); 354 session()->connection()->SendBlocked(id());
355 return QuicConsumedData(0, false); 355 return QuicConsumedData(0, false);
356 } 356 }
357 357
358 if (write_length > send_window) { 358 if (write_length > send_window) {
359 // Don't send the FIN if we aren't going to send all the data. 359 // Don't send the FIN if we aren't going to send all the data.
360 fin = false; 360 fin = false;
361 361
362 // Writing more data would be a violation of flow control. 362 // Writing more data would be a violation of flow control.
363 write_length = send_window; 363 write_length = send_window;
364 } 364 }
(...skipping 11 matching lines...) Expand all
376 if (IsFlowControlEnabled() && write_length == send_window && 376 if (IsFlowControlEnabled() && write_length == send_window &&
377 !fin_with_zero_data) { 377 !fin_with_zero_data) {
378 DVLOG(1) << ENDPOINT << "Stream " << id() 378 DVLOG(1) << ENDPOINT << "Stream " << id()
379 << " is flow control blocked. " 379 << " is flow control blocked. "
380 << "Send window: " << send_window 380 << "Send window: " << send_window
381 << ", stream_bytes_written: " << stream_bytes_written_ 381 << ", stream_bytes_written: " << stream_bytes_written_
382 << ", flow_control_send_limit: " 382 << ", flow_control_send_limit: "
383 << flow_control_send_limit_; 383 << flow_control_send_limit_;
384 // The entire send_window has been consumed, we are now flow control 384 // The entire send_window has been consumed, we are now flow control
385 // blocked. 385 // blocked.
386 session_->MarkFlowControlBlocked(id(), EffectivePriority()); 386 session()->connection()->SendBlocked(id());
387 } 387 }
388 if (fin && consumed_data.fin_consumed) { 388 if (fin && consumed_data.fin_consumed) {
389 fin_sent_ = true; 389 fin_sent_ = true;
390 CloseWriteSide(); 390 CloseWriteSide();
391 } else if (fin && !consumed_data.fin_consumed) { 391 } else if (fin && !consumed_data.fin_consumed) {
392 session_->MarkWriteBlocked(id(), EffectivePriority()); 392 session_->MarkWriteBlocked(id(), EffectivePriority());
393 } 393 }
394 } else { 394 } else {
395 session_->MarkWriteBlocked(id(), EffectivePriority()); 395 session_->MarkWriteBlocked(id(), EffectivePriority());
396 } 396 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 484
485 uint64 ReliableQuicStream::SendWindowSize() const { 485 uint64 ReliableQuicStream::SendWindowSize() const {
486 return flow_control_send_limit_ - stream_bytes_written(); 486 return flow_control_send_limit_ - stream_bytes_written();
487 } 487 }
488 488
489 uint64 ReliableQuicStream::TotalReceivedBytes() const { 489 uint64 ReliableQuicStream::TotalReceivedBytes() const {
490 return sequencer_.num_bytes_consumed() + sequencer_.num_bytes_buffered(); 490 return sequencer_.num_bytes_consumed() + sequencer_.num_bytes_buffered();
491 } 491 }
492 492
493 } // namespace net 493 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698