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

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

Issue 1135373002: Updated NetLog::ParametersCallback & all related calbacks returning value as scoped_ptr<base::Value… Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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_client_session.cc ('k') | net/quic/quic_http_stream.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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/quic_connection_logger.h" 5 #include "net/quic/quic_connection_logger.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 28
29 namespace net { 29 namespace net {
30 30
31 namespace { 31 namespace {
32 32
33 // We have ranges-of-buckets in the cumulative histogram (covering 21 packet 33 // We have ranges-of-buckets in the cumulative histogram (covering 21 packet
34 // sequences) of length 2, 3, 4, ... 22. 34 // sequences) of length 2, 3, 4, ... 22.
35 // Hence the largest sample is bounded by the sum of those numbers. 35 // Hence the largest sample is bounded by the sum of those numbers.
36 const int kBoundingSampleInCumulativeHistogram = ((2 + 22) * 21) / 2; 36 const int kBoundingSampleInCumulativeHistogram = ((2 + 22) * 21) / 2;
37 37
38 base::Value* NetLogQuicPacketCallback(const IPEndPoint* self_address, 38 scoped_ptr<base::Value> NetLogQuicPacketCallback(
39 const IPEndPoint* peer_address, 39 const IPEndPoint* self_address,
40 size_t packet_size, 40 const IPEndPoint* peer_address,
41 NetLogCaptureMode /* capture_mode */) { 41 size_t packet_size,
42 base::DictionaryValue* dict = new base::DictionaryValue(); 42 NetLogCaptureMode /* capture_mode */) {
43 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
43 dict->SetString("self_address", self_address->ToString()); 44 dict->SetString("self_address", self_address->ToString());
44 dict->SetString("peer_address", peer_address->ToString()); 45 dict->SetString("peer_address", peer_address->ToString());
45 dict->SetInteger("size", packet_size); 46 dict->SetInteger("size", packet_size);
46 return dict; 47 return dict.Pass();
47 } 48 }
48 49
49 base::Value* NetLogQuicPacketSentCallback( 50 scoped_ptr<base::Value> NetLogQuicPacketSentCallback(
50 const SerializedPacket& serialized_packet, 51 const SerializedPacket& serialized_packet,
51 EncryptionLevel level, 52 EncryptionLevel level,
52 TransmissionType transmission_type, 53 TransmissionType transmission_type,
53 size_t packet_size, 54 size_t packet_size,
54 QuicTime sent_time, 55 QuicTime sent_time,
55 NetLogCaptureMode /* capture_mode */) { 56 NetLogCaptureMode /* capture_mode */) {
56 base::DictionaryValue* dict = new base::DictionaryValue(); 57 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
57 dict->SetInteger("encryption_level", level); 58 dict->SetInteger("encryption_level", level);
58 dict->SetInteger("transmission_type", transmission_type); 59 dict->SetInteger("transmission_type", transmission_type);
59 dict->SetString("packet_sequence_number", 60 dict->SetString("packet_sequence_number",
60 base::Uint64ToString(serialized_packet.sequence_number)); 61 base::Uint64ToString(serialized_packet.sequence_number));
61 dict->SetInteger("size", packet_size); 62 dict->SetInteger("size", packet_size);
62 dict->SetInteger("sent_time_us", 63 dict->SetInteger("sent_time_us",
63 static_cast<int>(sent_time.ToDebuggingValue())); 64 static_cast<int>(sent_time.ToDebuggingValue()));
64 return dict; 65 return dict.Pass();
65 } 66 }
66 67
67 base::Value* NetLogQuicPacketRetransmittedCallback( 68 scoped_ptr<base::Value> NetLogQuicPacketRetransmittedCallback(
68 QuicPacketSequenceNumber old_sequence_number, 69 QuicPacketSequenceNumber old_sequence_number,
69 QuicPacketSequenceNumber new_sequence_number, 70 QuicPacketSequenceNumber new_sequence_number,
70 NetLogCaptureMode /* capture_mode */) { 71 NetLogCaptureMode /* capture_mode */) {
71 base::DictionaryValue* dict = new base::DictionaryValue(); 72 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
72 dict->SetString("old_packet_sequence_number", 73 dict->SetString("old_packet_sequence_number",
73 base::Uint64ToString(old_sequence_number)); 74 base::Uint64ToString(old_sequence_number));
74 dict->SetString("new_packet_sequence_number", 75 dict->SetString("new_packet_sequence_number",
75 base::Uint64ToString(new_sequence_number)); 76 base::Uint64ToString(new_sequence_number));
76 return dict; 77 return dict.Pass();
77 } 78 }
78 79
79 base::Value* NetLogQuicPacketHeaderCallback( 80 scoped_ptr<base::Value> NetLogQuicPacketHeaderCallback(
80 const QuicPacketHeader* header, 81 const QuicPacketHeader* header,
81 NetLogCaptureMode /* capture_mode */) { 82 NetLogCaptureMode /* capture_mode */) {
82 base::DictionaryValue* dict = new base::DictionaryValue(); 83 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
83 dict->SetString("connection_id", 84 dict->SetString("connection_id",
84 base::Uint64ToString(header->public_header.connection_id)); 85 base::Uint64ToString(header->public_header.connection_id));
85 dict->SetInteger("reset_flag", header->public_header.reset_flag); 86 dict->SetInteger("reset_flag", header->public_header.reset_flag);
86 dict->SetInteger("version_flag", header->public_header.version_flag); 87 dict->SetInteger("version_flag", header->public_header.version_flag);
87 dict->SetString("packet_sequence_number", 88 dict->SetString("packet_sequence_number",
88 base::Uint64ToString(header->packet_sequence_number)); 89 base::Uint64ToString(header->packet_sequence_number));
89 dict->SetInteger("entropy_flag", header->entropy_flag); 90 dict->SetInteger("entropy_flag", header->entropy_flag);
90 dict->SetInteger("fec_flag", header->fec_flag); 91 dict->SetInteger("fec_flag", header->fec_flag);
91 dict->SetInteger("fec_group", static_cast<int>(header->fec_group)); 92 dict->SetInteger("fec_group", static_cast<int>(header->fec_group));
92 return dict; 93 return dict.Pass();
93 } 94 }
94 95
95 base::Value* NetLogQuicStreamFrameCallback( 96 scoped_ptr<base::Value> NetLogQuicStreamFrameCallback(
96 const QuicStreamFrame* frame, 97 const QuicStreamFrame* frame,
97 NetLogCaptureMode /* capture_mode */) { 98 NetLogCaptureMode /* capture_mode */) {
98 base::DictionaryValue* dict = new base::DictionaryValue(); 99 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
99 dict->SetInteger("stream_id", frame->stream_id); 100 dict->SetInteger("stream_id", frame->stream_id);
100 dict->SetBoolean("fin", frame->fin); 101 dict->SetBoolean("fin", frame->fin);
101 dict->SetString("offset", base::Uint64ToString(frame->offset)); 102 dict->SetString("offset", base::Uint64ToString(frame->offset));
102 dict->SetInteger("length", frame->data.TotalBufferSize()); 103 dict->SetInteger("length", frame->data.TotalBufferSize());
103 return dict; 104 return dict.Pass();
104 } 105 }
105 106
106 base::Value* NetLogQuicAckFrameCallback(const QuicAckFrame* frame, 107 scoped_ptr<base::Value> NetLogQuicAckFrameCallback(
107 NetLogCaptureMode /* capture_mode */) { 108 const QuicAckFrame* frame,
108 base::DictionaryValue* dict = new base::DictionaryValue(); 109 NetLogCaptureMode /* capture_mode */) {
110 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
109 dict->SetString("largest_observed", 111 dict->SetString("largest_observed",
110 base::Uint64ToString(frame->largest_observed)); 112 base::Uint64ToString(frame->largest_observed));
111 dict->SetInteger( 113 dict->SetInteger(
112 "delta_time_largest_observed_us", 114 "delta_time_largest_observed_us",
113 static_cast<int>(frame->delta_time_largest_observed.ToMicroseconds())); 115 static_cast<int>(frame->delta_time_largest_observed.ToMicroseconds()));
114 dict->SetInteger("entropy_hash", 116 dict->SetInteger("entropy_hash",
115 frame->entropy_hash); 117 frame->entropy_hash);
116 dict->SetBoolean("truncated", frame->is_truncated); 118 dict->SetBoolean("truncated", frame->is_truncated);
117 119
118 base::ListValue* missing = new base::ListValue(); 120 scoped_ptr<base::ListValue> missing(new base::ListValue());
119 dict->Set("missing_packets", missing); 121 dict->Set("missing_packets", missing.Pass());
120 const SequenceNumberSet& missing_packets = frame->missing_packets; 122 const SequenceNumberSet& missing_packets = frame->missing_packets;
121 for (SequenceNumberSet::const_iterator it = missing_packets.begin(); 123 for (SequenceNumberSet::const_iterator it = missing_packets.begin();
122 it != missing_packets.end(); ++it) { 124 it != missing_packets.end(); ++it) {
123 missing->AppendString(base::Uint64ToString(*it)); 125 missing->AppendString(base::Uint64ToString(*it));
124 } 126 }
125 127
126 base::ListValue* revived = new base::ListValue(); 128 scoped_ptr<base::ListValue> revived(new base::ListValue());
127 dict->Set("revived_packets", revived); 129 dict->Set("revived_packets", revived.Pass());
128 const SequenceNumberSet& revived_packets = frame->revived_packets; 130 const SequenceNumberSet& revived_packets = frame->revived_packets;
129 for (SequenceNumberSet::const_iterator it = revived_packets.begin(); 131 for (SequenceNumberSet::const_iterator it = revived_packets.begin();
130 it != revived_packets.end(); ++it) { 132 it != revived_packets.end(); ++it) {
131 revived->AppendString(base::Uint64ToString(*it)); 133 revived->AppendString(base::Uint64ToString(*it));
132 } 134 }
133 135
134 base::ListValue* received = new base::ListValue(); 136 scoped_ptr<base::ListValue> received(new base::ListValue());
135 dict->Set("received_packet_times", received); 137 dict->Set("received_packet_times", received.Pass());
136 const PacketTimeList& received_times = frame->received_packet_times; 138 const PacketTimeList& received_times = frame->received_packet_times;
137 for (PacketTimeList::const_iterator it = received_times.begin(); 139 for (PacketTimeList::const_iterator it = received_times.begin();
138 it != received_times.end(); ++it) { 140 it != received_times.end(); ++it) {
139 base::DictionaryValue* info = new base::DictionaryValue(); 141 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue());
140 info->SetInteger("sequence_number", static_cast<int>(it->first)); 142 info->SetInteger("sequence_number", static_cast<int>(it->first));
141 info->SetInteger("received", 143 info->SetInteger("received",
142 static_cast<int>(it->second.ToDebuggingValue())); 144 static_cast<int>(it->second.ToDebuggingValue()));
143 received->Append(info); 145 received->Append(info.get());
144 } 146 }
145 147
146 return dict; 148 return dict.Pass();
147 } 149 }
148 150
149 base::Value* NetLogQuicRstStreamFrameCallback( 151 scoped_ptr<base::Value> NetLogQuicRstStreamFrameCallback(
150 const QuicRstStreamFrame* frame, 152 const QuicRstStreamFrame* frame,
151 NetLogCaptureMode /* capture_mode */) { 153 NetLogCaptureMode /* capture_mode */) {
152 base::DictionaryValue* dict = new base::DictionaryValue(); 154 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
153 dict->SetInteger("stream_id", frame->stream_id); 155 dict->SetInteger("stream_id", frame->stream_id);
154 dict->SetInteger("quic_rst_stream_error", frame->error_code); 156 dict->SetInteger("quic_rst_stream_error", frame->error_code);
155 dict->SetString("details", frame->error_details); 157 dict->SetString("details", frame->error_details);
156 return dict; 158 return dict.Pass();
157 } 159 }
158 160
159 base::Value* NetLogQuicConnectionCloseFrameCallback( 161 scoped_ptr<base::Value> NetLogQuicConnectionCloseFrameCallback(
160 const QuicConnectionCloseFrame* frame, 162 const QuicConnectionCloseFrame* frame,
161 NetLogCaptureMode /* capture_mode */) { 163 NetLogCaptureMode /* capture_mode */) {
162 base::DictionaryValue* dict = new base::DictionaryValue(); 164 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
163 dict->SetInteger("quic_error", frame->error_code); 165 dict->SetInteger("quic_error", frame->error_code);
164 dict->SetString("details", frame->error_details); 166 dict->SetString("details", frame->error_details);
165 return dict; 167 return dict.Pass();
166 } 168 }
167 169
168 base::Value* NetLogQuicWindowUpdateFrameCallback( 170 scoped_ptr<base::Value> NetLogQuicWindowUpdateFrameCallback(
169 const QuicWindowUpdateFrame* frame, 171 const QuicWindowUpdateFrame* frame,
170 NetLogCaptureMode /* capture_mode */) { 172 NetLogCaptureMode /* capture_mode */) {
171 base::DictionaryValue* dict = new base::DictionaryValue(); 173 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
172 dict->SetInteger("stream_id", frame->stream_id); 174 dict->SetInteger("stream_id", frame->stream_id);
173 dict->SetString("byte_offset", base::Uint64ToString(frame->byte_offset)); 175 dict->SetString("byte_offset", base::Uint64ToString(frame->byte_offset));
174 return dict; 176 return dict.Pass();
175 } 177 }
176 178
177 base::Value* NetLogQuicBlockedFrameCallback( 179 scoped_ptr<base::Value> NetLogQuicBlockedFrameCallback(
178 const QuicBlockedFrame* frame, 180 const QuicBlockedFrame* frame,
179 NetLogCaptureMode /* capture_mode */) { 181 NetLogCaptureMode /* capture_mode */) {
180 base::DictionaryValue* dict = new base::DictionaryValue(); 182 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
181 dict->SetInteger("stream_id", frame->stream_id); 183 dict->SetInteger("stream_id", frame->stream_id);
182 return dict; 184 return dict.Pass();
183 } 185 }
184 186
185 base::Value* NetLogQuicGoAwayFrameCallback( 187 scoped_ptr<base::Value> NetLogQuicGoAwayFrameCallback(
186 const QuicGoAwayFrame* frame, 188 const QuicGoAwayFrame* frame,
187 NetLogCaptureMode /* capture_mode */) { 189 NetLogCaptureMode /* capture_mode */) {
188 base::DictionaryValue* dict = new base::DictionaryValue(); 190 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
189 dict->SetInteger("quic_error", frame->error_code); 191 dict->SetInteger("quic_error", frame->error_code);
190 dict->SetInteger("last_good_stream_id", frame->last_good_stream_id); 192 dict->SetInteger("last_good_stream_id", frame->last_good_stream_id);
191 dict->SetString("reason_phrase", frame->reason_phrase); 193 dict->SetString("reason_phrase", frame->reason_phrase);
192 return dict; 194 return dict.Pass();
193 } 195 }
194 196
195 base::Value* NetLogQuicStopWaitingFrameCallback( 197 scoped_ptr<base::Value> NetLogQuicStopWaitingFrameCallback(
196 const QuicStopWaitingFrame* frame, 198 const QuicStopWaitingFrame* frame,
197 NetLogCaptureMode /* capture_mode */) { 199 NetLogCaptureMode /* capture_mode */) {
198 base::DictionaryValue* dict = new base::DictionaryValue(); 200 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
199 base::DictionaryValue* sent_info = new base::DictionaryValue(); 201 scoped_ptr<base::DictionaryValue> sent_info(new base::DictionaryValue());
200 dict->Set("sent_info", sent_info); 202 dict->Set("sent_info", sent_info.get());
201 sent_info->SetString("least_unacked", 203 sent_info->SetString("least_unacked",
202 base::Uint64ToString(frame->least_unacked)); 204 base::Uint64ToString(frame->least_unacked));
203 return dict; 205 return dict.Pass();
204 } 206 }
205 207
206 base::Value* NetLogQuicVersionNegotiationPacketCallback( 208 scoped_ptr<base::Value> NetLogQuicVersionNegotiationPacketCallback(
207 const QuicVersionNegotiationPacket* packet, 209 const QuicVersionNegotiationPacket* packet,
208 NetLogCaptureMode /* capture_mode */) { 210 NetLogCaptureMode /* capture_mode */) {
209 base::DictionaryValue* dict = new base::DictionaryValue(); 211 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
210 base::ListValue* versions = new base::ListValue(); 212 base::ListValue* versions(new base::ListValue());
211 dict->Set("versions", versions); 213 dict->Set("versions", versions);
212 for (QuicVersionVector::const_iterator it = packet->versions.begin(); 214 for (QuicVersionVector::const_iterator it = packet->versions.begin();
213 it != packet->versions.end(); ++it) { 215 it != packet->versions.end(); ++it) {
214 versions->AppendString(QuicVersionToString(*it)); 216 versions->AppendString(QuicVersionToString(*it));
215 } 217 }
216 return dict; 218 return dict.Pass();
217 } 219 }
218 220
219 base::Value* NetLogQuicCryptoHandshakeMessageCallback( 221 scoped_ptr<base::Value> NetLogQuicCryptoHandshakeMessageCallback(
220 const CryptoHandshakeMessage* message, 222 const CryptoHandshakeMessage* message,
221 NetLogCaptureMode /* capture_mode */) { 223 NetLogCaptureMode /* capture_mode */) {
222 base::DictionaryValue* dict = new base::DictionaryValue(); 224 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
223 dict->SetString("quic_crypto_handshake_message", message->DebugString()); 225 dict->SetString("quic_crypto_handshake_message", message->DebugString());
224 return dict; 226 return dict.Pass();
225 } 227 }
226 228
227 base::Value* NetLogQuicOnConnectionClosedCallback( 229 scoped_ptr<base::Value> NetLogQuicOnConnectionClosedCallback(
228 QuicErrorCode error, 230 QuicErrorCode error,
229 bool from_peer, 231 bool from_peer,
230 NetLogCaptureMode /* capture_mode */) { 232 NetLogCaptureMode /* capture_mode */) {
231 base::DictionaryValue* dict = new base::DictionaryValue(); 233 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
232 dict->SetInteger("quic_error", error); 234 dict->SetInteger("quic_error", error);
233 dict->SetBoolean("from_peer", from_peer); 235 dict->SetBoolean("from_peer", from_peer);
234 return dict; 236 return dict.Pass();
235 } 237 }
236 238
237 base::Value* NetLogQuicCertificateVerifiedCallback( 239 scoped_ptr<base::Value> NetLogQuicCertificateVerifiedCallback(
238 scoped_refptr<X509Certificate> cert, 240 scoped_refptr<X509Certificate> cert,
239 NetLogCaptureMode /* capture_mode */) { 241 NetLogCaptureMode /* capture_mode */) {
240 // Only the subjects are logged so that we can investigate connection pooling. 242 // Only the subjects are logged so that we can investigate connection pooling.
241 // More fields could be logged in the future. 243 // More fields could be logged in the future.
242 std::vector<std::string> dns_names; 244 std::vector<std::string> dns_names;
243 cert->GetDNSNames(&dns_names); 245 cert->GetDNSNames(&dns_names);
244 base::DictionaryValue* dict = new base::DictionaryValue(); 246 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
245 base::ListValue* subjects = new base::ListValue(); 247 scoped_ptr<base::ListValue> subjects(new base::ListValue());
246 for (std::vector<std::string>::const_iterator it = dns_names.begin(); 248 for (std::vector<std::string>::const_iterator it = dns_names.begin();
247 it != dns_names.end(); it++) { 249 it != dns_names.end(); it++) {
248 subjects->Append(new base::StringValue(*it)); 250 subjects->Append(new base::StringValue(*it));
249 } 251 }
250 dict->Set("subjects", subjects); 252 dict->Set("subjects", subjects.Pass());
251 return dict; 253 return dict.Pass();
252 } 254 }
253 255
254 void UpdatePacketGapSentHistogram(size_t num_consecutive_missing_packets) { 256 void UpdatePacketGapSentHistogram(size_t num_consecutive_missing_packets) {
255 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapSent", 257 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapSent",
256 num_consecutive_missing_packets); 258 num_consecutive_missing_packets);
257 } 259 }
258 260
259 void UpdatePublicResetAddressMismatchHistogram( 261 void UpdatePublicResetAddressMismatchHistogram(
260 const IPEndPoint& server_hello_address, 262 const IPEndPoint& server_hello_address,
261 const IPEndPoint& public_reset_address) { 263 const IPEndPoint& public_reset_address) {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 RecordLossHistograms(); 346 RecordLossHistograms();
345 } 347 }
346 348
347 void QuicConnectionLogger::OnFrameAddedToPacket(const QuicFrame& frame) { 349 void QuicConnectionLogger::OnFrameAddedToPacket(const QuicFrame& frame) {
348 switch (frame.type) { 350 switch (frame.type) {
349 case PADDING_FRAME: 351 case PADDING_FRAME:
350 break; 352 break;
351 case STREAM_FRAME: 353 case STREAM_FRAME:
352 net_log_.AddEvent( 354 net_log_.AddEvent(
353 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_SENT, 355 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_SENT,
354 base::Bind(&NetLogQuicStreamFrameCallback, frame.stream_frame)); 356 base::Bind(NetLogQuicStreamFrameCallback, frame.stream_frame));
355 break; 357 break;
356 case ACK_FRAME: { 358 case ACK_FRAME: {
357 net_log_.AddEvent( 359 net_log_.AddEvent(
358 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_SENT, 360 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_SENT,
359 base::Bind(&NetLogQuicAckFrameCallback, frame.ack_frame)); 361 base::Bind(NetLogQuicAckFrameCallback, frame.ack_frame));
360 const SequenceNumberSet& missing_packets = 362 const SequenceNumberSet& missing_packets =
361 frame.ack_frame->missing_packets; 363 frame.ack_frame->missing_packets;
362 const uint8 max_ranges = std::numeric_limits<uint8>::max(); 364 const uint8 max_ranges = std::numeric_limits<uint8>::max();
363 // Compute an upper bound on the number of NACK ranges. If the bound 365 // Compute an upper bound on the number of NACK ranges. If the bound
364 // is below the max, then it clearly isn't truncated. 366 // is below the max, then it clearly isn't truncated.
365 if (missing_packets.size() < max_ranges || 367 if (missing_packets.size() < max_ranges ||
366 (*missing_packets.rbegin() - *missing_packets.begin() - 368 (*missing_packets.rbegin() - *missing_packets.begin() -
367 missing_packets.size() + 1) < max_ranges) { 369 missing_packets.size() + 1) < max_ranges) {
368 break; 370 break;
369 } 371 }
370 size_t num_ranges = 0; 372 size_t num_ranges = 0;
371 QuicPacketSequenceNumber last_missing = 0; 373 QuicPacketSequenceNumber last_missing = 0;
372 for (SequenceNumberSet::const_iterator it = missing_packets.begin(); 374 for (SequenceNumberSet::const_iterator it = missing_packets.begin();
373 it != missing_packets.end(); ++it) { 375 it != missing_packets.end(); ++it) {
374 if (*it != last_missing + 1 && ++num_ranges >= max_ranges) { 376 if (*it != last_missing + 1 && ++num_ranges >= max_ranges) {
375 ++num_truncated_acks_sent_; 377 ++num_truncated_acks_sent_;
376 break; 378 break;
377 } 379 }
378 last_missing = *it; 380 last_missing = *it;
379 } 381 }
380 break; 382 break;
381 } 383 }
382 case RST_STREAM_FRAME: 384 case RST_STREAM_FRAME:
383 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeClient", 385 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeClient",
384 frame.rst_stream_frame->error_code); 386 frame.rst_stream_frame->error_code);
385 net_log_.AddEvent( 387 net_log_.AddEvent(
386 NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_SENT, 388 NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_SENT,
387 base::Bind(&NetLogQuicRstStreamFrameCallback, 389 base::Bind(NetLogQuicRstStreamFrameCallback, frame.rst_stream_frame));
388 frame.rst_stream_frame));
389 break; 390 break;
390 case CONNECTION_CLOSE_FRAME: 391 case CONNECTION_CLOSE_FRAME:
391 net_log_.AddEvent( 392 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_CONNECTION_CLOSE_FRAME_SENT,
392 NetLog::TYPE_QUIC_SESSION_CONNECTION_CLOSE_FRAME_SENT, 393 base::Bind(NetLogQuicConnectionCloseFrameCallback,
393 base::Bind(&NetLogQuicConnectionCloseFrameCallback, 394 frame.connection_close_frame));
394 frame.connection_close_frame));
395 break; 395 break;
396 case GOAWAY_FRAME: 396 case GOAWAY_FRAME:
397 net_log_.AddEvent( 397 net_log_.AddEvent(
398 NetLog::TYPE_QUIC_SESSION_GOAWAY_FRAME_SENT, 398 NetLog::TYPE_QUIC_SESSION_GOAWAY_FRAME_SENT,
399 base::Bind(&NetLogQuicGoAwayFrameCallback, 399 base::Bind(NetLogQuicGoAwayFrameCallback, frame.goaway_frame));
400 frame.goaway_frame));
401 break; 400 break;
402 case WINDOW_UPDATE_FRAME: 401 case WINDOW_UPDATE_FRAME:
403 net_log_.AddEvent( 402 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_WINDOW_UPDATE_FRAME_SENT,
404 NetLog::TYPE_QUIC_SESSION_WINDOW_UPDATE_FRAME_SENT, 403 base::Bind(NetLogQuicWindowUpdateFrameCallback,
405 base::Bind(&NetLogQuicWindowUpdateFrameCallback, 404 frame.window_update_frame));
406 frame.window_update_frame));
407 break; 405 break;
408 case BLOCKED_FRAME: 406 case BLOCKED_FRAME:
409 ++num_blocked_frames_sent_; 407 ++num_blocked_frames_sent_;
410 net_log_.AddEvent( 408 net_log_.AddEvent(
411 NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_SENT, 409 NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_SENT,
412 base::Bind(&NetLogQuicBlockedFrameCallback, 410 base::Bind(NetLogQuicBlockedFrameCallback, frame.blocked_frame));
413 frame.blocked_frame));
414 break; 411 break;
415 case STOP_WAITING_FRAME: 412 case STOP_WAITING_FRAME:
416 net_log_.AddEvent( 413 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_SENT,
417 NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_SENT, 414 base::Bind(NetLogQuicStopWaitingFrameCallback,
418 base::Bind(&NetLogQuicStopWaitingFrameCallback, 415 frame.stop_waiting_frame));
419 frame.stop_waiting_frame));
420 break; 416 break;
421 case PING_FRAME: 417 case PING_FRAME:
422 UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.ConnectionFlowControlBlocked", 418 UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.ConnectionFlowControlBlocked",
423 session_->IsConnectionFlowControlBlocked()); 419 session_->IsConnectionFlowControlBlocked());
424 UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.StreamFlowControlBlocked", 420 UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.StreamFlowControlBlocked",
425 session_->IsStreamFlowControlBlocked()); 421 session_->IsStreamFlowControlBlocked());
426 // PingFrame has no contents to log, so just record that it was sent. 422 // PingFrame has no contents to log, so just record that it was sent.
427 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PING_FRAME_SENT); 423 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PING_FRAME_SENT);
428 break; 424 break;
429 default: 425 default:
430 DCHECK(false) << "Illegal frame type: " << frame.type; 426 DCHECK(false) << "Illegal frame type: " << frame.type;
431 } 427 }
432 } 428 }
433 429
434 void QuicConnectionLogger::OnPacketSent( 430 void QuicConnectionLogger::OnPacketSent(
435 const SerializedPacket& serialized_packet, 431 const SerializedPacket& serialized_packet,
436 QuicPacketSequenceNumber original_sequence_number, 432 QuicPacketSequenceNumber original_sequence_number,
437 EncryptionLevel level, 433 EncryptionLevel level,
438 TransmissionType transmission_type, 434 TransmissionType transmission_type,
439 const QuicEncryptedPacket& packet, 435 const QuicEncryptedPacket& packet,
440 QuicTime sent_time) { 436 QuicTime sent_time) {
441 if (original_sequence_number == 0) { 437 if (original_sequence_number == 0) {
442 net_log_.AddEvent( 438 net_log_.AddEvent(
443 NetLog::TYPE_QUIC_SESSION_PACKET_SENT, 439 NetLog::TYPE_QUIC_SESSION_PACKET_SENT,
444 base::Bind(&NetLogQuicPacketSentCallback, serialized_packet, 440 base::Bind(NetLogQuicPacketSentCallback, serialized_packet, level,
445 level, transmission_type, packet.length(), sent_time)); 441 transmission_type, packet.length(), sent_time));
446 } else { 442 } else {
447 net_log_.AddEvent( 443 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PACKET_RETRANSMITTED,
448 NetLog::TYPE_QUIC_SESSION_PACKET_RETRANSMITTED, 444 base::Bind(NetLogQuicPacketRetransmittedCallback,
449 base::Bind(&NetLogQuicPacketRetransmittedCallback, 445 original_sequence_number,
450 original_sequence_number, 446 serialized_packet.sequence_number));
451 serialized_packet.sequence_number));
452 } 447 }
453 } 448 }
454 449
455 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address, 450 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address,
456 const IPEndPoint& peer_address, 451 const IPEndPoint& peer_address,
457 const QuicEncryptedPacket& packet) { 452 const QuicEncryptedPacket& packet) {
458 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) { 453 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) {
459 local_address_from_self_ = self_address; 454 local_address_from_self_ = self_address;
460 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf", 455 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf",
461 GetRealAddressFamily(self_address.address()), 456 GetRealAddressFamily(self_address.address()),
462 ADDRESS_FAMILY_LAST); 457 ADDRESS_FAMILY_LAST);
463 } 458 }
464 459
465 previous_received_packet_size_ = last_received_packet_size_; 460 previous_received_packet_size_ = last_received_packet_size_;
466 last_received_packet_size_ = packet.length(); 461 last_received_packet_size_ = packet.length();
467 net_log_.AddEvent( 462 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED,
468 NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, 463 base::Bind(NetLogQuicPacketCallback, &self_address,
469 base::Bind(&NetLogQuicPacketCallback, &self_address, &peer_address, 464 &peer_address, packet.length()));
470 packet.length()));
471 } 465 }
472 466
473 void QuicConnectionLogger::OnIncorrectConnectionId( 467 void QuicConnectionLogger::OnIncorrectConnectionId(
474 QuicConnectionId connection_id) { 468 QuicConnectionId connection_id) {
475 ++num_incorrect_connection_ids_; 469 ++num_incorrect_connection_ids_;
476 } 470 }
477 471
478 void QuicConnectionLogger::OnUndecryptablePacket() { 472 void QuicConnectionLogger::OnUndecryptablePacket() {
479 ++num_undecryptable_packets_; 473 ++num_undecryptable_packets_;
480 } 474 }
481 475
482 void QuicConnectionLogger::OnDuplicatePacket( 476 void QuicConnectionLogger::OnDuplicatePacket(
483 QuicPacketSequenceNumber sequence_number) { 477 QuicPacketSequenceNumber sequence_number) {
484 ++num_duplicate_packets_; 478 ++num_duplicate_packets_;
485 } 479 }
486 480
487 void QuicConnectionLogger::OnProtocolVersionMismatch( 481 void QuicConnectionLogger::OnProtocolVersionMismatch(
488 QuicVersion received_version) { 482 QuicVersion received_version) {
489 // TODO(rtenneti): Add logging. 483 // TODO(rtenneti): Add logging.
490 } 484 }
491 485
492 void QuicConnectionLogger::OnPacketHeader(const QuicPacketHeader& header) { 486 void QuicConnectionLogger::OnPacketHeader(const QuicPacketHeader& header) {
493 net_log_.AddEvent( 487 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PACKET_HEADER_RECEIVED,
494 NetLog::TYPE_QUIC_SESSION_PACKET_HEADER_RECEIVED, 488 base::Bind(NetLogQuicPacketHeaderCallback, &header));
495 base::Bind(&NetLogQuicPacketHeaderCallback, &header));
496 ++num_packets_received_; 489 ++num_packets_received_;
497 if (largest_received_packet_sequence_number_ < 490 if (largest_received_packet_sequence_number_ <
498 header.packet_sequence_number) { 491 header.packet_sequence_number) {
499 QuicPacketSequenceNumber delta = header.packet_sequence_number - 492 QuicPacketSequenceNumber delta = header.packet_sequence_number -
500 largest_received_packet_sequence_number_; 493 largest_received_packet_sequence_number_;
501 if (delta > 1) { 494 if (delta > 1) {
502 // There is a gap between the largest packet previously received and 495 // There is a gap between the largest packet previously received and
503 // the current packet. This indicates either loss, or out-of-order 496 // the current packet. This indicates either loss, or out-of-order
504 // delivery. 497 // delivery.
505 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapReceived", 498 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapReceived",
(...skipping 12 matching lines...) Expand all
518 UMA_HISTOGRAM_COUNTS( 511 UMA_HISTOGRAM_COUNTS(
519 "Net.QuicSession.OutOfOrderGapReceived", 512 "Net.QuicSession.OutOfOrderGapReceived",
520 static_cast<base::HistogramBase::Sample>( 513 static_cast<base::HistogramBase::Sample>(
521 last_received_packet_sequence_number_ - 514 last_received_packet_sequence_number_ -
522 header.packet_sequence_number)); 515 header.packet_sequence_number));
523 } 516 }
524 last_received_packet_sequence_number_ = header.packet_sequence_number; 517 last_received_packet_sequence_number_ = header.packet_sequence_number;
525 } 518 }
526 519
527 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) { 520 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) {
528 net_log_.AddEvent( 521 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_RECEIVED,
529 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_RECEIVED, 522 base::Bind(NetLogQuicStreamFrameCallback, &frame));
530 base::Bind(&NetLogQuicStreamFrameCallback, &frame));
531 } 523 }
532 524
533 void QuicConnectionLogger::OnAckFrame(const QuicAckFrame& frame) { 525 void QuicConnectionLogger::OnAckFrame(const QuicAckFrame& frame) {
534 net_log_.AddEvent( 526 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_ACK_FRAME_RECEIVED,
535 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_RECEIVED, 527 base::Bind(NetLogQuicAckFrameCallback, &frame));
536 base::Bind(&NetLogQuicAckFrameCallback, &frame));
537 528
538 const size_t kApproximateLargestSoloAckBytes = 100; 529 const size_t kApproximateLargestSoloAckBytes = 100;
539 if (last_received_packet_sequence_number_ < received_acks_.size() && 530 if (last_received_packet_sequence_number_ < received_acks_.size() &&
540 last_received_packet_size_ < kApproximateLargestSoloAckBytes) { 531 last_received_packet_size_ < kApproximateLargestSoloAckBytes) {
541 received_acks_[static_cast<size_t>(last_received_packet_sequence_number_)] = 532 received_acks_[static_cast<size_t>(last_received_packet_sequence_number_)] =
542 true; 533 true;
543 } 534 }
544 535
545 if (frame.is_truncated) 536 if (frame.is_truncated)
546 ++num_truncated_acks_received_; 537 ++num_truncated_acks_received_;
(...skipping 29 matching lines...) Expand all
576 } 567 }
577 if (num_consecutive_missing_packets != 0) { 568 if (num_consecutive_missing_packets != 0) {
578 UpdatePacketGapSentHistogram(num_consecutive_missing_packets); 569 UpdatePacketGapSentHistogram(num_consecutive_missing_packets);
579 } 570 }
580 largest_received_missing_packet_sequence_number_ = 571 largest_received_missing_packet_sequence_number_ =
581 *missing_packets.rbegin(); 572 *missing_packets.rbegin();
582 } 573 }
583 574
584 void QuicConnectionLogger::OnStopWaitingFrame( 575 void QuicConnectionLogger::OnStopWaitingFrame(
585 const QuicStopWaitingFrame& frame) { 576 const QuicStopWaitingFrame& frame) {
586 net_log_.AddEvent( 577 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_RECEIVED,
587 NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_RECEIVED, 578 base::Bind(NetLogQuicStopWaitingFrameCallback, &frame));
588 base::Bind(&NetLogQuicStopWaitingFrameCallback, &frame));
589 } 579 }
590 580
591 void QuicConnectionLogger::OnRstStreamFrame(const QuicRstStreamFrame& frame) { 581 void QuicConnectionLogger::OnRstStreamFrame(const QuicRstStreamFrame& frame) {
592 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeServer", 582 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeServer",
593 frame.error_code); 583 frame.error_code);
594 net_log_.AddEvent( 584 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_RECEIVED,
595 NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_RECEIVED, 585 base::Bind(NetLogQuicRstStreamFrameCallback, &frame));
596 base::Bind(&NetLogQuicRstStreamFrameCallback, &frame));
597 } 586 }
598 587
599 void QuicConnectionLogger::OnConnectionCloseFrame( 588 void QuicConnectionLogger::OnConnectionCloseFrame(
600 const QuicConnectionCloseFrame& frame) { 589 const QuicConnectionCloseFrame& frame) {
601 net_log_.AddEvent( 590 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_CONNECTION_CLOSE_FRAME_RECEIVED,
602 NetLog::TYPE_QUIC_SESSION_CONNECTION_CLOSE_FRAME_RECEIVED, 591 base::Bind(NetLogQuicConnectionCloseFrameCallback, &frame));
603 base::Bind(&NetLogQuicConnectionCloseFrameCallback, &frame));
604 } 592 }
605 593
606 void QuicConnectionLogger::OnWindowUpdateFrame( 594 void QuicConnectionLogger::OnWindowUpdateFrame(
607 const QuicWindowUpdateFrame& frame) { 595 const QuicWindowUpdateFrame& frame) {
608 net_log_.AddEvent( 596 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_WINDOW_UPDATE_FRAME_RECEIVED,
609 NetLog::TYPE_QUIC_SESSION_WINDOW_UPDATE_FRAME_RECEIVED, 597 base::Bind(NetLogQuicWindowUpdateFrameCallback, &frame));
610 base::Bind(&NetLogQuicWindowUpdateFrameCallback, &frame));
611 } 598 }
612 599
613 void QuicConnectionLogger::OnBlockedFrame(const QuicBlockedFrame& frame) { 600 void QuicConnectionLogger::OnBlockedFrame(const QuicBlockedFrame& frame) {
614 ++num_blocked_frames_received_; 601 ++num_blocked_frames_received_;
615 net_log_.AddEvent( 602 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_RECEIVED,
616 NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_RECEIVED, 603 base::Bind(NetLogQuicBlockedFrameCallback, &frame));
617 base::Bind(&NetLogQuicBlockedFrameCallback, &frame));
618 } 604 }
619 605
620 void QuicConnectionLogger::OnGoAwayFrame(const QuicGoAwayFrame& frame) { 606 void QuicConnectionLogger::OnGoAwayFrame(const QuicGoAwayFrame& frame) {
621 net_log_.AddEvent( 607 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_GOAWAY_FRAME_RECEIVED,
622 NetLog::TYPE_QUIC_SESSION_GOAWAY_FRAME_RECEIVED, 608 base::Bind(NetLogQuicGoAwayFrameCallback, &frame));
623 base::Bind(&NetLogQuicGoAwayFrameCallback, &frame));
624 } 609 }
625 610
626 void QuicConnectionLogger::OnPingFrame(const QuicPingFrame& frame) { 611 void QuicConnectionLogger::OnPingFrame(const QuicPingFrame& frame) {
627 // PingFrame has no contents to log, so just record that it was received. 612 // PingFrame has no contents to log, so just record that it was received.
628 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PING_FRAME_RECEIVED); 613 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PING_FRAME_RECEIVED);
629 } 614 }
630 615
631 void QuicConnectionLogger::OnPublicResetPacket( 616 void QuicConnectionLogger::OnPublicResetPacket(
632 const QuicPublicResetPacket& packet) { 617 const QuicPublicResetPacket& packet) {
633 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PUBLIC_RESET_PACKET_RECEIVED); 618 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PUBLIC_RESET_PACKET_RECEIVED);
634 UpdatePublicResetAddressMismatchHistogram(local_address_from_shlo_, 619 UpdatePublicResetAddressMismatchHistogram(local_address_from_shlo_,
635 packet.client_address); 620 packet.client_address);
636 } 621 }
637 622
638 void QuicConnectionLogger::OnVersionNegotiationPacket( 623 void QuicConnectionLogger::OnVersionNegotiationPacket(
639 const QuicVersionNegotiationPacket& packet) { 624 const QuicVersionNegotiationPacket& packet) {
640 net_log_.AddEvent( 625 net_log_.AddEvent(
641 NetLog::TYPE_QUIC_SESSION_VERSION_NEGOTIATION_PACKET_RECEIVED, 626 NetLog::TYPE_QUIC_SESSION_VERSION_NEGOTIATION_PACKET_RECEIVED,
642 base::Bind(&NetLogQuicVersionNegotiationPacketCallback, &packet)); 627 base::Bind(NetLogQuicVersionNegotiationPacketCallback, &packet));
643 } 628 }
644 629
645 void QuicConnectionLogger::OnRevivedPacket( 630 void QuicConnectionLogger::OnRevivedPacket(
646 const QuicPacketHeader& revived_header, 631 const QuicPacketHeader& revived_header,
647 base::StringPiece payload) { 632 base::StringPiece payload) {
648 net_log_.AddEvent( 633 net_log_.AddEvent(
649 NetLog::TYPE_QUIC_SESSION_PACKET_HEADER_REVIVED, 634 NetLog::TYPE_QUIC_SESSION_PACKET_HEADER_REVIVED,
650 base::Bind(&NetLogQuicPacketHeaderCallback, &revived_header)); 635 base::Bind(NetLogQuicPacketHeaderCallback, &revived_header));
651 } 636 }
652 637
653 void QuicConnectionLogger::OnCryptoHandshakeMessageReceived( 638 void QuicConnectionLogger::OnCryptoHandshakeMessageReceived(
654 const CryptoHandshakeMessage& message) { 639 const CryptoHandshakeMessage& message) {
655 net_log_.AddEvent( 640 net_log_.AddEvent(
656 NetLog::TYPE_QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_RECEIVED, 641 NetLog::TYPE_QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_RECEIVED,
657 base::Bind(&NetLogQuicCryptoHandshakeMessageCallback, &message)); 642 base::Bind(NetLogQuicCryptoHandshakeMessageCallback, &message));
658 643
659 if (message.tag() == kSHLO) { 644 if (message.tag() == kSHLO) {
660 StringPiece address; 645 StringPiece address;
661 QuicSocketAddressCoder decoder; 646 QuicSocketAddressCoder decoder;
662 if (message.GetStringPiece(kCADR, &address) && 647 if (message.GetStringPiece(kCADR, &address) &&
663 decoder.Decode(address.data(), address.size())) { 648 decoder.Decode(address.data(), address.size())) {
664 local_address_from_shlo_ = IPEndPoint(decoder.ip(), decoder.port()); 649 local_address_from_shlo_ = IPEndPoint(decoder.ip(), decoder.port());
665 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromPeer", 650 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromPeer",
666 GetRealAddressFamily( 651 GetRealAddressFamily(
667 local_address_from_shlo_.address()), 652 local_address_from_shlo_.address()),
668 ADDRESS_FAMILY_LAST); 653 ADDRESS_FAMILY_LAST);
669 } 654 }
670 } 655 }
671 } 656 }
672 657
673 void QuicConnectionLogger::OnCryptoHandshakeMessageSent( 658 void QuicConnectionLogger::OnCryptoHandshakeMessageSent(
674 const CryptoHandshakeMessage& message) { 659 const CryptoHandshakeMessage& message) {
675 net_log_.AddEvent( 660 net_log_.AddEvent(
676 NetLog::TYPE_QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_SENT, 661 NetLog::TYPE_QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_SENT,
677 base::Bind(&NetLogQuicCryptoHandshakeMessageCallback, &message)); 662 base::Bind(NetLogQuicCryptoHandshakeMessageCallback, &message));
678 } 663 }
679 664
680 void QuicConnectionLogger::OnConnectionClosed(QuicErrorCode error, 665 void QuicConnectionLogger::OnConnectionClosed(QuicErrorCode error,
681 bool from_peer) { 666 bool from_peer) {
682 net_log_.AddEvent( 667 net_log_.AddEvent(
683 NetLog::TYPE_QUIC_SESSION_CLOSED, 668 NetLog::TYPE_QUIC_SESSION_CLOSED,
684 base::Bind(&NetLogQuicOnConnectionClosedCallback, error, from_peer)); 669 base::Bind(NetLogQuicOnConnectionClosedCallback, error, from_peer));
685 } 670 }
686 671
687 void QuicConnectionLogger::OnSuccessfulVersionNegotiation( 672 void QuicConnectionLogger::OnSuccessfulVersionNegotiation(
688 const QuicVersion& version) { 673 const QuicVersion& version) {
689 string quic_version = QuicVersionToString(version); 674 string quic_version = QuicVersionToString(version);
690 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_VERSION_NEGOTIATED, 675 net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_VERSION_NEGOTIATED,
691 NetLog::StringCallback("version", &quic_version)); 676 NetLog::StringCallback("version", &quic_version));
692 } 677 }
693 678
694 void QuicConnectionLogger::UpdateReceivedFrameCounts( 679 void QuicConnectionLogger::UpdateReceivedFrameCounts(
695 QuicStreamId stream_id, 680 QuicStreamId stream_id,
696 int num_frames_received, 681 int num_frames_received,
697 int num_duplicate_frames_received) { 682 int num_duplicate_frames_received) {
698 if (stream_id != kCryptoStreamId) { 683 if (stream_id != kCryptoStreamId) {
699 num_frames_received_ += num_frames_received; 684 num_frames_received_ += num_frames_received;
700 num_duplicate_frames_received_ += num_duplicate_frames_received; 685 num_duplicate_frames_received_ += num_duplicate_frames_received;
701 } 686 }
702 } 687 }
703 688
704 void QuicConnectionLogger::OnCertificateVerified( 689 void QuicConnectionLogger::OnCertificateVerified(
705 const CertVerifyResult& result) { 690 const CertVerifyResult& result) {
706 net_log_.AddEvent( 691 net_log_.AddEvent(
707 NetLog::TYPE_QUIC_SESSION_CERTIFICATE_VERIFIED, 692 NetLog::TYPE_QUIC_SESSION_CERTIFICATE_VERIFIED,
708 base::Bind(&NetLogQuicCertificateVerifiedCallback, result.verified_cert)); 693 base::Bind(NetLogQuicCertificateVerifiedCallback, result.verified_cert));
709 } 694 }
710 695
711 base::HistogramBase* QuicConnectionLogger::GetPacketSequenceNumberHistogram( 696 base::HistogramBase* QuicConnectionLogger::GetPacketSequenceNumberHistogram(
712 const char* statistic_name) const { 697 const char* statistic_name) const {
713 string prefix("Net.QuicSession.PacketReceived_"); 698 string prefix("Net.QuicSession.PacketReceived_");
714 return base::LinearHistogram::FactoryGet( 699 return base::LinearHistogram::FactoryGet(
715 prefix + statistic_name + connection_description_, 700 prefix + statistic_name + connection_description_,
716 1, received_packets_.size(), received_packets_.size() + 1, 701 1, received_packets_.size(), received_packets_.size() + 1,
717 base::HistogramBase::kUmaTargetedHistogramFlag); 702 base::HistogramBase::kUmaTargetedHistogramFlag);
718 } 703 }
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 continue; 848 continue;
864 } 849 }
865 // Record some overlapping patterns, to get a better picture, since this is 850 // Record some overlapping patterns, to get a better picture, since this is
866 // not very expensive. 851 // not very expensive.
867 if (i % 3 == 0) 852 if (i % 3 == 0)
868 six_packet_histogram->Add(recent_6_mask); 853 six_packet_histogram->Add(recent_6_mask);
869 } 854 }
870 } 855 }
871 856
872 } // namespace net 857 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_client_session.cc ('k') | net/quic/quic_http_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698