// 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 NET_QUIC_QUIC_CONNECTION_STATS_H_
#define NET_QUIC_QUIC_CONNECTION_STATS_H_

#include <ostream>

#include "base/basictypes.h"
#include "net/base/net_export.h"
#include "net/quic/quic_time.h"

namespace net {
// Structure to hold stats for a QuicConnection.
struct NET_EXPORT_PRIVATE QuicConnectionStats {
  QuicConnectionStats();
  ~QuicConnectionStats();

  NET_EXPORT_PRIVATE friend std::ostream& operator<<(
      std::ostream& os, const QuicConnectionStats& s);

  uint64 bytes_sent;  // Includes retransmissions, fec.
  uint32 packets_sent;
  uint64 stream_bytes_sent;  // non-retransmitted bytes sent in a stream frame.
  uint32 packets_discarded;  // Packets serialized and discarded before sending.

  // These include version negotiation and public reset packets, which do not
  // have sequence numbers or frame data.
  uint64 bytes_received;  // Includes duplicate data for a stream, fec.
  uint32 packets_received;  // Includes packets which were not processable.
  uint32 packets_processed;  // Excludes packets which were not processable.
  uint64 stream_bytes_received;  // Bytes received in a stream frame.

  uint64 bytes_retransmitted;
  uint32 packets_retransmitted;

  uint64 bytes_spuriously_retransmitted;
  uint32 packets_spuriously_retransmitted;
  // Number of packets abandoned as lost by the loss detection algorithm.
  uint32 packets_lost;
  uint32 slowstart_packets_lost;  // Number of packets lost exiting slow start.

  uint32 packets_revived;
  uint32 packets_dropped;  // Duplicate or less than least unacked.
  uint32 crypto_retransmit_count;
  // Count of times the loss detection alarm fired.  At least one packet should
  // be lost when the alarm fires.
  uint32 loss_timeout_count;
  uint32 tlp_count;
  uint32 rto_count;  // Count of times the rto timer fired.
  uint32 spurious_rto_count;

  uint32 min_rtt_us;  // Minimum RTT in microseconds.
  uint32 srtt_us;  // Smoothed RTT in microseconds.
  uint32 max_packet_size;  // In bytes.
  uint64 estimated_bandwidth;  // In bytes per second.
  uint32 congestion_window;  // In bytes
  uint32 slow_start_threshold;  // In bytes

  // Reordering stats for received packets.
  // Number of packets received out of sequence number order.
  uint32 packets_reordered;
  // Maximum reordering observed in sequence space.
  uint32 max_sequence_reordering;
  // Maximum reordering observed in microseconds
  uint32 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 tcp_loss_events;
  // Total amount of cwnd increase by TCPCubic in congestion avoidance.
  uint32 cwnd_increase_congestion_avoidance;
  // Total amount of cwnd increase by TCPCubic in cubic mode.
  uint32 cwnd_increase_cubic_mode;

  // Creation time, as reported by the QuicClock.
  QuicTime connection_creation_time;
};

}  // namespace net

#endif  // NET_QUIC_QUIC_CONNECTION_STATS_H_
