// 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;

  int64 min_rtt_us;  // Minimum RTT in microseconds.
  int64 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
  int64 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_
