From 23026ee6c357ad77339a54e81299edc985ade586 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Mon, 17 Jun 2019 10:13:59 +0200 Subject: [PATCH] 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 Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#28300} --- api/transport/network_types.cc | 25 ++++++++++++++++++++++++- api/transport/network_types.h | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) 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