Index: webrtc/tools/event_log_visualizer/analyzer.cc |
diff --git a/webrtc/tools/event_log_visualizer/analyzer.cc b/webrtc/tools/event_log_visualizer/analyzer.cc |
index e29ef328388739cf56ec68de0cc8a5b4f9d87bb7..d3f02fa7ab6832fd76328afa0f3fa1d3d594d27f 100644 |
--- a/webrtc/tools/event_log_visualizer/analyzer.cc |
+++ b/webrtc/tools/event_log_visualizer/analyzer.cc |
@@ -43,6 +43,18 @@ namespace plotting { |
namespace { |
+class PacketFeedbackComparator { |
elad.alon_webrtc.org
2017/03/06 18:28:02
This is now duplicated with delay_based_bwe.cc. An
|
+ public: |
+ inline bool operator()(const webrtc::PacketFeedback& lhs, |
+ const webrtc::PacketFeedback& rhs) { |
+ if (lhs.arrival_time_ms != rhs.arrival_time_ms) |
+ return lhs.arrival_time_ms < rhs.arrival_time_ms; |
+ if (lhs.send_time_ms != rhs.send_time_ms) |
+ return lhs.send_time_ms < rhs.send_time_ms; |
+ return lhs.sequence_number < rhs.sequence_number; |
+ } |
+}; |
+ |
std::string SsrcToString(uint32_t ssrc) { |
std::stringstream ss; |
ss << "SSRC " << ssrc; |
@@ -557,6 +569,15 @@ void EventLogAnalyzer::FillAudioEncoderTimeSeries( |
} |
} |
+void EventLogAnalyzer::SortPacketFeedbackVector( |
+ std::vector<PacketFeedback>* vec) const { |
+ auto pred = [](const PacketFeedback& packet_feedback) { |
+ return packet_feedback.arrival_time_ms == PacketFeedback::kNotReceived; |
+ }; |
+ vec->erase(std::remove_if(vec->begin(), vec->end(), pred), vec->end()); |
+ std::sort(vec->begin(), vec->end(), PacketFeedbackComparator()); |
+} |
+ |
void EventLogAnalyzer::CreatePacketGraph(PacketDirection desired_direction, |
Plot* plot) { |
for (auto& kv : rtp_packets_) { |
@@ -1057,6 +1078,7 @@ void EventLogAnalyzer::CreateBweSimulationGraph(Plot* plot) { |
rtcp.packet.get())); |
std::vector<PacketFeedback> feedback = |
observer->GetTransportFeedbackVector(); |
+ SortPacketFeedbackVector(&feedback); |
rtc::Optional<uint32_t> bitrate_bps; |
if (!feedback.empty()) { |
for (const PacketFeedback& packet : feedback) |
@@ -1192,6 +1214,7 @@ void EventLogAnalyzer::CreateNetworkDelayFeedbackGraph(Plot* plot) { |
*static_cast<rtcp::TransportFeedback*>(rtcp.packet.get())); |
std::vector<PacketFeedback> feedback = |
feedback_adapter.GetTransportFeedbackVector(); |
+ SortPacketFeedbackVector(&feedback); |
for (const PacketFeedback& packet : feedback) { |
int64_t y = packet.arrival_time_ms - packet.send_time_ms; |
float x = |