| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license | |
| 5 * that can be found in the LICENSE file in the root of the source | |
| 6 * tree. An additional intellectual property rights grant can be found | |
| 7 * in the file PATENTS. All contributing project authors may | |
| 8 * be found in the AUTHORS file in the root of the source tree. | |
| 9 */ | |
| 10 | |
| 11 #include <iostream> | |
| 12 | |
| 13 #include "gflags/gflags.h" | |
| 14 #include "webrtc/call/rtc_event_log_parser.h" | |
| 15 #include "webrtc/tools/event_log_visualizer/analyzer.h" | |
| 16 #include "webrtc/tools/event_log_visualizer/plot_base.h" | |
| 17 #include "webrtc/tools/event_log_visualizer/plot_python.h" | |
| 18 | |
| 19 DEFINE_bool(incoming, true, "Plot statistics for incoming packets."); | |
| 20 DEFINE_bool(outgoing, true, "Plot statistics for outgoing packets."); | |
| 21 DEFINE_bool(plot_all, true, "Plot all different data types."); | |
| 22 DEFINE_bool(plot_packets, | |
| 23 false, | |
| 24 "Plot bar graph showing the size of each packet."); | |
| 25 DEFINE_bool(plot_audio_playout, | |
| 26 false, | |
| 27 "Plot bar graph showing the time between each audio playout."); | |
| 28 DEFINE_bool( | |
| 29 plot_sequence_number, | |
| 30 false, | |
| 31 "Plot the difference in sequence number between consecutive packets."); | |
| 32 DEFINE_bool( | |
| 33 plot_delay_change, | |
| 34 false, | |
| 35 "Plot the difference in 1-way path delay between consecutive packets."); | |
| 36 DEFINE_bool(plot_accumulated_delay_change, | |
| 37 false, | |
| 38 "Plot the accumulated 1-way path delay change, or the path delay " | |
| 39 "change compared to the first packet."); | |
| 40 DEFINE_bool(plot_total_bitrate, | |
| 41 false, | |
| 42 "Plot the total bitrate used by all streams."); | |
| 43 DEFINE_bool(plot_stream_bitrate, | |
| 44 false, | |
| 45 "Plot the bitrate used by each stream."); | |
| 46 DEFINE_bool(plot_bwe, | |
| 47 false, | |
| 48 "Run the bandwidth estimator with the logged rtp and rtcp and plot " | |
| 49 "the output."); | |
| 50 DEFINE_bool(plot_network_delay_feedback, | |
| 51 false, | |
| 52 "Compute network delay based on sent packets and the received " | |
| 53 "transport feedback."); | |
| 54 DEFINE_bool(plot_fraction_loss, | |
| 55 false, | |
| 56 "Plot packet loss in percent for outgoing packets (as perceived by " | |
| 57 "the send-side bandwidth estimator)."); | |
| 58 | |
| 59 int main(int argc, char* argv[]) { | |
| 60 std::string program_name = argv[0]; | |
| 61 std::string usage = | |
| 62 "A tool for visualizing WebRTC event logs.\n" | |
| 63 "Example usage:\n" + | |
| 64 program_name + " <logfile> | python\n" + "Run " + program_name + | |
| 65 " --help for a list of command line options\n"; | |
| 66 google::SetUsageMessage(usage); | |
| 67 google::ParseCommandLineFlags(&argc, &argv, true); | |
| 68 | |
| 69 if (argc != 2) { | |
| 70 // Print usage information. | |
| 71 std::cout << google::ProgramUsage(); | |
| 72 return 0; | |
| 73 } | |
| 74 | |
| 75 std::string filename = argv[1]; | |
| 76 | |
| 77 webrtc::ParsedRtcEventLog parsed_log; | |
| 78 | |
| 79 if (!parsed_log.ParseFile(filename)) { | |
| 80 std::cerr << "Could not parse the entire log file." << std::endl; | |
| 81 std::cerr << "Proceeding to analyze the first " | |
| 82 << parsed_log.GetNumberOfEvents() << " events in the file." | |
| 83 << std::endl; | |
| 84 } | |
| 85 | |
| 86 webrtc::plotting::EventLogAnalyzer analyzer(parsed_log); | |
| 87 std::unique_ptr<webrtc::plotting::PlotCollection> collection( | |
| 88 new webrtc::plotting::PythonPlotCollection()); | |
| 89 | |
| 90 if (FLAGS_plot_all || FLAGS_plot_packets) { | |
| 91 if (FLAGS_incoming) { | |
| 92 analyzer.CreatePacketGraph(webrtc::PacketDirection::kIncomingPacket, | |
| 93 collection->AppendNewPlot()); | |
| 94 } | |
| 95 if (FLAGS_outgoing) { | |
| 96 analyzer.CreatePacketGraph(webrtc::PacketDirection::kOutgoingPacket, | |
| 97 collection->AppendNewPlot()); | |
| 98 } | |
| 99 } | |
| 100 | |
| 101 if (FLAGS_plot_all || FLAGS_plot_audio_playout) { | |
| 102 analyzer.CreatePlayoutGraph(collection->AppendNewPlot()); | |
| 103 } | |
| 104 | |
| 105 if (FLAGS_plot_all || FLAGS_plot_sequence_number) { | |
| 106 if (FLAGS_incoming) { | |
| 107 analyzer.CreateSequenceNumberGraph(collection->AppendNewPlot()); | |
| 108 } | |
| 109 } | |
| 110 | |
| 111 if (FLAGS_plot_all || FLAGS_plot_delay_change) { | |
| 112 if (FLAGS_incoming) { | |
| 113 analyzer.CreateDelayChangeGraph(collection->AppendNewPlot()); | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 if (FLAGS_plot_all || FLAGS_plot_accumulated_delay_change) { | |
| 118 if (FLAGS_incoming) { | |
| 119 analyzer.CreateAccumulatedDelayChangeGraph(collection->AppendNewPlot()); | |
| 120 } | |
| 121 } | |
| 122 | |
| 123 if (FLAGS_plot_all || FLAGS_plot_fraction_loss) { | |
| 124 analyzer.CreateFractionLossGraph(collection->AppendNewPlot()); | |
| 125 } | |
| 126 | |
| 127 if (FLAGS_plot_all || FLAGS_plot_total_bitrate) { | |
| 128 if (FLAGS_incoming) { | |
| 129 analyzer.CreateTotalBitrateGraph(webrtc::PacketDirection::kIncomingPacket, | |
| 130 collection->AppendNewPlot()); | |
| 131 } | |
| 132 if (FLAGS_outgoing) { | |
| 133 analyzer.CreateTotalBitrateGraph(webrtc::PacketDirection::kOutgoingPacket, | |
| 134 collection->AppendNewPlot()); | |
| 135 } | |
| 136 } | |
| 137 | |
| 138 if (FLAGS_plot_all || FLAGS_plot_stream_bitrate) { | |
| 139 if (FLAGS_incoming) { | |
| 140 analyzer.CreateStreamBitrateGraph( | |
| 141 webrtc::PacketDirection::kIncomingPacket, | |
| 142 collection->AppendNewPlot()); | |
| 143 } | |
| 144 if (FLAGS_outgoing) { | |
| 145 analyzer.CreateStreamBitrateGraph( | |
| 146 webrtc::PacketDirection::kOutgoingPacket, | |
| 147 collection->AppendNewPlot()); | |
| 148 } | |
| 149 } | |
| 150 | |
| 151 if (FLAGS_plot_all || FLAGS_plot_bwe) { | |
| 152 analyzer.CreateBweGraph(collection->AppendNewPlot()); | |
| 153 } | |
| 154 | |
| 155 if (FLAGS_plot_all || FLAGS_plot_network_delay_feedback) { | |
| 156 analyzer.CreateNetworkDelayFeebackGraph(collection->AppendNewPlot()); | |
| 157 } | |
| 158 | |
| 159 collection->Draw(); | |
| 160 | |
| 161 return 0; | |
| 162 } | |
| OLD | NEW |