| 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 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 13 #include "base/metrics/sparse_histogram.h" | 13 #include "base/metrics/sparse_histogram.h" |
| 14 #include "base/profiler/scoped_tracker.h" |
| 14 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/values.h" | 16 #include "base/values.h" |
| 16 #include "net/base/net_log.h" | 17 #include "net/base/net_log.h" |
| 17 #include "net/base/net_util.h" | 18 #include "net/base/net_util.h" |
| 18 #include "net/cert/cert_verify_result.h" | 19 #include "net/cert/cert_verify_result.h" |
| 19 #include "net/cert/x509_certificate.h" | 20 #include "net/cert/x509_certificate.h" |
| 20 #include "net/quic/crypto/crypto_handshake_message.h" | 21 #include "net/quic/crypto/crypto_handshake_message.h" |
| 21 #include "net/quic/crypto/crypto_protocol.h" | 22 #include "net/quic/crypto/crypto_protocol.h" |
| 22 #include "net/quic/quic_address_mismatch.h" | 23 #include "net/quic/quic_address_mismatch.h" |
| 23 #include "net/quic/quic_socket_address_coder.h" | 24 #include "net/quic/quic_socket_address_coder.h" |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 // We are seemingly talking to an older server that does not support the | 261 // We are seemingly talking to an older server that does not support the |
| 261 // feature, so we can't report the results in the histogram. | 262 // feature, so we can't report the results in the histogram. |
| 262 if (sample < 0) { | 263 if (sample < 0) { |
| 263 return; | 264 return; |
| 264 } | 265 } |
| 265 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.PublicResetAddressMismatch2", | 266 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.PublicResetAddressMismatch2", |
| 266 sample, QUIC_ADDRESS_MISMATCH_MAX); | 267 sample, QUIC_ADDRESS_MISMATCH_MAX); |
| 267 } | 268 } |
| 268 | 269 |
| 269 const char* GetConnectionDescriptionString() { | 270 const char* GetConnectionDescriptionString() { |
| 271 // TODO(rtenneti): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 272 tracked_objects::ScopedTracker tracking_profile( |
| 273 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 274 "422516 QuicConnectionLogger GetConnectionDescriptionString")); |
| 275 |
| 270 NetworkChangeNotifier::ConnectionType type = | 276 NetworkChangeNotifier::ConnectionType type = |
| 271 NetworkChangeNotifier::GetConnectionType(); | 277 NetworkChangeNotifier::GetConnectionType(); |
| 272 const char* description = NetworkChangeNotifier::ConnectionTypeToString(type); | 278 const char* description = NetworkChangeNotifier::ConnectionTypeToString(type); |
| 273 // Most platforms don't distingish Wifi vs Etherenet, and call everything | 279 // Most platforms don't distingish Wifi vs Etherenet, and call everything |
| 274 // CONNECTION_UNKNOWN :-(. We'll tease out some details when we are on WiFi, | 280 // CONNECTION_UNKNOWN :-(. We'll tease out some details when we are on WiFi, |
| 275 // and hopefully leave only ethernet (with no WiFi available) in the | 281 // and hopefully leave only ethernet (with no WiFi available) in the |
| 276 // CONNECTION_UNKNOWN category. This *might* err if there is both ethernet, | 282 // CONNECTION_UNKNOWN category. This *might* err if there is both ethernet, |
| 277 // as well as WiFi, where WiFi was not being used that much. | 283 // as well as WiFi, where WiFi was not being used that much. |
| 278 // This function only seems usefully defined on Windows currently. | 284 // This function only seems usefully defined on Windows currently. |
| 279 if (type == NetworkChangeNotifier::CONNECTION_UNKNOWN || | 285 if (type == NetworkChangeNotifier::CONNECTION_UNKNOWN || |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 } | 325 } |
| 320 | 326 |
| 321 } // namespace | 327 } // namespace |
| 322 | 328 |
| 323 QuicConnectionLogger::QuicConnectionLogger(QuicSession* session, | 329 QuicConnectionLogger::QuicConnectionLogger(QuicSession* session, |
| 324 const BoundNetLog& net_log) | 330 const BoundNetLog& net_log) |
| 325 : net_log_(net_log), | 331 : net_log_(net_log), |
| 326 session_(session), | 332 session_(session), |
| 327 last_received_packet_sequence_number_(0), | 333 last_received_packet_sequence_number_(0), |
| 328 last_received_packet_size_(0), | 334 last_received_packet_size_(0), |
| 335 previous_received_packet_size_(0), |
| 329 largest_received_packet_sequence_number_(0), | 336 largest_received_packet_sequence_number_(0), |
| 330 largest_received_missing_packet_sequence_number_(0), | 337 largest_received_missing_packet_sequence_number_(0), |
| 331 num_out_of_order_received_packets_(0), | 338 num_out_of_order_received_packets_(0), |
| 339 num_out_of_order_large_received_packets_(0), |
| 332 num_packets_received_(0), | 340 num_packets_received_(0), |
| 333 num_truncated_acks_sent_(0), | 341 num_truncated_acks_sent_(0), |
| 334 num_truncated_acks_received_(0), | 342 num_truncated_acks_received_(0), |
| 335 num_frames_received_(0), | 343 num_frames_received_(0), |
| 336 num_duplicate_frames_received_(0), | 344 num_duplicate_frames_received_(0), |
| 337 num_incorrect_connection_ids_(0), | 345 num_incorrect_connection_ids_(0), |
| 338 num_undecryptable_packets_(0), | 346 num_undecryptable_packets_(0), |
| 339 num_duplicate_packets_(0), | 347 num_duplicate_packets_(0), |
| 340 num_blocked_frames_received_(0), | 348 num_blocked_frames_received_(0), |
| 341 num_blocked_frames_sent_(0), | 349 num_blocked_frames_sent_(0), |
| 342 connection_description_(GetConnectionDescriptionString()) { | 350 connection_description_(GetConnectionDescriptionString()) { |
| 343 } | 351 } |
| 344 | 352 |
| 345 QuicConnectionLogger::~QuicConnectionLogger() { | 353 QuicConnectionLogger::~QuicConnectionLogger() { |
| 346 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderPacketsReceived", | 354 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderPacketsReceived", |
| 347 num_out_of_order_received_packets_); | 355 num_out_of_order_received_packets_); |
| 356 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderLargePacketsReceived", |
| 357 num_out_of_order_large_received_packets_); |
| 348 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksSent", | 358 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksSent", |
| 349 num_truncated_acks_sent_); | 359 num_truncated_acks_sent_); |
| 350 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksReceived", | 360 UMA_HISTOGRAM_COUNTS("Net.QuicSession.TruncatedAcksReceived", |
| 351 num_truncated_acks_received_); | 361 num_truncated_acks_received_); |
| 352 UMA_HISTOGRAM_COUNTS("Net.QuicSession.IncorrectConnectionIDsReceived", | 362 UMA_HISTOGRAM_COUNTS("Net.QuicSession.IncorrectConnectionIDsReceived", |
| 353 num_incorrect_connection_ids_); | 363 num_incorrect_connection_ids_); |
| 354 UMA_HISTOGRAM_COUNTS("Net.QuicSession.UndecryptablePacketsReceived", | 364 UMA_HISTOGRAM_COUNTS("Net.QuicSession.UndecryptablePacketsReceived", |
| 355 num_undecryptable_packets_); | 365 num_undecryptable_packets_); |
| 356 UMA_HISTOGRAM_COUNTS("Net.QuicSession.DuplicatePacketsReceived", | 366 UMA_HISTOGRAM_COUNTS("Net.QuicSession.DuplicatePacketsReceived", |
| 357 num_duplicate_packets_); | 367 num_duplicate_packets_); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address, | 499 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address, |
| 490 const IPEndPoint& peer_address, | 500 const IPEndPoint& peer_address, |
| 491 const QuicEncryptedPacket& packet) { | 501 const QuicEncryptedPacket& packet) { |
| 492 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) { | 502 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) { |
| 493 local_address_from_self_ = self_address; | 503 local_address_from_self_ = self_address; |
| 494 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf", | 504 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf", |
| 495 GetRealAddressFamily(self_address.address()), | 505 GetRealAddressFamily(self_address.address()), |
| 496 ADDRESS_FAMILY_LAST); | 506 ADDRESS_FAMILY_LAST); |
| 497 } | 507 } |
| 498 | 508 |
| 509 previous_received_packet_size_ = last_received_packet_size_; |
| 499 last_received_packet_size_ = packet.length(); | 510 last_received_packet_size_ = packet.length(); |
| 500 net_log_.AddEvent( | 511 net_log_.AddEvent( |
| 501 NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, | 512 NetLog::TYPE_QUIC_SESSION_PACKET_RECEIVED, |
| 502 base::Bind(&NetLogQuicPacketCallback, &self_address, &peer_address, | 513 base::Bind(&NetLogQuicPacketCallback, &self_address, &peer_address, |
| 503 packet.length())); | 514 packet.length())); |
| 504 } | 515 } |
| 505 | 516 |
| 506 void QuicConnectionLogger::OnIncorrectConnectionId( | 517 void QuicConnectionLogger::OnIncorrectConnectionId( |
| 507 QuicConnectionId connection_id) { | 518 QuicConnectionId connection_id) { |
| 508 ++num_incorrect_connection_ids_; | 519 ++num_incorrect_connection_ids_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 539 static_cast<base::HistogramBase::Sample>(delta - 1)); | 550 static_cast<base::HistogramBase::Sample>(delta - 1)); |
| 540 } | 551 } |
| 541 largest_received_packet_sequence_number_ = header.packet_sequence_number; | 552 largest_received_packet_sequence_number_ = header.packet_sequence_number; |
| 542 } | 553 } |
| 543 if (header.packet_sequence_number < received_packets_.size()) { | 554 if (header.packet_sequence_number < received_packets_.size()) { |
| 544 received_packets_[static_cast<size_t>(header.packet_sequence_number)] = | 555 received_packets_[static_cast<size_t>(header.packet_sequence_number)] = |
| 545 true; | 556 true; |
| 546 } | 557 } |
| 547 if (header.packet_sequence_number < last_received_packet_sequence_number_) { | 558 if (header.packet_sequence_number < last_received_packet_sequence_number_) { |
| 548 ++num_out_of_order_received_packets_; | 559 ++num_out_of_order_received_packets_; |
| 560 if (previous_received_packet_size_ < last_received_packet_size_) |
| 561 ++num_out_of_order_large_received_packets_; |
| 549 UMA_HISTOGRAM_COUNTS( | 562 UMA_HISTOGRAM_COUNTS( |
| 550 "Net.QuicSession.OutOfOrderGapReceived", | 563 "Net.QuicSession.OutOfOrderGapReceived", |
| 551 static_cast<base::HistogramBase::Sample>( | 564 static_cast<base::HistogramBase::Sample>( |
| 552 last_received_packet_sequence_number_ - | 565 last_received_packet_sequence_number_ - |
| 553 header.packet_sequence_number)); | 566 header.packet_sequence_number)); |
| 554 } | 567 } |
| 555 last_received_packet_sequence_number_ = header.packet_sequence_number; | 568 last_received_packet_sequence_number_ = header.packet_sequence_number; |
| 556 } | 569 } |
| 557 | 570 |
| 558 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) { | 571 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) { |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 891 continue; | 904 continue; |
| 892 } | 905 } |
| 893 // Record some overlapping patterns, to get a better picture, since this is | 906 // Record some overlapping patterns, to get a better picture, since this is |
| 894 // not very expensive. | 907 // not very expensive. |
| 895 if (i % 3 == 0) | 908 if (i % 3 == 0) |
| 896 six_packet_histogram->Add(recent_6_mask); | 909 six_packet_histogram->Add(recent_6_mask); |
| 897 } | 910 } |
| 898 } | 911 } |
| 899 | 912 |
| 900 } // namespace net | 913 } // namespace net |
| OLD | NEW |