Land Recent QUIC Changes.

Made available server_address to QuicDispatcher::CreateQuicSession from
QuicDispatcher::ProcessPacket.

Merge internal change: 57703936
https://codereview.chromium.org/109803003


No functional change. More QuicSentPacketManager and related QUIC
cleanup.

Merge internal change: 57665121
https://codereview.chromium.org/100893003


Move QUIC kMaxPacketSize from 1472 -> 1452 to reflect IPv6 overhead.

Merge internal change: 57626965
https://codereview.chromium.org/109843002


QUIC refactor to simplify retransmission logic.

Merge internal change: 57617695
https://codereview.chromium.org/100863005


Remove unused SetCongestionWindow methods

Merge internal change: 57601594
https://codereview.chromium.org/109833002


QUIC refactor to move more of the AckFrame handling into
QuicSentPacketManager.

Merge internal change: 57561176
https://codereview.chromium.org/100733003


No new functionality. QUIC Refactor to move the functionality of
OnAbandonFecTimeout() OnRetransmissionTimeout() into the
QuicSentPacketManager.

Merge internal change: 57550388
https://codereview.chromium.org/106973007

[email protected]

Review URL: https://codereview.chromium.org/100863006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@239668 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/quic/quic_sent_packet_manager.h b/net/quic/quic_sent_packet_manager.h
index 0458c5d..e4c16be 100644
--- a/net/quic/quic_sent_packet_manager.h
+++ b/net/quic/quic_sent_packet_manager.h
@@ -88,8 +88,10 @@
   void OnRetransmittedPacket(QuicPacketSequenceNumber old_sequence_number,
                              QuicPacketSequenceNumber new_sequence_number);
 
-  // Processes the ReceivedPacketInfo data from the incoming ack.
-  void OnPacketAcked(const ReceivedPacketInfo& received_info);
+  // Processes the incoming ack and returns true if the retransmission or ack
+  // alarm should be reset.
+  bool OnIncomingAck(const ReceivedPacketInfo& received_info,
+                     QuicTime ack_receive_time);
 
   // Discards any information for the packet corresponding to |sequence_number|.
   // If this packet has been retransmitted, information on those packets
@@ -99,14 +101,11 @@
   // Discards all information about fec packet |sequence_number|.
   void DiscardFecPacket(QuicPacketSequenceNumber sequence_number);
 
-  // Returns true if |sequence_number| is a retransmission of a packet.
-  bool IsRetransmission(QuicPacketSequenceNumber sequence_number) const;
-
   // Returns true if the non-FEC packet |sequence_number| is unacked.
   bool IsUnacked(QuicPacketSequenceNumber sequence_number) const;
 
-  // Returns true if the FEC packet |sequence_number| is unacked.
-  bool IsFecUnacked(QuicPacketSequenceNumber sequence_number) const;
+  // Requests retransmission of all unacked packets of |retransmission_type|.
+  void RetransmitUnackedPackets(RetransmissionType retransmission_type);
 
   // Returns true if the unacked packet |sequence_number| has retransmittable
   // frames.  This will only return false if the packet has been acked, if a
@@ -114,16 +113,6 @@
   // retransmitted as with different sequence number.
   bool HasRetransmittableFrames(QuicPacketSequenceNumber sequence_number) const;
 
-  // Returns the RetransmittableFrames for |sequence_number|.
-  const RetransmittableFrames& GetRetransmittableFrames(
-      QuicPacketSequenceNumber sequence_number) const;
-
-  // Request that |sequence_number| be retransmitted after the other pending
-  // retransmissions.  Returns false if there are no retransmittable frames for
-  // |sequence_number| and true if it will be retransmitted.
-  bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number,
-                             TransmissionType transmission_type);
-
   // Returns true if there are pending retransmissions.
   bool HasPendingRetransmissions() const;
 
@@ -164,13 +153,14 @@
   // Called when we have received an ack frame from peer.
   // Returns a set containing all the sequence numbers to be nack retransmitted
   // as a result of the ack.
-  virtual SequenceNumberSet OnIncomingAckFrame(const QuicAckFrame& frame,
-                                               QuicTime ack_receive_time);
+  virtual SequenceNumberSet OnIncomingAckFrame(
+      const ReceivedPacketInfo& received_info,
+      const QuicTime& ack_receive_time);
 
   // Called when a congestion feedback frame is received from peer.
   virtual void OnIncomingQuicCongestionFeedbackFrame(
       const QuicCongestionFeedbackFrame& frame,
-      QuicTime feedback_receive_time);
+      const QuicTime& feedback_receive_time);
 
   // Called when we have sent bytes to the peer.  This informs the manager both
   // the number of bytes sent and if they were retransmitted.
@@ -183,9 +173,9 @@
   // Called when the retransmission timer expires.
   virtual void OnRetransmissionTimeout();
 
-  // Called when the least unacked sequence number increases, indicating the
-  // consecutive rto count should be reset to 0.
-  virtual void OnLeastUnackedIncreased();
+  // Called when the fec timout timer expires.  Returns the next timeout of the
+  // FEC timer if it should be reset, and QuicTime::Zero() otherwise.
+  virtual QuicTime OnAbandonFecTimeout();
 
   // Called when a packet is timed out, such as an RTO.  Removes the bytes from
   // the congestion manager, but does not change the congestion window size.
@@ -220,9 +210,6 @@
   // window and will return 0.
   QuicByteCount GetCongestionWindow() const;
 
-  // Sets the value of the current congestion window to |window|.
-  void SetCongestionWindow(QuicByteCount window);
-
   // Enables pacing if it has not already been enabled, and if
   // FLAGS_enable_quic_pacing is set.
   void MaybeEnablePacing();
@@ -261,6 +248,10 @@
   // Process the incoming ack looking for newly ack'd FEC packets.
   void HandleAckForSentFecPackets(const ReceivedPacketInfo& received_info);
 
+  // Update the RTT if the ack is for the largest acked sequence number.
+  void MaybeUpdateRTT(const ReceivedPacketInfo& received_info,
+                      const QuicTime& ack_receive_time);
+
   // Marks |sequence_number| as having been seen by the peer.  Returns an
   // iterator to the next remaining unacked packet.
   UnackedPacketMap::iterator MarkPacketReceivedByPeer(
@@ -270,6 +261,12 @@
   // and the retransmission map.
   void DiscardPacket(QuicPacketSequenceNumber sequence_number);
 
+  // Request that |sequence_number| be retransmitted after the other pending
+  // retransmissions.  Returns false if there are no retransmittable frames for
+  // |sequence_number| and true if it will be retransmitted.
+  bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number,
+                             TransmissionType transmission_type);
+
   // Returns the length of the serialized sequence number for
   // the packet |sequence_number|.
   QuicSequenceNumberLength GetSequenceNumberLength(
@@ -280,6 +277,10 @@
   QuicPacketSequenceNumber GetMostRecentTransmission(
       QuicPacketSequenceNumber sequence_number) const;
 
+  // Clears up to |num_to_clear| previous transmissions in order to make room
+  // in the ack frame for new acks.
+  void ClearPreviousRetransmissions(size_t num_to_clear);
+
   void CleanupPacketHistory();
 
   // When new packets are created which may be retransmitted, they are added