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

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

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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
« no previous file with comments | « net/quic/quic_connection_logger.h ('k') | net/quic/quic_connection_stats.h » ('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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 TransmissionType transmission_type, 51 TransmissionType transmission_type,
52 size_t packet_size, 52 size_t packet_size,
53 QuicTime sent_time, 53 QuicTime sent_time,
54 NetLog::LogLevel /* log_level */) { 54 NetLog::LogLevel /* log_level */) {
55 base::DictionaryValue* dict = new base::DictionaryValue(); 55 base::DictionaryValue* dict = new base::DictionaryValue();
56 dict->SetInteger("encryption_level", level); 56 dict->SetInteger("encryption_level", level);
57 dict->SetInteger("transmission_type", transmission_type); 57 dict->SetInteger("transmission_type", transmission_type);
58 dict->SetString("packet_sequence_number", 58 dict->SetString("packet_sequence_number",
59 base::Uint64ToString(serialized_packet.sequence_number)); 59 base::Uint64ToString(serialized_packet.sequence_number));
60 dict->SetInteger("size", packet_size); 60 dict->SetInteger("size", packet_size);
61 dict->SetInteger("sent_time_us", sent_time.ToDebuggingValue()); 61 dict->SetInteger("sent_time_us",
62 static_cast<int>(sent_time.ToDebuggingValue()));
62 return dict; 63 return dict;
63 } 64 }
64 65
65 base::Value* NetLogQuicPacketRetransmittedCallback( 66 base::Value* NetLogQuicPacketRetransmittedCallback(
66 QuicPacketSequenceNumber old_sequence_number, 67 QuicPacketSequenceNumber old_sequence_number,
67 QuicPacketSequenceNumber new_sequence_number, 68 QuicPacketSequenceNumber new_sequence_number,
68 NetLog::LogLevel /* log_level */) { 69 NetLog::LogLevel /* log_level */) {
69 base::DictionaryValue* dict = new base::DictionaryValue(); 70 base::DictionaryValue* dict = new base::DictionaryValue();
70 dict->SetString("old_packet_sequence_number", 71 dict->SetString("old_packet_sequence_number",
71 base::Uint64ToString(old_sequence_number)); 72 base::Uint64ToString(old_sequence_number));
72 dict->SetString("new_packet_sequence_number", 73 dict->SetString("new_packet_sequence_number",
73 base::Uint64ToString(new_sequence_number)); 74 base::Uint64ToString(new_sequence_number));
74 return dict; 75 return dict;
75 } 76 }
76 77
77 base::Value* NetLogQuicPacketHeaderCallback(const QuicPacketHeader* header, 78 base::Value* NetLogQuicPacketHeaderCallback(const QuicPacketHeader* header,
78 NetLog::LogLevel /* log_level */) { 79 NetLog::LogLevel /* log_level */) {
79 base::DictionaryValue* dict = new base::DictionaryValue(); 80 base::DictionaryValue* dict = new base::DictionaryValue();
80 dict->SetString("connection_id", 81 dict->SetString("connection_id",
81 base::Uint64ToString(header->public_header.connection_id)); 82 base::Uint64ToString(header->public_header.connection_id));
82 dict->SetInteger("reset_flag", header->public_header.reset_flag); 83 dict->SetInteger("reset_flag", header->public_header.reset_flag);
83 dict->SetInteger("version_flag", header->public_header.version_flag); 84 dict->SetInteger("version_flag", header->public_header.version_flag);
84 dict->SetString("packet_sequence_number", 85 dict->SetString("packet_sequence_number",
85 base::Uint64ToString(header->packet_sequence_number)); 86 base::Uint64ToString(header->packet_sequence_number));
86 dict->SetInteger("entropy_flag", header->entropy_flag); 87 dict->SetInteger("entropy_flag", header->entropy_flag);
87 dict->SetInteger("fec_flag", header->fec_flag); 88 dict->SetInteger("fec_flag", header->fec_flag);
88 dict->SetInteger("fec_group", header->fec_group); 89 dict->SetInteger("fec_group", static_cast<int>(header->fec_group));
89 return dict; 90 return dict;
90 } 91 }
91 92
92 base::Value* NetLogQuicStreamFrameCallback(const QuicStreamFrame* frame, 93 base::Value* NetLogQuicStreamFrameCallback(const QuicStreamFrame* frame,
93 NetLog::LogLevel /* log_level */) { 94 NetLog::LogLevel /* log_level */) {
94 base::DictionaryValue* dict = new base::DictionaryValue(); 95 base::DictionaryValue* dict = new base::DictionaryValue();
95 dict->SetInteger("stream_id", frame->stream_id); 96 dict->SetInteger("stream_id", frame->stream_id);
96 dict->SetBoolean("fin", frame->fin); 97 dict->SetBoolean("fin", frame->fin);
97 dict->SetString("offset", base::Uint64ToString(frame->offset)); 98 dict->SetString("offset", base::Uint64ToString(frame->offset));
98 dict->SetInteger("length", frame->data.TotalBufferSize()); 99 dict->SetInteger("length", frame->data.TotalBufferSize());
99 return dict; 100 return dict;
100 } 101 }
101 102
102 base::Value* NetLogQuicAckFrameCallback(const QuicAckFrame* frame, 103 base::Value* NetLogQuicAckFrameCallback(const QuicAckFrame* frame,
103 NetLog::LogLevel /* log_level */) { 104 NetLog::LogLevel /* log_level */) {
104 base::DictionaryValue* dict = new base::DictionaryValue(); 105 base::DictionaryValue* dict = new base::DictionaryValue();
105 dict->SetString("largest_observed", 106 dict->SetString("largest_observed",
106 base::Uint64ToString(frame->largest_observed)); 107 base::Uint64ToString(frame->largest_observed));
107 dict->SetInteger("delta_time_largest_observed_us", 108 dict->SetInteger(
108 frame->delta_time_largest_observed.ToMicroseconds()); 109 "delta_time_largest_observed_us",
110 static_cast<int>(frame->delta_time_largest_observed.ToMicroseconds()));
109 dict->SetInteger("entropy_hash", 111 dict->SetInteger("entropy_hash",
110 frame->entropy_hash); 112 frame->entropy_hash);
111 dict->SetBoolean("truncated", frame->is_truncated); 113 dict->SetBoolean("truncated", frame->is_truncated);
112 114
113 base::ListValue* missing = new base::ListValue(); 115 base::ListValue* missing = new base::ListValue();
114 dict->Set("missing_packets", missing); 116 dict->Set("missing_packets", missing);
115 const SequenceNumberSet& missing_packets = frame->missing_packets; 117 const SequenceNumberSet& missing_packets = frame->missing_packets;
116 for (SequenceNumberSet::const_iterator it = missing_packets.begin(); 118 for (SequenceNumberSet::const_iterator it = missing_packets.begin();
117 it != missing_packets.end(); ++it) { 119 it != missing_packets.end(); ++it) {
118 missing->AppendString(base::Uint64ToString(*it)); 120 missing->AppendString(base::Uint64ToString(*it));
119 } 121 }
120 122
121 base::ListValue* revived = new base::ListValue(); 123 base::ListValue* revived = new base::ListValue();
122 dict->Set("revived_packets", revived); 124 dict->Set("revived_packets", revived);
123 const SequenceNumberSet& revived_packets = frame->revived_packets; 125 const SequenceNumberSet& revived_packets = frame->revived_packets;
124 for (SequenceNumberSet::const_iterator it = revived_packets.begin(); 126 for (SequenceNumberSet::const_iterator it = revived_packets.begin();
125 it != revived_packets.end(); ++it) { 127 it != revived_packets.end(); ++it) {
126 revived->AppendString(base::Uint64ToString(*it)); 128 revived->AppendString(base::Uint64ToString(*it));
127 } 129 }
128 130
129 base::ListValue* received = new base::ListValue(); 131 base::ListValue* received = new base::ListValue();
130 dict->Set("received_packet_times", received); 132 dict->Set("received_packet_times", received);
131 const PacketTimeList& received_times = frame->received_packet_times; 133 const PacketTimeList& received_times = frame->received_packet_times;
132 for (PacketTimeList::const_iterator it = received_times.begin(); 134 for (PacketTimeList::const_iterator it = received_times.begin();
133 it != received_times.end(); ++it) { 135 it != received_times.end(); ++it) {
134 base::DictionaryValue* info = new base::DictionaryValue(); 136 base::DictionaryValue* info = new base::DictionaryValue();
135 info->SetInteger("sequence_number", it->first); 137 info->SetInteger("sequence_number", static_cast<int>(it->first));
136 info->SetInteger("received", it->second.ToDebuggingValue()); 138 info->SetInteger("received",
139 static_cast<int>(it->second.ToDebuggingValue()));
137 received->Append(info); 140 received->Append(info);
138 } 141 }
139 142
140 return dict; 143 return dict;
141 } 144 }
142 145
143 base::Value* NetLogQuicCongestionFeedbackFrameCallback( 146 base::Value* NetLogQuicCongestionFeedbackFrameCallback(
144 const QuicCongestionFeedbackFrame* frame, 147 const QuicCongestionFeedbackFrame* frame,
145 NetLog::LogLevel /* log_level */) { 148 NetLog::LogLevel /* log_level */) {
146 base::DictionaryValue* dict = new base::DictionaryValue(); 149 base::DictionaryValue* dict = new base::DictionaryValue();
147 switch (frame->type) { 150 switch (frame->type) {
148 case kTCP: 151 case kTCP:
149 dict->SetString("type", "TCP"); 152 dict->SetString("type", "TCP");
150 dict->SetInteger("receive_window", frame->tcp.receive_window); 153 dict->SetInteger("receive_window",
154 static_cast<int>(frame->tcp.receive_window));
151 break; 155 break;
152 } 156 }
153 157
154 return dict; 158 return dict;
155 } 159 }
156 160
157 base::Value* NetLogQuicRstStreamFrameCallback( 161 base::Value* NetLogQuicRstStreamFrameCallback(
158 const QuicRstStreamFrame* frame, 162 const QuicRstStreamFrame* frame,
159 NetLog::LogLevel /* log_level */) { 163 NetLog::LogLevel /* log_level */) {
160 base::DictionaryValue* dict = new base::DictionaryValue(); 164 base::DictionaryValue* dict = new base::DictionaryValue();
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 base::Bind(&NetLogQuicPacketHeaderCallback, &header)); 549 base::Bind(&NetLogQuicPacketHeaderCallback, &header));
546 ++num_packets_received_; 550 ++num_packets_received_;
547 if (largest_received_packet_sequence_number_ < 551 if (largest_received_packet_sequence_number_ <
548 header.packet_sequence_number) { 552 header.packet_sequence_number) {
549 QuicPacketSequenceNumber delta = header.packet_sequence_number - 553 QuicPacketSequenceNumber delta = header.packet_sequence_number -
550 largest_received_packet_sequence_number_; 554 largest_received_packet_sequence_number_;
551 if (delta > 1) { 555 if (delta > 1) {
552 // There is a gap between the largest packet previously received and 556 // There is a gap between the largest packet previously received and
553 // the current packet. This indicates either loss, or out-of-order 557 // the current packet. This indicates either loss, or out-of-order
554 // delivery. 558 // delivery.
555 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapReceived", delta - 1); 559 UMA_HISTOGRAM_COUNTS("Net.QuicSession.PacketGapReceived",
560 static_cast<base::HistogramBase::Sample>(delta - 1));
556 } 561 }
557 largest_received_packet_sequence_number_ = header.packet_sequence_number; 562 largest_received_packet_sequence_number_ = header.packet_sequence_number;
558 } 563 }
559 if (header.packet_sequence_number < received_packets_.size()) 564 if (header.packet_sequence_number < received_packets_.size()) {
560 received_packets_[header.packet_sequence_number] = true; 565 received_packets_[static_cast<size_t>(header.packet_sequence_number)] =
566 true;
567 }
561 if (header.packet_sequence_number < last_received_packet_sequence_number_) { 568 if (header.packet_sequence_number < last_received_packet_sequence_number_) {
562 ++num_out_of_order_received_packets_; 569 ++num_out_of_order_received_packets_;
563 UMA_HISTOGRAM_COUNTS("Net.QuicSession.OutOfOrderGapReceived", 570 UMA_HISTOGRAM_COUNTS(
564 last_received_packet_sequence_number_ - 571 "Net.QuicSession.OutOfOrderGapReceived",
565 header.packet_sequence_number); 572 static_cast<base::HistogramBase::Sample>(
573 last_received_packet_sequence_number_ -
574 header.packet_sequence_number));
566 } 575 }
567 last_received_packet_sequence_number_ = header.packet_sequence_number; 576 last_received_packet_sequence_number_ = header.packet_sequence_number;
568 } 577 }
569 578
570 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) { 579 void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) {
571 net_log_.AddEvent( 580 net_log_.AddEvent(
572 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_RECEIVED, 581 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_RECEIVED,
573 base::Bind(&NetLogQuicStreamFrameCallback, &frame)); 582 base::Bind(&NetLogQuicStreamFrameCallback, &frame));
574 } 583 }
575 584
576 void QuicConnectionLogger::OnAckFrame(const QuicAckFrame& frame) { 585 void QuicConnectionLogger::OnAckFrame(const QuicAckFrame& frame) {
577 net_log_.AddEvent( 586 net_log_.AddEvent(
578 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_RECEIVED, 587 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_RECEIVED,
579 base::Bind(&NetLogQuicAckFrameCallback, &frame)); 588 base::Bind(&NetLogQuicAckFrameCallback, &frame));
580 589
581 const size_t kApproximateLargestSoloAckBytes = 100; 590 const size_t kApproximateLargestSoloAckBytes = 100;
582 if (last_received_packet_sequence_number_ < received_acks_.size() && 591 if (last_received_packet_sequence_number_ < received_acks_.size() &&
583 last_received_packet_size_ < kApproximateLargestSoloAckBytes) 592 last_received_packet_size_ < kApproximateLargestSoloAckBytes) {
584 received_acks_[last_received_packet_sequence_number_] = true; 593 received_acks_[static_cast<size_t>(last_received_packet_sequence_number_)] =
594 true;
595 }
585 596
586 if (frame.is_truncated) 597 if (frame.is_truncated)
587 ++num_truncated_acks_received_; 598 ++num_truncated_acks_received_;
588 599
589 if (frame.missing_packets.empty()) 600 if (frame.missing_packets.empty())
590 return; 601 return;
591 602
592 SequenceNumberSet missing_packets = frame.missing_packets; 603 SequenceNumberSet missing_packets = frame.missing_packets;
593 SequenceNumberSet::const_iterator it = missing_packets.lower_bound( 604 SequenceNumberSet::const_iterator it = missing_packets.lower_bound(
594 largest_received_missing_packet_sequence_number_); 605 largest_received_missing_packet_sequence_number_);
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 QuicPacketSequenceNumber divisor = largest_received_packet_sequence_number_; 843 QuicPacketSequenceNumber divisor = largest_received_packet_sequence_number_;
833 QuicPacketSequenceNumber numerator = divisor - num_packets_received_; 844 QuicPacketSequenceNumber numerator = divisor - num_packets_received_;
834 if (divisor < 100000) 845 if (divisor < 100000)
835 numerator *= 1000; 846 numerator *= 1000;
836 else 847 else
837 divisor /= 1000; 848 divisor /= 1000;
838 string prefix("Net.QuicSession.PacketLossRate_"); 849 string prefix("Net.QuicSession.PacketLossRate_");
839 base::HistogramBase* histogram = base::Histogram::FactoryGet( 850 base::HistogramBase* histogram = base::Histogram::FactoryGet(
840 prefix + connection_description_, 1, 1000, 75, 851 prefix + connection_description_, 1, 1000, 75,
841 base::HistogramBase::kUmaTargetedHistogramFlag); 852 base::HistogramBase::kUmaTargetedHistogramFlag);
842 histogram->Add(numerator / divisor); 853 histogram->Add(static_cast<base::HistogramBase::Sample>(numerator / divisor));
843 } 854 }
844 855
845 void QuicConnectionLogger::RecordLossHistograms() const { 856 void QuicConnectionLogger::RecordLossHistograms() const {
846 if (largest_received_packet_sequence_number_ == 0) 857 if (largest_received_packet_sequence_number_ == 0)
847 return; // Connection was never used. 858 return; // Connection was never used.
848 RecordAggregatePacketLossRate(); 859 RecordAggregatePacketLossRate();
849 860
850 base::HistogramBase* is_not_ack_histogram = 861 base::HistogramBase* is_not_ack_histogram =
851 GetPacketSequenceNumberHistogram("IsNotAck_"); 862 GetPacketSequenceNumberHistogram("IsNotAck_");
852 base::HistogramBase* is_an_ack_histogram = 863 base::HistogramBase* is_an_ack_histogram =
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 continue; 919 continue;
909 } 920 }
910 // Record some overlapping patterns, to get a better picture, since this is 921 // Record some overlapping patterns, to get a better picture, since this is
911 // not very expensive. 922 // not very expensive.
912 if (i % 3 == 0) 923 if (i % 3 == 0)
913 six_packet_histogram->Add(recent_6_mask); 924 six_packet_histogram->Add(recent_6_mask);
914 } 925 }
915 } 926 }
916 927
917 } // namespace net 928 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_logger.h ('k') | net/quic/quic_connection_stats.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698