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" |
(...skipping 29 matching lines...) Expand all Loading... |
40 NetLog::LogLevel /* log_level */) { | 40 NetLog::LogLevel /* log_level */) { |
41 base::DictionaryValue* dict = new base::DictionaryValue(); | 41 base::DictionaryValue* dict = new base::DictionaryValue(); |
42 dict->SetString("self_address", self_address->ToString()); | 42 dict->SetString("self_address", self_address->ToString()); |
43 dict->SetString("peer_address", peer_address->ToString()); | 43 dict->SetString("peer_address", peer_address->ToString()); |
44 dict->SetInteger("size", packet_size); | 44 dict->SetInteger("size", packet_size); |
45 return dict; | 45 return dict; |
46 } | 46 } |
47 | 47 |
48 base::Value* NetLogQuicPacketSentCallback( | 48 base::Value* NetLogQuicPacketSentCallback( |
49 const SerializedPacket& serialized_packet, | 49 const SerializedPacket& serialized_packet, |
50 QuicPacketSequenceNumber original_sequence_number, | |
51 EncryptionLevel level, | 50 EncryptionLevel level, |
52 TransmissionType transmission_type, | 51 TransmissionType transmission_type, |
53 size_t packet_size, | 52 size_t packet_size, |
54 QuicTime sent_time, | 53 QuicTime sent_time, |
55 NetLog::LogLevel /* log_level */) { | 54 NetLog::LogLevel /* log_level */) { |
56 base::DictionaryValue* dict = new base::DictionaryValue(); | 55 base::DictionaryValue* dict = new base::DictionaryValue(); |
57 dict->SetInteger("encryption_level", level); | 56 dict->SetInteger("encryption_level", level); |
58 dict->SetInteger("transmission_type", transmission_type); | 57 dict->SetInteger("transmission_type", transmission_type); |
59 dict->SetString("packet_sequence_number", | 58 dict->SetString("packet_sequence_number", |
60 base::Uint64ToString(serialized_packet.sequence_number)); | 59 base::Uint64ToString(serialized_packet.sequence_number)); |
61 dict->SetString("original_sequence_number", | |
62 base::Uint64ToString(original_sequence_number)); | |
63 dict->SetInteger("size", packet_size); | 60 dict->SetInteger("size", packet_size); |
64 dict->SetInteger("sent_time_us", sent_time.ToDebuggingValue()); | 61 dict->SetInteger("sent_time_us", sent_time.ToDebuggingValue()); |
65 return dict; | 62 return dict; |
66 } | 63 } |
67 | 64 |
| 65 base::Value* NetLogQuicPacketRetransmittedCallback( |
| 66 QuicPacketSequenceNumber old_sequence_number, |
| 67 QuicPacketSequenceNumber new_sequence_number, |
| 68 NetLog::LogLevel /* log_level */) { |
| 69 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 70 dict->SetString("old_packet_sequence_number", |
| 71 base::Uint64ToString(old_sequence_number)); |
| 72 dict->SetString("new_packet_sequence_number", |
| 73 base::Uint64ToString(new_sequence_number)); |
| 74 return dict; |
| 75 } |
| 76 |
68 base::Value* NetLogQuicPacketHeaderCallback(const QuicPacketHeader* header, | 77 base::Value* NetLogQuicPacketHeaderCallback(const QuicPacketHeader* header, |
69 NetLog::LogLevel /* log_level */) { | 78 NetLog::LogLevel /* log_level */) { |
70 base::DictionaryValue* dict = new base::DictionaryValue(); | 79 base::DictionaryValue* dict = new base::DictionaryValue(); |
71 dict->SetString("connection_id", | 80 dict->SetString("connection_id", |
72 base::Uint64ToString(header->public_header.connection_id)); | 81 base::Uint64ToString(header->public_header.connection_id)); |
73 dict->SetInteger("reset_flag", header->public_header.reset_flag); | 82 dict->SetInteger("reset_flag", header->public_header.reset_flag); |
74 dict->SetInteger("version_flag", header->public_header.version_flag); | 83 dict->SetInteger("version_flag", header->public_header.version_flag); |
75 dict->SetString("packet_sequence_number", | 84 dict->SetString("packet_sequence_number", |
76 base::Uint64ToString(header->packet_sequence_number)); | 85 base::Uint64ToString(header->packet_sequence_number)); |
77 dict->SetInteger("entropy_flag", header->entropy_flag); | 86 dict->SetInteger("entropy_flag", header->entropy_flag); |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 } | 482 } |
474 } | 483 } |
475 | 484 |
476 void QuicConnectionLogger::OnPacketSent( | 485 void QuicConnectionLogger::OnPacketSent( |
477 const SerializedPacket& serialized_packet, | 486 const SerializedPacket& serialized_packet, |
478 QuicPacketSequenceNumber original_sequence_number, | 487 QuicPacketSequenceNumber original_sequence_number, |
479 EncryptionLevel level, | 488 EncryptionLevel level, |
480 TransmissionType transmission_type, | 489 TransmissionType transmission_type, |
481 const QuicEncryptedPacket& packet, | 490 const QuicEncryptedPacket& packet, |
482 QuicTime sent_time) { | 491 QuicTime sent_time) { |
483 net_log_.AddEvent( | 492 if (original_sequence_number == 0) { |
484 NetLog::TYPE_QUIC_SESSION_PACKET_SENT, | 493 net_log_.AddEvent( |
485 base::Bind(&NetLogQuicPacketSentCallback, serialized_packet, | 494 NetLog::TYPE_QUIC_SESSION_PACKET_SENT, |
486 original_sequence_number, level, transmission_type, | 495 base::Bind(&NetLogQuicPacketSentCallback, serialized_packet, |
487 packet.length(), sent_time)); | 496 level, transmission_type, packet.length(), sent_time)); |
| 497 } else { |
| 498 net_log_.AddEvent( |
| 499 NetLog::TYPE_QUIC_SESSION_PACKET_RETRANSMITTED, |
| 500 base::Bind(&NetLogQuicPacketRetransmittedCallback, |
| 501 original_sequence_number, |
| 502 serialized_packet.sequence_number)); |
| 503 } |
488 } | 504 } |
489 | 505 |
490 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address, | 506 void QuicConnectionLogger::OnPacketReceived(const IPEndPoint& self_address, |
491 const IPEndPoint& peer_address, | 507 const IPEndPoint& peer_address, |
492 const QuicEncryptedPacket& packet) { | 508 const QuicEncryptedPacket& packet) { |
493 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) { | 509 if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) { |
494 local_address_from_self_ = self_address; | 510 local_address_from_self_ = self_address; |
495 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf", | 511 UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.ConnectionTypeFromSelf", |
496 GetRealAddressFamily(self_address.address()), | 512 GetRealAddressFamily(self_address.address()), |
497 ADDRESS_FAMILY_LAST); | 513 ADDRESS_FAMILY_LAST); |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 continue; | 908 continue; |
893 } | 909 } |
894 // Record some overlapping patterns, to get a better picture, since this is | 910 // Record some overlapping patterns, to get a better picture, since this is |
895 // not very expensive. | 911 // not very expensive. |
896 if (i % 3 == 0) | 912 if (i % 3 == 0) |
897 six_packet_histogram->Add(recent_6_mask); | 913 six_packet_histogram->Add(recent_6_mask); |
898 } | 914 } |
899 } | 915 } |
900 | 916 |
901 } // namespace net | 917 } // namespace net |
OLD | NEW |