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

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

Issue 1330973002: relnote: Refactor QuicAckFrame::missing_packets to support a change to a (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Tidy_up_DLOG_messages_101773586
Patch Set: Created 5 years, 3 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_connection.cc ('k') | net/quic/quic_connection_logger_unittest.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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 base::Uint64ToString(frame->largest_observed)); 118 base::Uint64ToString(frame->largest_observed));
119 dict->SetString( 119 dict->SetString(
120 "delta_time_largest_observed_us", 120 "delta_time_largest_observed_us",
121 base::Int64ToString(frame->delta_time_largest_observed.ToMicroseconds())); 121 base::Int64ToString(frame->delta_time_largest_observed.ToMicroseconds()));
122 dict->SetInteger("entropy_hash", 122 dict->SetInteger("entropy_hash",
123 frame->entropy_hash); 123 frame->entropy_hash);
124 dict->SetBoolean("truncated", frame->is_truncated); 124 dict->SetBoolean("truncated", frame->is_truncated);
125 125
126 base::ListValue* missing = new base::ListValue(); 126 base::ListValue* missing = new base::ListValue();
127 dict->Set("missing_packets", missing); 127 dict->Set("missing_packets", missing);
128 const PacketNumberSet& missing_packets = frame->missing_packets; 128 for (QuicPacketNumber packet : frame->missing_packets)
129 for (PacketNumberSet::const_iterator it = missing_packets.begin(); 129 missing->AppendString(base::Uint64ToString(packet));
130 it != missing_packets.end(); ++it) {
131 missing->AppendString(base::Uint64ToString(*it));
132 }
133 130
134 base::ListValue* revived = new base::ListValue(); 131 base::ListValue* revived = new base::ListValue();
135 dict->Set("revived_packets", revived); 132 dict->Set("revived_packets", revived);
136 const PacketNumberSet& revived_packets = frame->revived_packets; 133 const PacketNumberSet& revived_packets = frame->revived_packets;
137 for (PacketNumberSet::const_iterator it = revived_packets.begin(); 134 for (PacketNumberSet::const_iterator it = revived_packets.begin();
138 it != revived_packets.end(); ++it) { 135 it != revived_packets.end(); ++it) {
139 revived->AppendString(base::Uint64ToString(*it)); 136 revived->AppendString(base::Uint64ToString(*it));
140 } 137 }
141 138
142 base::ListValue* received = new base::ListValue(); 139 base::ListValue* received = new base::ListValue();
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 break; 354 break;
358 case STREAM_FRAME: 355 case STREAM_FRAME:
359 net_log_.AddEvent( 356 net_log_.AddEvent(
360 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_SENT, 357 NetLog::TYPE_QUIC_SESSION_STREAM_FRAME_SENT,
361 base::Bind(&NetLogQuicStreamFrameCallback, frame.stream_frame)); 358 base::Bind(&NetLogQuicStreamFrameCallback, frame.stream_frame));
362 break; 359 break;
363 case ACK_FRAME: { 360 case ACK_FRAME: {
364 net_log_.AddEvent( 361 net_log_.AddEvent(
365 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_SENT, 362 NetLog::TYPE_QUIC_SESSION_ACK_FRAME_SENT,
366 base::Bind(&NetLogQuicAckFrameCallback, frame.ack_frame)); 363 base::Bind(&NetLogQuicAckFrameCallback, frame.ack_frame));
367 const PacketNumberSet& missing_packets = frame.ack_frame->missing_packets; 364 const PacketNumberQueue& missing_packets =
365 frame.ack_frame->missing_packets;
368 const uint8 max_ranges = std::numeric_limits<uint8>::max(); 366 const uint8 max_ranges = std::numeric_limits<uint8>::max();
369 // Compute an upper bound on the number of NACK ranges. If the bound 367 // Compute an upper bound on the number of NACK ranges. If the bound
370 // is below the max, then it clearly isn't truncated. 368 // is below the max, then it clearly isn't truncated.
371 if (missing_packets.size() < max_ranges || 369 if (missing_packets.NumPackets() < max_ranges ||
372 (*missing_packets.rbegin() - *missing_packets.begin() - 370 (missing_packets.Max() - missing_packets.Min() -
373 missing_packets.size() + 1) < max_ranges) { 371 missing_packets.NumPackets() + 1) < max_ranges) {
374 break; 372 break;
375 } 373 }
376 size_t num_ranges = 0; 374 size_t num_ranges = 0;
377 QuicPacketNumber last_missing = 0; 375 QuicPacketNumber last_missing = 0;
378 for (PacketNumberSet::const_iterator it = missing_packets.begin(); 376 for (QuicPacketNumber packet : missing_packets) {
379 it != missing_packets.end(); ++it) { 377 if (packet != last_missing + 1 && ++num_ranges >= max_ranges) {
380 if (*it != last_missing + 1 && ++num_ranges >= max_ranges) {
381 ++num_truncated_acks_sent_; 378 ++num_truncated_acks_sent_;
382 break; 379 break;
383 } 380 }
384 last_missing = *it; 381 last_missing = packet;
385 } 382 }
386 break; 383 break;
387 } 384 }
388 case RST_STREAM_FRAME: 385 case RST_STREAM_FRAME:
389 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeClient", 386 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.RstStreamErrorCodeClient",
390 frame.rst_stream_frame->error_code); 387 frame.rst_stream_frame->error_code);
391 net_log_.AddEvent( 388 net_log_.AddEvent(
392 NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_SENT, 389 NetLog::TYPE_QUIC_SESSION_RST_STREAM_FRAME_SENT,
393 base::Bind(&NetLogQuicRstStreamFrameCallback, 390 base::Bind(&NetLogQuicRstStreamFrameCallback,
394 frame.rst_stream_frame)); 391 frame.rst_stream_frame));
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 547
551 const size_t kApproximateLargestSoloAckBytes = 100; 548 const size_t kApproximateLargestSoloAckBytes = 100;
552 if (last_received_packet_number_ < received_acks_.size() && 549 if (last_received_packet_number_ < received_acks_.size() &&
553 last_received_packet_size_ < kApproximateLargestSoloAckBytes) { 550 last_received_packet_size_ < kApproximateLargestSoloAckBytes) {
554 received_acks_[static_cast<size_t>(last_received_packet_number_)] = true; 551 received_acks_[static_cast<size_t>(last_received_packet_number_)] = true;
555 } 552 }
556 553
557 if (frame.is_truncated) 554 if (frame.is_truncated)
558 ++num_truncated_acks_received_; 555 ++num_truncated_acks_received_;
559 556
560 if (frame.missing_packets.empty()) 557 if (frame.missing_packets.Empty())
561 return; 558 return;
562 559
563 PacketNumberSet missing_packets = frame.missing_packets; 560 const PacketNumberQueue& missing_packets = frame.missing_packets;
ramant (doing other things) 2015/09/10 03:58:26 Hi Ryan, Added lower_bound method. Could you ple
564 PacketNumberSet::const_iterator it = 561 PacketNumberQueue::const_iterator it =
565 missing_packets.lower_bound(largest_received_missing_packet_number_); 562 missing_packets.lower_bound(largest_received_missing_packet_number_);
566 if (it == missing_packets.end()) 563 if (it == missing_packets.end())
567 return; 564 return;
568 565
569 if (*it == largest_received_missing_packet_number_) { 566 if (*it == largest_received_missing_packet_number_) {
570 ++it; 567 ++it;
571 if (it == missing_packets.end()) 568 if (it == missing_packets.end())
572 return; 569 return;
573 } 570 }
574 // Scan through the list and log consecutive ranges of missing packets. 571 // Scan through the list and log consecutive ranges of missing packets.
575 size_t num_consecutive_missing_packets = 0; 572 size_t num_consecutive_missing_packets = 0;
576 QuicPacketNumber previous_missing_packet = *it - 1; 573 QuicPacketNumber previous_missing_packet = *it - 1;
577 while (it != missing_packets.end()) { 574 while (it != missing_packets.end()) {
578 if (previous_missing_packet == *it - 1) { 575 if (previous_missing_packet == *it - 1) {
579 ++num_consecutive_missing_packets; 576 ++num_consecutive_missing_packets;
580 } else { 577 } else {
581 DCHECK_NE(0u, num_consecutive_missing_packets); 578 DCHECK_NE(0u, num_consecutive_missing_packets);
582 UpdatePacketGapSentHistogram(num_consecutive_missing_packets); 579 UpdatePacketGapSentHistogram(num_consecutive_missing_packets);
583 // Make sure this packet it included in the count. 580 // Make sure this packet it included in the count.
584 num_consecutive_missing_packets = 1; 581 num_consecutive_missing_packets = 1;
585 } 582 }
586 previous_missing_packet = *it; 583 previous_missing_packet = *it;
587 ++it; 584 ++it;
588 } 585 }
589 if (num_consecutive_missing_packets != 0) { 586 if (num_consecutive_missing_packets != 0) {
590 UpdatePacketGapSentHistogram(num_consecutive_missing_packets); 587 UpdatePacketGapSentHistogram(num_consecutive_missing_packets);
591 } 588 }
592 largest_received_missing_packet_number_ = *missing_packets.rbegin(); 589 largest_received_missing_packet_number_ = missing_packets.Max();
593 } 590 }
594 591
595 void QuicConnectionLogger::OnStopWaitingFrame( 592 void QuicConnectionLogger::OnStopWaitingFrame(
596 const QuicStopWaitingFrame& frame) { 593 const QuicStopWaitingFrame& frame) {
597 net_log_.AddEvent( 594 net_log_.AddEvent(
598 NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_RECEIVED, 595 NetLog::TYPE_QUIC_SESSION_STOP_WAITING_FRAME_RECEIVED,
599 base::Bind(&NetLogQuicStopWaitingFrameCallback, &frame)); 596 base::Bind(&NetLogQuicStopWaitingFrameCallback, &frame));
600 } 597 }
601 598
602 void QuicConnectionLogger::OnRstStreamFrame(const QuicRstStreamFrame& frame) { 599 void QuicConnectionLogger::OnRstStreamFrame(const QuicRstStreamFrame& frame) {
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 continue; 869 continue;
873 } 870 }
874 // Record some overlapping patterns, to get a better picture, since this is 871 // Record some overlapping patterns, to get a better picture, since this is
875 // not very expensive. 872 // not very expensive.
876 if (i % 3 == 0) 873 if (i % 3 == 0)
877 six_packet_histogram->Add(recent_6_mask); 874 six_packet_histogram->Add(recent_6_mask);
878 } 875 }
879 } 876 }
880 877
881 } // namespace net 878 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_connection_logger_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698