| OLD | NEW |
| 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 #include <utility> |
| 9 | 10 |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 12 #include "base/metrics/histogram_macros.h" | 13 #include "base/metrics/histogram_macros.h" |
| 13 #include "base/metrics/sparse_histogram.h" | 14 #include "base/metrics/sparse_histogram.h" |
| 14 #include "base/profiler/scoped_tracker.h" | 15 #include "base/profiler/scoped_tracker.h" |
| 15 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 16 #include "base/values.h" | 17 #include "base/values.h" |
| 17 #include "net/cert/cert_verify_result.h" | 18 #include "net/cert/cert_verify_result.h" |
| 18 #include "net/cert/x509_certificate.h" | 19 #include "net/cert/x509_certificate.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 37 | 38 |
| 38 scoped_ptr<base::Value> NetLogQuicPacketCallback( | 39 scoped_ptr<base::Value> NetLogQuicPacketCallback( |
| 39 const IPEndPoint* self_address, | 40 const IPEndPoint* self_address, |
| 40 const IPEndPoint* peer_address, | 41 const IPEndPoint* peer_address, |
| 41 size_t packet_size, | 42 size_t packet_size, |
| 42 NetLogCaptureMode /* capture_mode */) { | 43 NetLogCaptureMode /* capture_mode */) { |
| 43 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 44 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 44 dict->SetString("self_address", self_address->ToString()); | 45 dict->SetString("self_address", self_address->ToString()); |
| 45 dict->SetString("peer_address", peer_address->ToString()); | 46 dict->SetString("peer_address", peer_address->ToString()); |
| 46 dict->SetInteger("size", packet_size); | 47 dict->SetInteger("size", packet_size); |
| 47 return dict.Pass(); | 48 return std::move(dict); |
| 48 } | 49 } |
| 49 | 50 |
| 50 scoped_ptr<base::Value> NetLogQuicPacketSentCallback( | 51 scoped_ptr<base::Value> NetLogQuicPacketSentCallback( |
| 51 const SerializedPacket& serialized_packet, | 52 const SerializedPacket& serialized_packet, |
| 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 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 57 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 57 dict->SetInteger("transmission_type", transmission_type); | 58 dict->SetInteger("transmission_type", transmission_type); |
| 58 dict->SetString("packet_number", | 59 dict->SetString("packet_number", |
| 59 base::Uint64ToString(serialized_packet.packet_number)); | 60 base::Uint64ToString(serialized_packet.packet_number)); |
| 60 dict->SetInteger("size", packet_size); | 61 dict->SetInteger("size", packet_size); |
| 61 dict->SetString("sent_time_us", | 62 dict->SetString("sent_time_us", |
| 62 base::Int64ToString(sent_time.ToDebuggingValue())); | 63 base::Int64ToString(sent_time.ToDebuggingValue())); |
| 63 return dict.Pass(); | 64 return std::move(dict); |
| 64 } | 65 } |
| 65 | 66 |
| 66 scoped_ptr<base::Value> NetLogQuicPacketRetransmittedCallback( | 67 scoped_ptr<base::Value> NetLogQuicPacketRetransmittedCallback( |
| 67 QuicPacketNumber old_packet_number, | 68 QuicPacketNumber old_packet_number, |
| 68 QuicPacketNumber new_packet_number, | 69 QuicPacketNumber new_packet_number, |
| 69 NetLogCaptureMode /* capture_mode */) { | 70 NetLogCaptureMode /* capture_mode */) { |
| 70 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 71 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 71 dict->SetString("old_packet_number", base::Uint64ToString(old_packet_number)); | 72 dict->SetString("old_packet_number", base::Uint64ToString(old_packet_number)); |
| 72 dict->SetString("new_packet_number", base::Uint64ToString(new_packet_number)); | 73 dict->SetString("new_packet_number", base::Uint64ToString(new_packet_number)); |
| 73 return dict.Pass(); | 74 return std::move(dict); |
| 74 } | 75 } |
| 75 | 76 |
| 76 scoped_ptr<base::Value> NetLogQuicDuplicatePacketCallback( | 77 scoped_ptr<base::Value> NetLogQuicDuplicatePacketCallback( |
| 77 QuicPacketNumber packet_number, | 78 QuicPacketNumber packet_number, |
| 78 NetLogCaptureMode /* capture_mode */) { | 79 NetLogCaptureMode /* capture_mode */) { |
| 79 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 80 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 80 dict->SetString("packet_number", base::Uint64ToString(packet_number)); | 81 dict->SetString("packet_number", base::Uint64ToString(packet_number)); |
| 81 return dict.Pass(); | 82 return std::move(dict); |
| 82 } | 83 } |
| 83 | 84 |
| 84 scoped_ptr<base::Value> NetLogQuicPacketHeaderCallback( | 85 scoped_ptr<base::Value> NetLogQuicPacketHeaderCallback( |
| 85 const QuicPacketHeader* header, | 86 const QuicPacketHeader* header, |
| 86 NetLogCaptureMode /* capture_mode */) { | 87 NetLogCaptureMode /* capture_mode */) { |
| 87 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 88 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 88 dict->SetString("connection_id", | 89 dict->SetString("connection_id", |
| 89 base::Uint64ToString(header->public_header.connection_id)); | 90 base::Uint64ToString(header->public_header.connection_id)); |
| 90 dict->SetInteger("reset_flag", header->public_header.reset_flag); | 91 dict->SetInteger("reset_flag", header->public_header.reset_flag); |
| 91 dict->SetInteger("version_flag", header->public_header.version_flag); | 92 dict->SetInteger("version_flag", header->public_header.version_flag); |
| 92 dict->SetString("packet_number", base::Uint64ToString(header->packet_number)); | 93 dict->SetString("packet_number", base::Uint64ToString(header->packet_number)); |
| 93 dict->SetInteger("entropy_flag", header->entropy_flag); | 94 dict->SetInteger("entropy_flag", header->entropy_flag); |
| 94 dict->SetInteger("fec_flag", header->fec_flag); | 95 dict->SetInteger("fec_flag", header->fec_flag); |
| 95 dict->SetInteger("fec_group", static_cast<int>(header->fec_group)); | 96 dict->SetInteger("fec_group", static_cast<int>(header->fec_group)); |
| 96 return dict.Pass(); | 97 return std::move(dict); |
| 97 } | 98 } |
| 98 | 99 |
| 99 scoped_ptr<base::Value> NetLogQuicStreamFrameCallback( | 100 scoped_ptr<base::Value> NetLogQuicStreamFrameCallback( |
| 100 const QuicStreamFrame* frame, | 101 const QuicStreamFrame* frame, |
| 101 NetLogCaptureMode /* capture_mode */) { | 102 NetLogCaptureMode /* capture_mode */) { |
| 102 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 103 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 103 dict->SetInteger("stream_id", frame->stream_id); | 104 dict->SetInteger("stream_id", frame->stream_id); |
| 104 dict->SetBoolean("fin", frame->fin); | 105 dict->SetBoolean("fin", frame->fin); |
| 105 dict->SetString("offset", base::Uint64ToString(frame->offset)); | 106 dict->SetString("offset", base::Uint64ToString(frame->offset)); |
| 106 dict->SetInteger("length", frame->frame_length); | 107 dict->SetInteger("length", frame->frame_length); |
| 107 return dict.Pass(); | 108 return std::move(dict); |
| 108 } | 109 } |
| 109 | 110 |
| 110 scoped_ptr<base::Value> NetLogQuicAckFrameCallback( | 111 scoped_ptr<base::Value> NetLogQuicAckFrameCallback( |
| 111 const QuicAckFrame* frame, | 112 const QuicAckFrame* frame, |
| 112 NetLogCaptureMode /* capture_mode */) { | 113 NetLogCaptureMode /* capture_mode */) { |
| 113 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 114 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 114 dict->SetString("largest_observed", | 115 dict->SetString("largest_observed", |
| 115 base::Uint64ToString(frame->largest_observed)); | 116 base::Uint64ToString(frame->largest_observed)); |
| 116 dict->SetString( | 117 dict->SetString( |
| 117 "delta_time_largest_observed_us", | 118 "delta_time_largest_observed_us", |
| (...skipping 14 matching lines...) Expand all Loading... |
| 132 const PacketTimeVector& received_times = frame->received_packet_times; | 133 const PacketTimeVector& received_times = frame->received_packet_times; |
| 133 for (PacketTimeVector::const_iterator it = received_times.begin(); | 134 for (PacketTimeVector::const_iterator it = received_times.begin(); |
| 134 it != received_times.end(); ++it) { | 135 it != received_times.end(); ++it) { |
| 135 base::DictionaryValue* info = new base::DictionaryValue(); | 136 base::DictionaryValue* info = new base::DictionaryValue(); |
| 136 info->SetInteger("packet_number", static_cast<int>(it->first)); | 137 info->SetInteger("packet_number", static_cast<int>(it->first)); |
| 137 info->SetString("received", | 138 info->SetString("received", |
| 138 base::Int64ToString(it->second.ToDebuggingValue())); | 139 base::Int64ToString(it->second.ToDebuggingValue())); |
| 139 received->Append(info); | 140 received->Append(info); |
| 140 } | 141 } |
| 141 | 142 |
| 142 return dict.Pass(); | 143 return std::move(dict); |
| 143 } | 144 } |
| 144 | 145 |
| 145 scoped_ptr<base::Value> NetLogQuicRstStreamFrameCallback( | 146 scoped_ptr<base::Value> NetLogQuicRstStreamFrameCallback( |
| 146 const QuicRstStreamFrame* frame, | 147 const QuicRstStreamFrame* frame, |
| 147 NetLogCaptureMode /* capture_mode */) { | 148 NetLogCaptureMode /* capture_mode */) { |
| 148 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 149 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 149 dict->SetInteger("stream_id", frame->stream_id); | 150 dict->SetInteger("stream_id", frame->stream_id); |
| 150 dict->SetInteger("quic_rst_stream_error", frame->error_code); | 151 dict->SetInteger("quic_rst_stream_error", frame->error_code); |
| 151 return dict.Pass(); | 152 return std::move(dict); |
| 152 } | 153 } |
| 153 | 154 |
| 154 scoped_ptr<base::Value> NetLogQuicConnectionCloseFrameCallback( | 155 scoped_ptr<base::Value> NetLogQuicConnectionCloseFrameCallback( |
| 155 const QuicConnectionCloseFrame* frame, | 156 const QuicConnectionCloseFrame* frame, |
| 156 NetLogCaptureMode /* capture_mode */) { | 157 NetLogCaptureMode /* capture_mode */) { |
| 157 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 158 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 158 dict->SetInteger("quic_error", frame->error_code); | 159 dict->SetInteger("quic_error", frame->error_code); |
| 159 dict->SetString("details", frame->error_details); | 160 dict->SetString("details", frame->error_details); |
| 160 return dict.Pass(); | 161 return std::move(dict); |
| 161 } | 162 } |
| 162 | 163 |
| 163 scoped_ptr<base::Value> NetLogQuicWindowUpdateFrameCallback( | 164 scoped_ptr<base::Value> NetLogQuicWindowUpdateFrameCallback( |
| 164 const QuicWindowUpdateFrame* frame, | 165 const QuicWindowUpdateFrame* frame, |
| 165 NetLogCaptureMode /* capture_mode */) { | 166 NetLogCaptureMode /* capture_mode */) { |
| 166 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 167 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 167 dict->SetInteger("stream_id", frame->stream_id); | 168 dict->SetInteger("stream_id", frame->stream_id); |
| 168 dict->SetString("byte_offset", base::Uint64ToString(frame->byte_offset)); | 169 dict->SetString("byte_offset", base::Uint64ToString(frame->byte_offset)); |
| 169 return dict.Pass(); | 170 return std::move(dict); |
| 170 } | 171 } |
| 171 | 172 |
| 172 scoped_ptr<base::Value> NetLogQuicBlockedFrameCallback( | 173 scoped_ptr<base::Value> NetLogQuicBlockedFrameCallback( |
| 173 const QuicBlockedFrame* frame, | 174 const QuicBlockedFrame* frame, |
| 174 NetLogCaptureMode /* capture_mode */) { | 175 NetLogCaptureMode /* capture_mode */) { |
| 175 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 176 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 176 dict->SetInteger("stream_id", frame->stream_id); | 177 dict->SetInteger("stream_id", frame->stream_id); |
| 177 return dict.Pass(); | 178 return std::move(dict); |
| 178 } | 179 } |
| 179 | 180 |
| 180 scoped_ptr<base::Value> NetLogQuicGoAwayFrameCallback( | 181 scoped_ptr<base::Value> NetLogQuicGoAwayFrameCallback( |
| 181 const QuicGoAwayFrame* frame, | 182 const QuicGoAwayFrame* frame, |
| 182 NetLogCaptureMode /* capture_mode */) { | 183 NetLogCaptureMode /* capture_mode */) { |
| 183 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 184 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 184 dict->SetInteger("quic_error", frame->error_code); | 185 dict->SetInteger("quic_error", frame->error_code); |
| 185 dict->SetInteger("last_good_stream_id", frame->last_good_stream_id); | 186 dict->SetInteger("last_good_stream_id", frame->last_good_stream_id); |
| 186 dict->SetString("reason_phrase", frame->reason_phrase); | 187 dict->SetString("reason_phrase", frame->reason_phrase); |
| 187 return dict.Pass(); | 188 return std::move(dict); |
| 188 } | 189 } |
| 189 | 190 |
| 190 scoped_ptr<base::Value> NetLogQuicStopWaitingFrameCallback( | 191 scoped_ptr<base::Value> NetLogQuicStopWaitingFrameCallback( |
| 191 const QuicStopWaitingFrame* frame, | 192 const QuicStopWaitingFrame* frame, |
| 192 NetLogCaptureMode /* capture_mode */) { | 193 NetLogCaptureMode /* capture_mode */) { |
| 193 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 194 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 194 base::DictionaryValue* sent_info = new base::DictionaryValue(); | 195 base::DictionaryValue* sent_info = new base::DictionaryValue(); |
| 195 dict->Set("sent_info", sent_info); | 196 dict->Set("sent_info", sent_info); |
| 196 sent_info->SetString("least_unacked", | 197 sent_info->SetString("least_unacked", |
| 197 base::Uint64ToString(frame->least_unacked)); | 198 base::Uint64ToString(frame->least_unacked)); |
| 198 return dict.Pass(); | 199 return std::move(dict); |
| 199 } | 200 } |
| 200 | 201 |
| 201 scoped_ptr<base::Value> NetLogQuicVersionNegotiationPacketCallback( | 202 scoped_ptr<base::Value> NetLogQuicVersionNegotiationPacketCallback( |
| 202 const QuicVersionNegotiationPacket* packet, | 203 const QuicVersionNegotiationPacket* packet, |
| 203 NetLogCaptureMode /* capture_mode */) { | 204 NetLogCaptureMode /* capture_mode */) { |
| 204 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 205 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 205 base::ListValue* versions = new base::ListValue(); | 206 base::ListValue* versions = new base::ListValue(); |
| 206 dict->Set("versions", versions); | 207 dict->Set("versions", versions); |
| 207 for (QuicVersionVector::const_iterator it = packet->versions.begin(); | 208 for (QuicVersionVector::const_iterator it = packet->versions.begin(); |
| 208 it != packet->versions.end(); ++it) { | 209 it != packet->versions.end(); ++it) { |
| 209 versions->AppendString(QuicVersionToString(*it)); | 210 versions->AppendString(QuicVersionToString(*it)); |
| 210 } | 211 } |
| 211 return dict.Pass(); | 212 return std::move(dict); |
| 212 } | 213 } |
| 213 | 214 |
| 214 scoped_ptr<base::Value> NetLogQuicCryptoHandshakeMessageCallback( | 215 scoped_ptr<base::Value> NetLogQuicCryptoHandshakeMessageCallback( |
| 215 const CryptoHandshakeMessage* message, | 216 const CryptoHandshakeMessage* message, |
| 216 NetLogCaptureMode /* capture_mode */) { | 217 NetLogCaptureMode /* capture_mode */) { |
| 217 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 218 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 218 dict->SetString("quic_crypto_handshake_message", message->DebugString()); | 219 dict->SetString("quic_crypto_handshake_message", message->DebugString()); |
| 219 return dict.Pass(); | 220 return std::move(dict); |
| 220 } | 221 } |
| 221 | 222 |
| 222 scoped_ptr<base::Value> NetLogQuicOnConnectionClosedCallback( | 223 scoped_ptr<base::Value> NetLogQuicOnConnectionClosedCallback( |
| 223 QuicErrorCode error, | 224 QuicErrorCode error, |
| 224 bool from_peer, | 225 bool from_peer, |
| 225 NetLogCaptureMode /* capture_mode */) { | 226 NetLogCaptureMode /* capture_mode */) { |
| 226 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 227 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 227 dict->SetInteger("quic_error", error); | 228 dict->SetInteger("quic_error", error); |
| 228 dict->SetBoolean("from_peer", from_peer); | 229 dict->SetBoolean("from_peer", from_peer); |
| 229 return dict.Pass(); | 230 return std::move(dict); |
| 230 } | 231 } |
| 231 | 232 |
| 232 scoped_ptr<base::Value> NetLogQuicCertificateVerifiedCallback( | 233 scoped_ptr<base::Value> NetLogQuicCertificateVerifiedCallback( |
| 233 scoped_refptr<X509Certificate> cert, | 234 scoped_refptr<X509Certificate> cert, |
| 234 NetLogCaptureMode /* capture_mode */) { | 235 NetLogCaptureMode /* capture_mode */) { |
| 235 // Only the subjects are logged so that we can investigate connection pooling. | 236 // Only the subjects are logged so that we can investigate connection pooling. |
| 236 // More fields could be logged in the future. | 237 // More fields could be logged in the future. |
| 237 std::vector<std::string> dns_names; | 238 std::vector<std::string> dns_names; |
| 238 cert->GetDNSNames(&dns_names); | 239 cert->GetDNSNames(&dns_names); |
| 239 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 240 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 240 base::ListValue* subjects = new base::ListValue(); | 241 base::ListValue* subjects = new base::ListValue(); |
| 241 for (std::vector<std::string>::const_iterator it = dns_names.begin(); | 242 for (std::vector<std::string>::const_iterator it = dns_names.begin(); |
| 242 it != dns_names.end(); it++) { | 243 it != dns_names.end(); it++) { |
| 243 subjects->Append(new base::StringValue(*it)); | 244 subjects->Append(new base::StringValue(*it)); |
| 244 } | 245 } |
| 245 dict->Set("subjects", subjects); | 246 dict->Set("subjects", subjects); |
| 246 return dict.Pass(); | 247 return std::move(dict); |
| 247 } | 248 } |
| 248 | 249 |
| 249 void UpdatePacketGapSentHistogram(size_t num_consecutive_missing_packets) { | 250 void UpdatePacketGapSentHistogram(size_t num_consecutive_missing_packets) { |
| 250 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapSent", | 251 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapSent", |
| 251 num_consecutive_missing_packets); | 252 num_consecutive_missing_packets); |
| 252 } | 253 } |
| 253 | 254 |
| 254 void UpdatePublicResetAddressMismatchHistogram( | 255 void UpdatePublicResetAddressMismatchHistogram( |
| 255 const IPEndPoint& server_hello_address, | 256 const IPEndPoint& server_hello_address, |
| 256 const IPEndPoint& public_reset_address) { | 257 const IPEndPoint& public_reset_address) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 num_truncated_acks_sent_(0), | 293 num_truncated_acks_sent_(0), |
| 293 num_truncated_acks_received_(0), | 294 num_truncated_acks_received_(0), |
| 294 num_frames_received_(0), | 295 num_frames_received_(0), |
| 295 num_duplicate_frames_received_(0), | 296 num_duplicate_frames_received_(0), |
| 296 num_incorrect_connection_ids_(0), | 297 num_incorrect_connection_ids_(0), |
| 297 num_undecryptable_packets_(0), | 298 num_undecryptable_packets_(0), |
| 298 num_duplicate_packets_(0), | 299 num_duplicate_packets_(0), |
| 299 num_blocked_frames_received_(0), | 300 num_blocked_frames_received_(0), |
| 300 num_blocked_frames_sent_(0), | 301 num_blocked_frames_sent_(0), |
| 301 connection_description_(connection_description), | 302 connection_description_(connection_description), |
| 302 socket_performance_watcher_(socket_performance_watcher.Pass()) {} | 303 socket_performance_watcher_(std::move(socket_performance_watcher)) {} |
| 303 | 304 |
| 304 QuicConnectionLogger::~QuicConnectionLogger() { | 305 QuicConnectionLogger::~QuicConnectionLogger() { |
| 305 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderPacketsReceived", | 306 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderPacketsReceived", |
| 306 num_out_of_order_received_packets_); | 307 num_out_of_order_received_packets_); |
| 307 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderLargePacketsReceived", | 308 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderLargePacketsReceived", |
| 308 num_out_of_order_large_received_packets_); | 309 num_out_of_order_large_received_packets_); |
| 309 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksSent", | 310 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksSent", |
| 310 num_truncated_acks_sent_); | 311 num_truncated_acks_sent_); |
| 311 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksReceived", | 312 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksReceived", |
| 312 num_truncated_acks_received_); | 313 num_truncated_acks_received_); |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 continue; | 873 continue; |
| 873 } | 874 } |
| 874 // Record some overlapping patterns, to get a better picture, since this is | 875 // Record some overlapping patterns, to get a better picture, since this is |
| 875 // not very expensive. | 876 // not very expensive. |
| 876 if (i % 3 == 0) | 877 if (i % 3 == 0) |
| 877 six_packet_histogram->Add(recent_6_mask); | 878 six_packet_histogram->Add(recent_6_mask); |
| 878 } | 879 } |
| 879 } | 880 } |
| 880 | 881 |
| 881 } // namespace net | 882 } // namespace net |
| OLD | NEW |