Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(969)

Unified Diff: net/quic/quic_sent_packet_manager_interface.h

Issue 2002083002: Add QuicSentPacketManagerInterface, and QuicSentPacketManager implements it. No functional change e… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_sent_packet_manager_interface.h
diff --git a/net/quic/quic_sent_packet_manager_interface.h b/net/quic/quic_sent_packet_manager_interface.h
new file mode 100644
index 0000000000000000000000000000000000000000..00fec531968e8ef74e0c1d830055113721cbb96a
--- /dev/null
+++ b/net/quic/quic_sent_packet_manager_interface.h
@@ -0,0 +1,193 @@
+// Copyright 2016 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_SENT_PACKET_MANAGER_INTERFACE_H_
+#define NET_QUIC_QUIC_SENT_PACKET_MANAGER_INTERFACE_H_
+
+#include "base/macros.h"
+#include "net/quic/proto/cached_network_parameters.pb.h"
+#include "net/quic/quic_protocol.h"
+#include "net/quic/quic_sustained_bandwidth_recorder.h"
+
+namespace net {
+
+class QuicConfig;
+class RttStats;
+
+class NET_EXPORT_PRIVATE QuicSentPacketManagerInterface {
+ public:
+ // Interface which gets callbacks from the QuicSentPacketManager at
+ // interesting points. Implementations must not mutate the state of
+ // the packet manager or connection as a result of these callbacks.
+ class NET_EXPORT_PRIVATE DebugDelegate {
+ public:
+ virtual ~DebugDelegate() {}
+
+ // Called when a spurious retransmission is detected.
+ virtual void OnSpuriousPacketRetransmission(
+ TransmissionType transmission_type,
+ QuicByteCount byte_size) {}
+
+ virtual void OnIncomingAck(const QuicAckFrame& ack_frame,
+ QuicTime ack_receive_time,
+ QuicPacketNumber largest_observed,
+ bool rtt_updated,
+ QuicPacketNumber least_unacked_sent_packet) {}
+
+ virtual void OnPacketLoss(QuicPacketNumber lost_packet_number,
+ TransmissionType transmission_type,
+ QuicTime detection_time) {}
+ };
+
+ // Interface which gets callbacks from the QuicSentPacketManager when
+ // network-related state changes. Implementations must not mutate the
+ // state of the packet manager as a result of these callbacks.
+ class NET_EXPORT_PRIVATE NetworkChangeVisitor {
+ public:
+ virtual ~NetworkChangeVisitor() {}
+
+ // Called when congestion window or RTT may have changed.
+ virtual void OnCongestionChange() = 0;
+
+ // Called with the path may be degrading. Note that the path may only be
+ // temporarily degrading.
+ // TODO(jri): With multipath, this method should probably have a path_id
+ // parameter, and should maybe result in the path being marked as inactive.
+ virtual void OnPathDegrading() = 0;
+ };
+
+ virtual ~QuicSentPacketManagerInterface() {}
+
+ virtual void SetFromConfig(const QuicConfig& config) = 0;
+
+ // Resumes connection state on the default path.
+ virtual void ResumeConnectionState(
+ const CachedNetworkParameters& cached_network_params,
+ bool max_bandwidth_resumption) = 0;
+
+ // Sets number of active streams of all paths.
+ virtual void SetNumOpenStreams(size_t num_streams) = 0;
+
+ // Sets max pacing rate of the default path.
+ virtual void SetMaxPacingRate(QuicBandwidth max_pacing_rate) = 0;
+
+ virtual void SetHandshakeConfirmed() = 0;
+
+ virtual void OnIncomingAck(const QuicAckFrame& ack_frame,
+ QuicTime ack_receive_time) = 0;
+
+ virtual bool IsUnacked(QuicPathId path_id,
+ QuicPacketNumber packet_number) const = 0;
+
+ virtual bool HasRetransmittableFrames(
+ QuicPathId path_id,
+ QuicPacketNumber packet_number) const = 0;
+
+ // Requests retransmission of all unacked packets of |retransmission_type| on
+ // the default path.
+ virtual void RetransmitUnackedPackets(
+ TransmissionType retransmission_type) = 0;
+
+ // Retransmits the oldest pending packet on the path (on which retransmission
+ // alarm fires) if there is still a tail loss probe pending. Invoked after
+ // OnRetransmissionTimeout.
+ virtual bool MaybeRetransmitTailLossProbe() = 0;
+
+ // Removes the retransmittable frames from all unencrypted packets on the
+ // default path to ensure they don't get retransmitted.
+ virtual void NeuterUnencryptedPackets() = 0;
+
+ virtual bool HasPendingRetransmissions() const = 0;
+
+ virtual PendingRetransmission NextPendingRetransmission() = 0;
+
+ // Returns true if the default path has unacked packets.
+ virtual bool HasUnackedPackets() const = 0;
+
+ virtual QuicPacketNumber GetLeastUnacked(QuicPathId path_id) const = 0;
+
+ virtual bool OnPacketSent(
+ SerializedPacket* serialized_packet,
+ QuicPathId original_path_id,
+ QuicPacketNumber original_packet_number,
+ QuicTime sent_time,
+ TransmissionType transmission_type,
+ HasRetransmittableData has_retransmittable_data) = 0;
+
+ virtual void OnRetransmissionTimeout() = 0;
+
+ // Returns the earliest time we can send the next packet. Sets |path_id| to be
+ // the path on which the next packet will be sent.
+ virtual QuicTime::Delta TimeUntilSend(QuicTime now,
+ HasRetransmittableData retransmittable,
+ QuicPathId* path_id) = 0;
+
+ // Returns the earliest retransmission time of all paths.
+ // TODO(fayang): This method should not be const becasue the return value
+ // depends upon the time it is invoked.
+ virtual const QuicTime GetRetransmissionTime() const = 0;
+
+ // Returns the rtt stats of the default path.
+ virtual const RttStats* GetRttStats() const = 0;
+
+ // Returns the estimated bandwidth on default path calculated by the
+ // congestion algorithm.
+ virtual QuicBandwidth BandwidthEstimate() const = 0;
+
+ // Returns the sustained bandwidth recorder on the default path.
+ virtual const QuicSustainedBandwidthRecorder& SustainedBandwidthRecorder()
+ const = 0;
+
+ // Returns the size of the current congestion window on default path in number
+ // of kDefaultTCPMSS-sized segments.
+ virtual QuicPacketCount GetCongestionWindowInTcpMss() const = 0;
+
+ // Determines the number of packets of length |max_packet_length| which fit in
+ // the congestion windows for all paths, and returns the max number of packets
+ // across all paths.
+ virtual QuicPacketCount EstimateMaxPacketsInFlight(
+ QuicByteCount max_packet_length) const = 0;
+
+ // Returns the size of the current congestion window size on the default path
+ // in bytes.
+ virtual QuicByteCount GetCongestionWindowInBytes() const = 0;
+
+ // Returns the size of the slow start congestion window in number of 1460 byte
+ // TCP segments on the default path.
+ virtual QuicPacketCount GetSlowStartThresholdInTcpMss() const = 0;
+
+ // No longer retransmit data for |stream_id| on all paths.
+ virtual void CancelRetransmissionsForStream(QuicStreamId stream_id) = 0;
+
+ // Called when peer address changes and the connection migrates on |path_id|.
+ // TODO(fayang): Name of this method is confusing in multipath world because
+ // this migration is path level. Need to rename this as OnPeerMigration.
+ virtual void OnConnectionMigration(QuicPathId path_id,
+ PeerAddressChangeType type) = 0;
+
+ virtual bool IsHandshakeConfirmed() const = 0;
+
+ virtual void SetDebugDelegate(DebugDelegate* debug_delegate) = 0;
+
+ virtual QuicPacketNumber GetLargestObserved(QuicPathId path_id) const = 0;
+
+ virtual QuicPacketNumber GetLargestSentPacket(QuicPathId path_id) const = 0;
+
+ virtual QuicPacketNumber GetLeastPacketAwaitedByPeer(
+ QuicPathId path_id) const = 0;
+
+ virtual void SetNetworkChangeVisitor(NetworkChangeVisitor* visitor) = 0;
+
+ // Returns true if the default path is in slow start.
+ virtual bool InSlowStart() const = 0;
+
+ // These two methods return the consecutive RTO or TLP count of the default
+ // path.
+ virtual size_t GetConsecutiveRtoCount() const = 0;
+ virtual size_t GetConsecutiveTlpCount() const = 0;
+};
+
+} // namespace net
+
+#endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_INTERFACE_H_
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698