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

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

Issue 17518002: Add logging to the QUIC write path. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Missed one Created 7 years, 6 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_packet_generator.h ('k') | net/quic/quic_packet_generator_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 (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/quic_packet_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/quic/quic_fec_group.h" 8 #include "net/quic/quic_fec_group.h"
9 #include "net/quic/quic_utils.h" 9 #include "net/quic/quic_utils.h"
10 10
11 using base::StringPiece; 11 using base::StringPiece;
12 12
13 namespace net { 13 namespace net {
14 14
15 QuicPacketGenerator::QuicPacketGenerator(DelegateInterface* delegate, 15 QuicPacketGenerator::QuicPacketGenerator(DelegateInterface* delegate,
16 DebugDelegateInterface* debug_delegate,
16 QuicPacketCreator* creator) 17 QuicPacketCreator* creator)
17 : delegate_(delegate), 18 : delegate_(delegate),
19 debug_delegate_(debug_delegate),
18 packet_creator_(creator), 20 packet_creator_(creator),
19 should_flush_(true), 21 should_flush_(true),
20 should_send_ack_(false), 22 should_send_ack_(false),
21 should_send_feedback_(false) { 23 should_send_feedback_(false) {
22 } 24 }
23 25
24 QuicPacketGenerator::~QuicPacketGenerator() { 26 QuicPacketGenerator::~QuicPacketGenerator() {
25 for (QuicFrames::iterator it = queued_control_frames_.begin(); 27 for (QuicFrames::iterator it = queued_control_frames_.begin();
26 it != queued_control_frames_.end(); ++it) { 28 it != queued_control_frames_.end(); ++it) {
27 switch (it->type) { 29 switch (it->type) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 bool fin) { 72 bool fin) {
71 SendQueuedFrames(); 73 SendQueuedFrames();
72 74
73 size_t total_bytes_consumed = 0; 75 size_t total_bytes_consumed = 0;
74 bool fin_consumed = false; 76 bool fin_consumed = false;
75 77
76 while (delegate_->CanWrite(NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)) { 78 while (delegate_->CanWrite(NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)) {
77 QuicFrame frame; 79 QuicFrame frame;
78 size_t bytes_consumed = packet_creator_->CreateStreamFrame( 80 size_t bytes_consumed = packet_creator_->CreateStreamFrame(
79 id, data, offset + total_bytes_consumed, fin, &frame); 81 id, data, offset + total_bytes_consumed, fin, &frame);
80 bool success = packet_creator_->AddSavedFrame(frame); 82 bool success = AddFrame(frame);
81 DCHECK(success); 83 DCHECK(success);
82 84
83 total_bytes_consumed += bytes_consumed; 85 total_bytes_consumed += bytes_consumed;
84 fin_consumed = fin && bytes_consumed == data.size(); 86 fin_consumed = fin && bytes_consumed == data.size();
85 data.remove_prefix(bytes_consumed); 87 data.remove_prefix(bytes_consumed);
86 DCHECK(data.empty() || packet_creator_->BytesFree() == 0u); 88 DCHECK(data.empty() || packet_creator_->BytesFree() == 0u);
87 89
88 // TODO(ianswett): Restore packet reordering. 90 // TODO(ianswett): Restore packet reordering.
89 if (should_flush_ || !packet_creator_->HasRoomForStreamFrame()) { 91 if (should_flush_ || !packet_creator_->HasRoomForStreamFrame()) {
90 SerializeAndSendPacket(); 92 SerializeAndSendPacket();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 } 153 }
152 154
153 bool QuicPacketGenerator::HasPendingFrames() const { 155 bool QuicPacketGenerator::HasPendingFrames() const {
154 return should_send_ack_ || should_send_feedback_ || 156 return should_send_ack_ || should_send_feedback_ ||
155 !queued_control_frames_.empty(); 157 !queued_control_frames_.empty();
156 } 158 }
157 159
158 bool QuicPacketGenerator::AddNextPendingFrame() { 160 bool QuicPacketGenerator::AddNextPendingFrame() {
159 if (should_send_ack_) { 161 if (should_send_ack_) {
160 pending_ack_frame_.reset(delegate_->CreateAckFrame()); 162 pending_ack_frame_.reset(delegate_->CreateAckFrame());
161 if (!packet_creator_->AddSavedFrame(QuicFrame(pending_ack_frame_.get()))) { 163 if (!AddFrame(QuicFrame(pending_ack_frame_.get()))) {
162 // packet was full 164 // packet was full
163 return false; 165 return false;
164 } 166 }
165 should_send_ack_ = false; 167 should_send_ack_ = false;
166 return true; 168 return true;
167 } 169 }
168 170
169 if (should_send_feedback_) { 171 if (should_send_feedback_) {
170 pending_feedback_frame_.reset(delegate_->CreateFeedbackFrame()); 172 pending_feedback_frame_.reset(delegate_->CreateFeedbackFrame());
171 if (!packet_creator_->AddSavedFrame(QuicFrame( 173 if (!AddFrame(QuicFrame(pending_feedback_frame_.get()))) {
172 pending_feedback_frame_.get()))) {
173 // packet was full 174 // packet was full
174 return false; 175 return false;
175 } 176 }
176 should_send_feedback_ = false; 177 should_send_feedback_ = false;
177 return true; 178 return true;
178 } 179 }
179 180
180 DCHECK(!queued_control_frames_.empty()); 181 DCHECK(!queued_control_frames_.empty());
181 if (!packet_creator_->AddSavedFrame(queued_control_frames_.back())) { 182 if (!AddFrame(queued_control_frames_.back())) {
182 // packet was full 183 // packet was full
183 return false; 184 return false;
184 } 185 }
185 queued_control_frames_.pop_back(); 186 queued_control_frames_.pop_back();
186 return true; 187 return true;
187 } 188 }
188 189
190 bool QuicPacketGenerator::AddFrame(const QuicFrame& frame) {
191 bool success = packet_creator_->AddSavedFrame(frame);
192 if (success && debug_delegate_) {
193 debug_delegate_->OnFrameAddedToPacket(frame);
194 }
195 return success;
196 }
197
189 void QuicPacketGenerator::SerializeAndSendPacket() { 198 void QuicPacketGenerator::SerializeAndSendPacket() {
190 SerializedPacket serialized_packet = packet_creator_->SerializePacket(); 199 SerializedPacket serialized_packet = packet_creator_->SerializePacket();
191 DCHECK(serialized_packet.packet); 200 DCHECK(serialized_packet.packet);
192 delegate_->OnSerializedPacket(serialized_packet); 201 delegate_->OnSerializedPacket(serialized_packet);
193 202
194 if (packet_creator_->ShouldSendFec(false)) { 203 if (packet_creator_->ShouldSendFec(false)) {
195 SerializedPacket serialized_fec = packet_creator_->SerializeFec(); 204 SerializedPacket serialized_fec = packet_creator_->SerializeFec();
196 DCHECK(serialized_fec.packet); 205 DCHECK(serialized_fec.packet);
197 delegate_->OnSerializedPacket(serialized_fec); 206 delegate_->OnSerializedPacket(serialized_fec);
198 packet_creator_->MaybeStartFEC(); 207 packet_creator_->MaybeStartFEC();
199 } 208 }
200 } 209 }
201 210
202 } // namespace net 211 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_packet_generator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698