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

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

Issue 11416155: Adding transmission times for every QUIC packet received in the AckFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Done Created 8 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 | Annotate | Revision Log
« net/quic/quic_protocol.h ('K') | « net/quic/quic_protocol.h ('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/quic_protocol.h" 5 #include "net/quic/quic_protocol.h"
6 #include "base/stl_util.h"
6 7
7 using base::StringPiece; 8 using base::StringPiece;
9 using std::map;
8 using std::ostream; 10 using std::ostream;
9 11
10 namespace net { 12 namespace net {
11 13
12 QuicStreamFrame::QuicStreamFrame() {} 14 QuicStreamFrame::QuicStreamFrame() {}
13 15
14 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, 16 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
15 bool fin, 17 bool fin,
16 uint64 offset, 18 uint64 offset,
17 StringPiece data) 19 StringPiece data)
18 : stream_id(stream_id), 20 : stream_id(stream_id),
19 fin(fin), 21 fin(fin),
20 offset(offset), 22 offset(offset),
21 data(data) { 23 data(data) {
22 } 24 }
23 25
24 ReceivedPacketInfo::ReceivedPacketInfo() {} 26 // TODO(ianswett): Initializing largest_received to 0 should not be necessary.
27 ReceivedPacketInfo::ReceivedPacketInfo() : largest_received(0) {}
25 28
26 ReceivedPacketInfo::~ReceivedPacketInfo() {} 29 ReceivedPacketInfo::~ReceivedPacketInfo() {}
27 30
31 void ReceivedPacketInfo::RecordAck(QuicPacketSequenceNumber sequence_number,
32 QuicTime time) {
33 DCHECK(!ContainsAck(sequence_number));
34 received_packet_times[sequence_number] = time;
35 if (largest_received < sequence_number) {
36 largest_received = sequence_number;
37 }
38 }
39
40 bool ReceivedPacketInfo::ContainsAck(
41 QuicPacketSequenceNumber sequence_number) const {
42 return ContainsKey(received_packet_times, sequence_number);
43 }
44
45 void ReceivedPacketInfo::ClearAcksBefore(
46 QuicPacketSequenceNumber least_unacked) {
47 for (QuicPacketSequenceNumber i = received_packet_times.begin()->first;
48 i < least_unacked; ++i) {
49 received_packet_times.erase(i);
50 }
51 }
52
28 SentPacketInfo::SentPacketInfo() {} 53 SentPacketInfo::SentPacketInfo() {}
29 54
30 SentPacketInfo::~SentPacketInfo() {} 55 SentPacketInfo::~SentPacketInfo() {}
31 56
57 QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_received,
58 QuicTime time_received,
59 QuicPacketSequenceNumber least_unacked) {
60 received_info.largest_received = largest_received;
61 if (largest_received > 0) {
62 for (QuicPacketSequenceNumber seq_num = 0;
63 seq_num <= largest_received; ++seq_num) {
64 received_info.RecordAck(seq_num, time_received);
65 }
66 }
67 sent_info.least_unacked = least_unacked;
68 congestion_info.type = kNone;
69 }
70
32 ostream& operator<<(ostream& os, const QuicAckFrame& s) { 71 ostream& operator<<(ostream& os, const QuicAckFrame& s) {
33 os << "largest_received: " << s.received_info.largest_received 72 os << "sent info { least_waiting: " << s.sent_info.least_unacked << " } "
34 << " time: " << s.received_info.time_received.ToMicroseconds() 73 << "received info { largest_received: "
35 << " missing: "; 74 << s.received_info.largest_received
36 for (SequenceSet::const_iterator it = s.received_info.missing_packets.begin(); 75 << " received packets: [ ";
37 it != s.received_info.missing_packets.end(); ++it) { 76 for (map<QuicPacketSequenceNumber, QuicTime>::const_iterator it =
38 os << *it << " "; 77 s.received_info.received_packet_times.begin();
78 it != s.received_info.received_packet_times.end(); ++it) {
79 os << it->first << "@" << it->second.ToMilliseconds() << " ";
39 } 80 }
40 81
41 os << " least_waiting: " << s.sent_info.least_unacked 82 os << "] } congestion info { type: " << s.congestion_info.type;
42 << " no_retransmit: "; 83 switch (s.congestion_info.type) {
43 for (SequenceSet::const_iterator it = s.sent_info.non_retransmiting.begin(); 84 case kNone:
44 it != s.sent_info.non_retransmiting.end(); ++it) { 85 break;
45 os << *it << " "; 86 case kInterArrival: {
87 const CongestionFeedbackMessageInterArrival& inter_arrival =
88 s.congestion_info.inter_arrival;
89 os << " accumulated_number_of_lost_packets: "
90 << inter_arrival.accumulated_number_of_lost_packets;
91 os << " offset_time: " << inter_arrival.offset_time;
92 os << " delta_time: " << inter_arrival.delta_time;
93 break;
94 }
95 case kFixRate: {
96 os << " bitrate_in_bytes_per_second: "
97 << s.congestion_info.fix_rate.bitrate_in_bytes_per_second;
98 break;
99 }
100 case kTCP: {
101 const CongestionFeedbackMessageTCP& tcp = s.congestion_info.tcp;
102 os << " accumulated_number_of_lost_packets: "
103 << tcp.accumulated_number_of_lost_packets;
104 os << " receive_window: " << tcp.receive_window;
105 break;
106 }
46 } 107 }
47 os << "\n"; 108 os << " }\n";
48 return os; 109 return os;
49 } 110 }
50 111
51 QuicFecData::QuicFecData() {} 112 QuicFecData::QuicFecData() {}
52 113
53 bool QuicFecData::operator==(const QuicFecData& other) const { 114 bool QuicFecData::operator==(const QuicFecData& other) const {
54 if (fec_group != other.fec_group) { 115 if (fec_group != other.fec_group) {
55 return false; 116 return false;
56 } 117 }
57 if (min_protected_packet_sequence_number != 118 if (min_protected_packet_sequence_number !=
58 other.min_protected_packet_sequence_number) { 119 other.min_protected_packet_sequence_number) {
59 return false; 120 return false;
60 } 121 }
61 if (redundancy != other.redundancy) { 122 if (redundancy != other.redundancy) {
62 return false; 123 return false;
63 } 124 }
64 return true; 125 return true;
65 } 126 }
66 127
67 QuicData::~QuicData() { 128 QuicData::~QuicData() {
68 if (owns_buffer_) { 129 if (owns_buffer_) {
69 delete [] const_cast<char*>(buffer_); 130 delete [] const_cast<char*>(buffer_);
70 } 131 }
71 } 132 }
72 133
73 } // namespace net 134 } // namespace net
OLDNEW
« net/quic/quic_protocol.h ('K') | « net/quic/quic_protocol.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698