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

Side by Side Diff: net/quic/quic_stream_sequencer.h

Issue 1414573004: Introduces QuicStreamSequencerBufferInterface with one implementation. Refactor, no behavior change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing the build file (previously missing a comma) Created 5 years, 2 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
« no previous file with comments | « net/quic/quic_frame_list.cc ('k') | net/quic/quic_stream_sequencer.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 (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 #ifndef NET_QUIC_QUIC_STREAM_SEQUENCER_H_ 5 #ifndef NET_QUIC_QUIC_STREAM_SEQUENCER_H_
6 #define NET_QUIC_QUIC_STREAM_SEQUENCER_H_ 6 #define NET_QUIC_QUIC_STREAM_SEQUENCER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 void SetUnblocked(); 71 void SetUnblocked();
72 72
73 // Blocks processing of frames until |SetUnblocked| is called. 73 // Blocks processing of frames until |SetUnblocked| is called.
74 void SetBlockedUntilFlush(); 74 void SetBlockedUntilFlush();
75 75
76 // Sets the sequencer to discard all incoming data itself and not call 76 // Sets the sequencer to discard all incoming data itself and not call
77 // |stream_->OnDataAvailable()|. |stream_->OnFinRead()| will be called 77 // |stream_->OnDataAvailable()|. |stream_->OnFinRead()| will be called
78 // automatically when the FIN is consumed (which may be immediately). 78 // automatically when the FIN is consumed (which may be immediately).
79 void StopReading(); 79 void StopReading();
80 80
81 size_t num_bytes_buffered() const { return num_bytes_buffered_; } 81 // Number of bytes in the buffer right now.
82 QuicStreamOffset num_bytes_consumed() const { return num_bytes_consumed_; } 82 size_t NumBytesBuffered() const;
83
84 // Number of bytes has been consumed.
85 QuicStreamOffset NumBytesConsumed() const;
83 86
84 int num_frames_received() const { return num_frames_received_; } 87 int num_frames_received() const { return num_frames_received_; }
85 88
86 int num_duplicate_frames_received() const { 89 int num_duplicate_frames_received() const {
87 return num_duplicate_frames_received_; 90 return num_duplicate_frames_received_;
88 } 91 }
89 92
90 int num_early_frames_received() const { return num_early_frames_received_; } 93 int num_early_frames_received() const { return num_early_frames_received_; }
91 94
92 bool ignore_read_data() const { return ignore_read_data_; } 95 bool ignore_read_data() const { return ignore_read_data_; }
93 96
94 private: 97 private:
95 friend class test::QuicStreamSequencerPeer; 98 friend class test::QuicStreamSequencerPeer;
96 99
97 // Deletes and records as consumed any buffered data that is now in-sequence. 100 // Deletes and records as consumed any buffered data that is now in-sequence.
98 // (To be called only after StopReading has been called.) 101 // (To be called only after StopReading has been called.)
99 void FlushBufferedFrames(); 102 void FlushBufferedFrames();
100 103
101 // Wait until we've seen 'offset' bytes, and then terminate the stream. 104 // Wait until we've seen 'offset' bytes, and then terminate the stream.
102 void CloseStreamAtOffset(QuicStreamOffset offset); 105 void CloseStreamAtOffset(QuicStreamOffset offset);
103 106
104 // If we've received a FIN and have processed all remaining data, then inform 107 // If we've received a FIN and have processed all remaining data, then inform
105 // the stream of FIN, and clear buffers. 108 // the stream of FIN, and clear buffers.
106 bool MaybeCloseStream(); 109 bool MaybeCloseStream();
107 110
108 // Called whenever bytes are consumed by the stream. Updates
109 // num_bytes_consumed_ and num_bytes_buffered_.
110 void RecordBytesConsumed(size_t bytes_consumed);
111
112 // The stream which owns this sequencer. 111 // The stream which owns this sequencer.
113 ReliableQuicStream* stream_; 112 ReliableQuicStream* stream_;
114 113
115 // The last data consumed by the stream. 114 // Stores received data in offset order.
116 QuicStreamOffset num_bytes_consumed_; 115 std::unique_ptr<QuicStreamSequencerBufferInterface> buffered_frames_;
Ryan Hamilton 2015/10/21 16:44:52 use scoped_ptr instead of std::unique_ptr or this
117
118 // Stores buffered frames in offset order.
119 QuicFrameList buffered_frames_;
120 116
121 // The offset, if any, we got a stream termination for. When this many bytes 117 // The offset, if any, we got a stream termination for. When this many bytes
122 // have been processed, the sequencer will be closed. 118 // have been processed, the sequencer will be closed.
123 QuicStreamOffset close_offset_; 119 QuicStreamOffset close_offset_;
124 120
125 // If true, the sequencer is blocked from passing data to the stream and will 121 // If true, the sequencer is blocked from passing data to the stream and will
126 // buffer all new incoming data until FlushBufferedFrames is called. 122 // buffer all new incoming data until FlushBufferedFrames is called.
127 bool blocked_; 123 bool blocked_;
128 124
129 // Tracks how many bytes the sequencer has buffered.
130 size_t num_bytes_buffered_;
131
132 // Count of the number of frames received. 125 // Count of the number of frames received.
133 int num_frames_received_; 126 int num_frames_received_;
134 127
135 // Count of the number of duplicate frames received. 128 // Count of the number of duplicate frames received.
136 int num_duplicate_frames_received_; 129 int num_duplicate_frames_received_;
137 130
138 // Count of the number of frames received before all previous frames were 131 // Count of the number of frames received before all previous frames were
139 // received. 132 // received.
140 int num_early_frames_received_; 133 int num_early_frames_received_;
141 134
142 // Not owned. 135 // Not owned.
143 const QuicClock* clock_; 136 const QuicClock* clock_;
144 137
145 // If true, all incoming data will be discarded. 138 // If true, all incoming data will be discarded.
146 bool ignore_read_data_; 139 bool ignore_read_data_;
147 140
148 DISALLOW_COPY_AND_ASSIGN(QuicStreamSequencer); 141 DISALLOW_COPY_AND_ASSIGN(QuicStreamSequencer);
149 }; 142 };
150 143
151 } // namespace net 144 } // namespace net
152 145
153 #endif // NET_QUIC_QUIC_STREAM_SEQUENCER_H_ 146 #endif // NET_QUIC_QUIC_STREAM_SEQUENCER_H_
OLDNEW
« no previous file with comments | « net/quic/quic_frame_list.cc ('k') | net/quic/quic_stream_sequencer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698