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

Side by Side Diff: net/quic/core/quic_headers_stream.cc

Issue 2589983002: Create a QUIC wrapper around scoped_refptr. (Closed)
Patch Set: rm = nullptr Created 4 years 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
« no previous file with comments | « net/quic/core/quic_headers_stream.h ('k') | net/quic/core/quic_headers_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/core/quic_headers_stream.h" 5 #include "net/quic/core/quic_headers_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // session layer. |ForceAckListener| filters the |OnPacketAcked()| 63 // session layer. |ForceAckListener| filters the |OnPacketAcked()|
64 // notifications generated by the session layer to not count the extra 64 // notifications generated by the session layer to not count the extra
65 // bytes. Otherwise, code that is using ack listener on streams might 65 // bytes. Otherwise, code that is using ack listener on streams might
66 // consider it an error if more bytes are acked than were written to 66 // consider it an error if more bytes are acked than were written to
67 // the stream, it is the case with some internal stats gathering code. 67 // the stream, it is the case with some internal stats gathering code.
68 class ForceHolAckListener : public QuicAckListenerInterface { 68 class ForceHolAckListener : public QuicAckListenerInterface {
69 public: 69 public:
70 // |extra_bytes| should be initialized to the size of the HTTP/2 70 // |extra_bytes| should be initialized to the size of the HTTP/2
71 // DATA frame header inserted when forced HOL blocking is enabled. 71 // DATA frame header inserted when forced HOL blocking is enabled.
72 ForceHolAckListener( 72 ForceHolAckListener(
73 scoped_refptr<QuicAckListenerInterface> stream_ack_listener, 73 QuicReferenceCountedPointer<QuicAckListenerInterface> stream_ack_listener,
74 int extra_bytes) 74 int extra_bytes)
75 : stream_ack_listener_(std::move(stream_ack_listener)), 75 : stream_ack_listener_(std::move(stream_ack_listener)),
76 extra_bytes_(extra_bytes) { 76 extra_bytes_(extra_bytes) {
77 DCHECK_GE(extra_bytes, 0); 77 DCHECK_GE(extra_bytes, 0);
78 } 78 }
79 79
80 void OnPacketAcked(int acked_bytes, QuicTime::Delta ack_delay_time) override { 80 void OnPacketAcked(int acked_bytes, QuicTime::Delta ack_delay_time) override {
81 if (extra_bytes_ > 0) { 81 if (extra_bytes_ > 0) {
82 // Don't count the added HTTP/2 DATA frame header bytes 82 // Don't count the added HTTP/2 DATA frame header bytes
83 int delta = std::min(extra_bytes_, acked_bytes); 83 int delta = std::min(extra_bytes_, acked_bytes);
84 extra_bytes_ -= delta; 84 extra_bytes_ -= delta;
85 acked_bytes -= delta; 85 acked_bytes -= delta;
86 } 86 }
87 stream_ack_listener_->OnPacketAcked(acked_bytes, ack_delay_time); 87 stream_ack_listener_->OnPacketAcked(acked_bytes, ack_delay_time);
88 } 88 }
89 89
90 void OnPacketRetransmitted(int retransmitted_bytes) override { 90 void OnPacketRetransmitted(int retransmitted_bytes) override {
91 stream_ack_listener_->OnPacketRetransmitted(retransmitted_bytes); 91 stream_ack_listener_->OnPacketRetransmitted(retransmitted_bytes);
92 } 92 }
93 93
94 private: 94 protected:
95 ~ForceHolAckListener() override {} 95 ~ForceHolAckListener() override {}
96 96
97 scoped_refptr<QuicAckListenerInterface> stream_ack_listener_; 97 private:
98 QuicReferenceCountedPointer<QuicAckListenerInterface> stream_ack_listener_;
98 int extra_bytes_; 99 int extra_bytes_;
99 100
100 DISALLOW_COPY_AND_ASSIGN(ForceHolAckListener); 101 DISALLOW_COPY_AND_ASSIGN(ForceHolAckListener);
101 }; 102 };
102 103
103 } // namespace 104 } // namespace
104 105
105 QuicHeadersStream::HpackDebugVisitor::HpackDebugVisitor() {} 106 QuicHeadersStream::HpackDebugVisitor::HpackDebugVisitor() {}
106 107
107 QuicHeadersStream::HpackDebugVisitor::~HpackDebugVisitor() {} 108 QuicHeadersStream::HpackDebugVisitor::~HpackDebugVisitor() {}
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 DisableConnectionFlowControlForThisStream(); 338 DisableConnectionFlowControlForThisStream();
338 } 339 }
339 340
340 QuicHeadersStream::~QuicHeadersStream() {} 341 QuicHeadersStream::~QuicHeadersStream() {}
341 342
342 size_t QuicHeadersStream::WriteHeaders( 343 size_t QuicHeadersStream::WriteHeaders(
343 QuicStreamId stream_id, 344 QuicStreamId stream_id,
344 SpdyHeaderBlock headers, 345 SpdyHeaderBlock headers,
345 bool fin, 346 bool fin,
346 SpdyPriority priority, 347 SpdyPriority priority,
347 scoped_refptr<QuicAckListenerInterface> ack_listener) { 348 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
348 SpdyHeadersIR headers_frame(stream_id, std::move(headers)); 349 SpdyHeadersIR headers_frame(stream_id, std::move(headers));
349 headers_frame.set_fin(fin); 350 headers_frame.set_fin(fin);
350 if (session()->perspective() == Perspective::IS_CLIENT) { 351 if (session()->perspective() == Perspective::IS_CLIENT) {
351 headers_frame.set_has_priority(true); 352 headers_frame.set_has_priority(true);
352 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority)); 353 headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority));
353 } 354 }
354 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(headers_frame)); 355 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(headers_frame));
355 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false, 356 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false,
356 std::move(ack_listener)); 357 std::move(ack_listener));
357 return frame.size(); 358 return frame.size();
(...skipping 16 matching lines...) Expand all
374 375
375 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(push_promise)); 376 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(push_promise));
376 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false, nullptr); 377 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false, nullptr);
377 return frame.size(); 378 return frame.size();
378 } 379 }
379 380
380 void QuicHeadersStream::WriteDataFrame( 381 void QuicHeadersStream::WriteDataFrame(
381 QuicStreamId id, 382 QuicStreamId id,
382 StringPiece data, 383 StringPiece data,
383 bool fin, 384 bool fin,
384 scoped_refptr<QuicAckListenerInterface> ack_notifier_delegate) { 385 QuicReferenceCountedPointer<QuicAckListenerInterface>
386 ack_notifier_delegate) {
385 SpdyDataIR spdy_data(id, data); 387 SpdyDataIR spdy_data(id, data);
386 spdy_data.set_fin(fin); 388 spdy_data.set_fin(fin);
387 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(spdy_data)); 389 SpdySerializedFrame frame(spdy_framer_.SerializeFrame(spdy_data));
388 scoped_refptr<ForceHolAckListener> ack_listener; 390 QuicReferenceCountedPointer<ForceHolAckListener> ack_listener;
389 if (ack_notifier_delegate != nullptr) { 391 if (ack_notifier_delegate != nullptr) {
390 ack_listener = new ForceHolAckListener(std::move(ack_notifier_delegate), 392 ack_listener = new ForceHolAckListener(std::move(ack_notifier_delegate),
391 frame.size() - data.length()); 393 frame.size() - data.length());
392 } 394 }
393 // Use buffered writes so that coherence of framing is preserved 395 // Use buffered writes so that coherence of framing is preserved
394 // between streams. 396 // between streams.
395 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false, 397 WriteOrBufferData(StringPiece(frame.data(), frame.size()), false,
396 std::move(ack_listener)); 398 std::move(ack_listener));
397 } 399 }
398 400
399 QuicConsumedData QuicHeadersStream::WritevStreamData( 401 QuicConsumedData QuicHeadersStream::WritevStreamData(
400 QuicStreamId id, 402 QuicStreamId id,
401 QuicIOVector iov, 403 QuicIOVector iov,
402 QuicStreamOffset offset, 404 QuicStreamOffset offset,
403 bool fin, 405 bool fin,
404 scoped_refptr<QuicAckListenerInterface> ack_notifier_delegate) { 406 QuicReferenceCountedPointer<QuicAckListenerInterface>
407 ack_notifier_delegate) {
405 const size_t max_len = 408 const size_t max_len =
406 kSpdyInitialFrameSizeLimit - SpdyConstants::kDataFrameMinimumSize; 409 kSpdyInitialFrameSizeLimit - SpdyConstants::kDataFrameMinimumSize;
407 410
408 QuicConsumedData result(0, false); 411 QuicConsumedData result(0, false);
409 size_t total_length = iov.total_length; 412 size_t total_length = iov.total_length;
410 413
411 if (total_length == 0 && fin) { 414 if (total_length == 0 && fin) {
412 WriteDataFrame(id, StringPiece(), true, std::move(ack_notifier_delegate)); 415 WriteDataFrame(id, StringPiece(), true, std::move(ack_notifier_delegate));
413 result.fin_consumed = true; 416 result.fin_consumed = true;
414 return result; 417 return result;
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 return true; 629 return true;
627 } 630 }
628 frame_len_ -= len; 631 frame_len_ -= len;
629 // Ignore fin_ while there is more data coming, if frame_len_ > 0. 632 // Ignore fin_ while there is more data coming, if frame_len_ > 0.
630 spdy_session_->OnStreamFrameData(stream_id, data, len, 633 spdy_session_->OnStreamFrameData(stream_id, data, len,
631 frame_len_ > 0 ? false : fin_); 634 frame_len_ > 0 ? false : fin_);
632 return true; 635 return true;
633 } 636 }
634 637
635 } // namespace net 638 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_headers_stream.h ('k') | net/quic/core/quic_headers_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698