1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "quiche/quic/core/quic_connection_stats.h" 6 7 namespace quic { 8 operator <<(std::ostream & os,const QuicConnectionStats & s)9std::ostream& operator<<(std::ostream& os, const QuicConnectionStats& s) { 10 os << "{ bytes_sent: " << s.bytes_sent; 11 os << " packets_sent: " << s.packets_sent; 12 os << " stream_bytes_sent: " << s.stream_bytes_sent; 13 os << " packets_discarded: " << s.packets_discarded; 14 os << " bytes_received: " << s.bytes_received; 15 os << " packets_received: " << s.packets_received; 16 os << " packets_processed: " << s.packets_processed; 17 os << " stream_bytes_received: " << s.stream_bytes_received; 18 os << " bytes_retransmitted: " << s.bytes_retransmitted; 19 os << " packets_retransmitted: " << s.packets_retransmitted; 20 os << " bytes_spuriously_retransmitted: " << s.bytes_spuriously_retransmitted; 21 os << " packets_spuriously_retransmitted: " 22 << s.packets_spuriously_retransmitted; 23 os << " packets_lost: " << s.packets_lost; 24 os << " slowstart_packets_sent: " << s.slowstart_packets_sent; 25 os << " slowstart_packets_lost: " << s.slowstart_packets_lost; 26 os << " slowstart_bytes_lost: " << s.slowstart_bytes_lost; 27 os << " packets_dropped: " << s.packets_dropped; 28 os << " undecryptable_packets_received_before_handshake_complete: " 29 << s.undecryptable_packets_received_before_handshake_complete; 30 os << " crypto_retransmit_count: " << s.crypto_retransmit_count; 31 os << " loss_timeout_count: " << s.loss_timeout_count; 32 os << " tlp_count: " << s.tlp_count; 33 os << " rto_count: " << s.rto_count; 34 os << " pto_count: " << s.pto_count; 35 os << " min_rtt_us: " << s.min_rtt_us; 36 os << " srtt_us: " << s.srtt_us; 37 os << " egress_mtu: " << s.egress_mtu; 38 os << " max_egress_mtu: " << s.max_egress_mtu; 39 os << " ingress_mtu: " << s.ingress_mtu; 40 os << " estimated_bandwidth: " << s.estimated_bandwidth; 41 os << " packets_reordered: " << s.packets_reordered; 42 os << " max_sequence_reordering: " << s.max_sequence_reordering; 43 os << " max_time_reordering_us: " << s.max_time_reordering_us; 44 os << " tcp_loss_events: " << s.tcp_loss_events; 45 os << " connection_creation_time: " 46 << s.connection_creation_time.ToDebuggingValue(); 47 os << " blocked_frames_received: " << s.blocked_frames_received; 48 os << " blocked_frames_sent: " << s.blocked_frames_sent; 49 os << " num_connectivity_probing_received: " 50 << s.num_connectivity_probing_received; 51 os << " num_path_response_received: " << s.num_path_response_received; 52 os << " retry_packet_processed: " 53 << (s.retry_packet_processed ? "yes" : "no"); 54 os << " num_coalesced_packets_received: " << s.num_coalesced_packets_received; 55 os << " num_coalesced_packets_processed: " 56 << s.num_coalesced_packets_processed; 57 os << " num_ack_aggregation_epochs: " << s.num_ack_aggregation_epochs; 58 os << " key_update_count: " << s.key_update_count; 59 os << " num_failed_authentication_packets_received: " 60 << s.num_failed_authentication_packets_received; 61 os << " num_tls_server_zero_rtt_packets_received_after_discarding_decrypter: " 62 << s.num_tls_server_zero_rtt_packets_received_after_discarding_decrypter; 63 os << " address_validated_via_decrypting_packet: " 64 << s.address_validated_via_decrypting_packet; 65 os << " address_validated_via_token: " << s.address_validated_via_token; 66 os << " server_preferred_address_validated: " 67 << s.server_preferred_address_validated; 68 os << " failed_to_validate_server_preferred_address: " 69 << s.failed_to_validate_server_preferred_address; 70 os << " num_duplicated_packets_sent_to_server_preferred_address: " 71 << s.num_duplicated_packets_sent_to_server_preferred_address; 72 os << " }"; 73 74 return os; 75 } 76 77 } // namespace quic 78