| Index: net/quic/quic_connection_logger.cc
|
| diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc
|
| index fe529d882b21d32425f8c6cd7d0e327d0fb9b9dd..a9840a3c0ffd8b652809c60fcf0544882d0b6412 100644
|
| --- a/net/quic/quic_connection_logger.cc
|
| +++ b/net/quic/quic_connection_logger.cc
|
| @@ -500,6 +500,9 @@ void QuicConnectionLogger::OnProtocolVersionMismatch(
|
| void QuicConnectionLogger::OnPacketHeader(const QuicPacketHeader& header) {
|
| net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PACKET_AUTHENTICATED);
|
| ++num_packets_received_;
|
| +
|
| + const QuicPacketCount previous_largest_received_packet_number =
|
| + largest_received_packet_number_;
|
| if (largest_received_packet_number_ < header.packet_number) {
|
| QuicPacketNumber delta =
|
| header.packet_number - largest_received_packet_number_;
|
| @@ -525,6 +528,44 @@ void QuicConnectionLogger::OnPacketHeader(const QuicPacketHeader& header) {
|
| header.packet_number));
|
| }
|
| last_received_packet_number_ = header.packet_number;
|
| + ReportIncrementalPacketCounts(previous_largest_received_packet_number);
|
| +}
|
| +
|
| +void QuicConnectionLogger::ReportIncrementalPacketCounts(
|
| + QuicPacketCount previous_largest_received_packet_number) const {
|
| + DCHECK_GE(largest_received_packet_number_,
|
| + previous_largest_received_packet_number);
|
| + if (!socket_performance_watcher_)
|
| + return;
|
| +
|
| + size_t packets_missing = 0;
|
| + size_t packets_received_in_order = 0;
|
| + size_t packets_received_out_of_order = 0;
|
| +
|
| + const size_t diff =
|
| + largest_received_packet_number_ - previous_largest_received_packet_number;
|
| +
|
| + if (diff == 0) {
|
| + // The received packet number has a lower sequence number than the expected
|
| + // sequence number.
|
| + packets_received_out_of_order = 1;
|
| + } else if (diff == 1) {
|
| + // The received packet number has the same sequence number as the expected
|
| + // sequence number.
|
| + packets_received_in_order = 1;
|
| + } else {
|
| + // The received packet number has higher sequence number as the expected
|
| + // sequence number. Report all packets with intermediate sequence numbers
|
| + // as currently missing, but they may be received later and will be counted
|
| + // as out of order.
|
| + // TODO(tbansal): Do not report if |diff| is more than a threshold to avoid
|
| + // cases where the QUIC transmitter skips certain packet sequence numbers.
|
| + packets_missing = diff - 1;
|
| + packets_received_in_order = 1;
|
| + }
|
| + socket_performance_watcher_->OnIncrementalPacketCountAvailable(
|
| + packets_missing, packets_received_in_order,
|
| + packets_received_out_of_order);
|
| }
|
|
|
| void QuicConnectionLogger::OnStreamFrame(const QuicStreamFrame& frame) {
|
| @@ -772,8 +813,8 @@ void QuicConnectionLogger::AddTo21CumulativeHistogram(
|
| float QuicConnectionLogger::ReceivedPacketLossRate() const {
|
| if (largest_received_packet_number_ <= num_packets_received_)
|
| return 0.0f;
|
| - float num_received = largest_received_packet_number_ - num_packets_received_;
|
| - return num_received / largest_received_packet_number_;
|
| + float num_lost = largest_received_packet_number_ - num_packets_received_;
|
| + return num_lost / largest_received_packet_number_;
|
| }
|
|
|
| void QuicConnectionLogger::OnRttChanged(QuicTime::Delta rtt) const {
|
|
|