Adds SortedByReceiveTime to TransportPacketsFeedback.

This is part of a series of CLs removing RTP dependencies from GoogCC
implementation.

Bug: webrtc:10749
Change-Id: I4d8ec92643f1a0d4b5fdac2fbcb067766afc6548
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/142222
Reviewed-by: Jonas Olsson <jonasolsson@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28300}
diff --git a/api/transport/network_types.cc b/api/transport/network_types.cc
index 8cb21d7..db2a30b 100644
--- a/api/transport/network_types.cc
+++ b/api/transport/network_types.cc
@@ -10,8 +10,9 @@
 
 #include "api/transport/network_types.h"
 
-namespace webrtc {
+#include <algorithm>
 
+namespace webrtc {
 // TODO(srte): Revert to using default after removing union member.
 StreamsConfig::StreamsConfig() {}
 StreamsConfig::StreamsConfig(const StreamsConfig&) = default;
@@ -61,6 +62,28 @@
   return packet_feedbacks;
 }
 
+std::vector<PacketResult> TransportPacketsFeedback::SortedByReceiveTime()
+    const {
+  class PacketResultComparator {
+   public:
+    inline bool operator()(const PacketResult& lhs, const PacketResult& rhs) {
+      if (lhs.receive_time != rhs.receive_time)
+        return lhs.receive_time < rhs.receive_time;
+      if (lhs.sent_packet.send_time != rhs.sent_packet.send_time)
+        return lhs.sent_packet.send_time < rhs.sent_packet.send_time;
+      return lhs.sent_packet.sequence_number < rhs.sent_packet.sequence_number;
+    }
+  };
+  std::vector<PacketResult> res;
+  for (const PacketResult& fb : packet_feedbacks) {
+    if (fb.receive_time.IsFinite()) {
+      res.push_back(fb);
+    }
+  }
+  std::sort(res.begin(), res.end(), PacketResultComparator());
+  return res;
+}
+
 NetworkControlUpdate::NetworkControlUpdate() = default;
 NetworkControlUpdate::NetworkControlUpdate(const NetworkControlUpdate&) =
     default;
diff --git a/api/transport/network_types.h b/api/transport/network_types.h
index a415c09..16c8211 100644
--- a/api/transport/network_types.h
+++ b/api/transport/network_types.h
@@ -156,6 +156,7 @@
   std::vector<PacketResult> ReceivedWithSendInfo() const;
   std::vector<PacketResult> LostWithSendInfo() const;
   std::vector<PacketResult> PacketsWithFeedback() const;
+  std::vector<PacketResult> SortedByReceiveTime() const;
 };
 
 // Network estimation