Project import generated by Copybara.

PiperOrigin-RevId: 237361882
Change-Id: I109a68f44db867b20f8c6a7732b0ce657133e52a
diff --git a/quic/core/quic_connection_stats.h b/quic/core/quic_connection_stats.h
new file mode 100644
index 0000000..8123fb0
--- /dev/null
+++ b/quic/core/quic_connection_stats.h
@@ -0,0 +1,97 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_CORE_QUIC_CONNECTION_STATS_H_
+#define QUICHE_QUIC_CORE_QUIC_CONNECTION_STATS_H_
+
+#include <cstdint>
+#include <ostream>
+
+#include "net/third_party/quiche/src/quic/core/quic_bandwidth.h"
+#include "net/third_party/quiche/src/quic/core/quic_packets.h"
+#include "net/third_party/quiche/src/quic/core/quic_time.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
+
+namespace quic {
+// Structure to hold stats for a QuicConnection.
+struct QUIC_EXPORT_PRIVATE QuicConnectionStats {
+  QuicConnectionStats();
+  QuicConnectionStats(const QuicConnectionStats& other);
+  ~QuicConnectionStats();
+
+  QUIC_EXPORT_PRIVATE friend std::ostream& operator<<(
+      std::ostream& os,
+      const QuicConnectionStats& s);
+
+  QuicByteCount bytes_sent;  // Includes retransmissions.
+  QuicPacketCount packets_sent;
+  // Non-retransmitted bytes sent in a stream frame.
+  QuicByteCount stream_bytes_sent;
+  // Packets serialized and discarded before sending.
+  QuicPacketCount packets_discarded;
+
+  // These include version negotiation and public reset packets, which do not
+  // have packet numbers or frame data.
+  QuicByteCount bytes_received;  // Includes duplicate data for a stream.
+  // Includes packets which were not processable.
+  QuicPacketCount packets_received;
+  // Excludes packets which were not processable.
+  QuicPacketCount packets_processed;
+  QuicByteCount stream_bytes_received;  // Bytes received in a stream frame.
+
+  QuicByteCount bytes_retransmitted;
+  QuicPacketCount packets_retransmitted;
+
+  QuicByteCount bytes_spuriously_retransmitted;
+  QuicPacketCount packets_spuriously_retransmitted;
+  // Number of packets abandoned as lost by the loss detection algorithm.
+  QuicPacketCount packets_lost;
+
+  // Number of packets sent in slow start.
+  QuicPacketCount slowstart_packets_sent;
+  // Number of packets lost exiting slow start.
+  QuicPacketCount slowstart_packets_lost;
+  // Number of bytes lost exiting slow start.
+  QuicByteCount slowstart_bytes_lost;
+
+  QuicPacketCount packets_dropped;  // Duplicate or less than least unacked.
+  size_t crypto_retransmit_count;
+  // Count of times the loss detection alarm fired.  At least one packet should
+  // be lost when the alarm fires.
+  size_t loss_timeout_count;
+  size_t tlp_count;
+  size_t rto_count;  // Count of times the rto timer fired.
+
+  int64_t min_rtt_us;  // Minimum RTT in microseconds.
+  int64_t srtt_us;     // Smoothed RTT in microseconds.
+  QuicByteCount max_packet_size;
+  QuicByteCount max_received_packet_size;
+  QuicBandwidth estimated_bandwidth;
+
+  // Reordering stats for received packets.
+  // Number of packets received out of packet number order.
+  QuicPacketCount packets_reordered;
+  // Maximum reordering observed in packet number space.
+  QuicPacketCount max_sequence_reordering;
+  // Maximum reordering observed in microseconds
+  int64_t max_time_reordering_us;
+
+  // The following stats are used only in TcpCubicSender.
+  // The number of loss events from TCP's perspective.  Each loss event includes
+  // one or more lost packets.
+  uint32_t tcp_loss_events;
+
+  // Creation time, as reported by the QuicClock.
+  QuicTime connection_creation_time;
+
+  uint64_t blocked_frames_received;
+  uint64_t blocked_frames_sent;
+
+  // Number of connectivity probing packets received by this connection.
+  uint64_t num_connectivity_probing_received;
+};
+
+}  // namespace quic
+
+#endif  // QUICHE_QUIC_CORE_QUIC_CONNECTION_STATS_H_