diff --git a/api/transport/network_types.cc b/api/transport/network_types.cc index 8cb21d7766..db2a30ba40 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 +namespace webrtc { // TODO(srte): Revert to using default after removing union member. StreamsConfig::StreamsConfig() {} StreamsConfig::StreamsConfig(const StreamsConfig&) = default; @@ -61,6 +62,28 @@ std::vector TransportPacketsFeedback::PacketsWithFeedback() return packet_feedbacks; } +std::vector 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 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 a415c09e50..16c8211727 100644 --- a/api/transport/network_types.h +++ b/api/transport/network_types.h @@ -156,6 +156,7 @@ struct TransportPacketsFeedback { std::vector ReceivedWithSendInfo() const; std::vector LostWithSendInfo() const; std::vector PacketsWithFeedback() const; + std::vector SortedByReceiveTime() const; }; // Network estimation