OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 } | 94 } |
95 | 95 |
96 constexpr float kLeftMargin = 0.01f; | 96 constexpr float kLeftMargin = 0.01f; |
97 constexpr float kRightMargin = 0.02f; | 97 constexpr float kRightMargin = 0.02f; |
98 constexpr float kBottomMargin = 0.02f; | 98 constexpr float kBottomMargin = 0.02f; |
99 constexpr float kTopMargin = 0.05f; | 99 constexpr float kTopMargin = 0.05f; |
100 | 100 |
101 } // namespace | 101 } // namespace |
102 | 102 |
103 bool EventLogAnalyzer::StreamId::operator<(const StreamId& other) const { | |
104 if (ssrc_ < other.ssrc_) { | |
105 return true; | |
106 } | |
107 if (ssrc_ == other.ssrc_) { | |
108 if (direction_ < other.direction_) { | |
109 return true; | |
110 } | |
111 } | |
112 return false; | |
113 } | |
114 | |
115 bool EventLogAnalyzer::StreamId::operator==(const StreamId& other) const { | |
116 return ssrc_ == other.ssrc_ && direction_ == other.direction_; | |
117 } | |
118 | |
119 | |
120 EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log) | 103 EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log) |
121 : parsed_log_(log), window_duration_(250000), step_(10000) { | 104 : parsed_log_(log), window_duration_(250000), step_(10000) { |
122 uint64_t first_timestamp = std::numeric_limits<uint64_t>::max(); | 105 uint64_t first_timestamp = std::numeric_limits<uint64_t>::max(); |
123 uint64_t last_timestamp = std::numeric_limits<uint64_t>::min(); | 106 uint64_t last_timestamp = std::numeric_limits<uint64_t>::min(); |
124 | 107 |
125 // Maps a stream identifier consisting of ssrc and direction | 108 // Maps a stream identifier consisting of ssrc and direction |
126 // to the header extensions used by that stream, | 109 // to the header extensions used by that stream, |
127 std::map<StreamId, RtpHeaderExtensionMap> extension_maps; | 110 std::map<StreamId, RtpHeaderExtensionMap> extension_maps; |
128 | 111 |
129 PacketDirection direction; | 112 PacketDirection direction; |
(...skipping 14 matching lines...) Expand all Loading... |
144 last_timestamp = std::max(last_timestamp, timestamp); | 127 last_timestamp = std::max(last_timestamp, timestamp); |
145 } | 128 } |
146 | 129 |
147 switch (parsed_log_.GetEventType(i)) { | 130 switch (parsed_log_.GetEventType(i)) { |
148 case ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT: { | 131 case ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT: { |
149 VideoReceiveStream::Config config(nullptr); | 132 VideoReceiveStream::Config config(nullptr); |
150 parsed_log_.GetVideoReceiveConfig(i, &config); | 133 parsed_log_.GetVideoReceiveConfig(i, &config); |
151 StreamId stream(config.rtp.remote_ssrc, kIncomingPacket); | 134 StreamId stream(config.rtp.remote_ssrc, kIncomingPacket); |
152 RegisterHeaderExtensions(config.rtp.extensions, | 135 RegisterHeaderExtensions(config.rtp.extensions, |
153 &extension_maps[stream]); | 136 &extension_maps[stream]); |
| 137 video_ssrcs_.insert(stream); |
154 for (auto kv : config.rtp.rtx) { | 138 for (auto kv : config.rtp.rtx) { |
155 StreamId rtx_stream(kv.second.ssrc, kIncomingPacket); | 139 StreamId rtx_stream(kv.second.ssrc, kIncomingPacket); |
156 RegisterHeaderExtensions(config.rtp.extensions, | 140 RegisterHeaderExtensions(config.rtp.extensions, |
157 &extension_maps[rtx_stream]); | 141 &extension_maps[rtx_stream]); |
| 142 video_ssrcs_.insert(rtx_stream); |
| 143 rtx_ssrcs_.insert(rtx_stream); |
158 } | 144 } |
159 break; | 145 break; |
160 } | 146 } |
161 case ParsedRtcEventLog::VIDEO_SENDER_CONFIG_EVENT: { | 147 case ParsedRtcEventLog::VIDEO_SENDER_CONFIG_EVENT: { |
162 VideoSendStream::Config config(nullptr); | 148 VideoSendStream::Config config(nullptr); |
163 parsed_log_.GetVideoSendConfig(i, &config); | 149 parsed_log_.GetVideoSendConfig(i, &config); |
164 for (auto ssrc : config.rtp.ssrcs) { | 150 for (auto ssrc : config.rtp.ssrcs) { |
165 StreamId stream(ssrc, kOutgoingPacket); | 151 StreamId stream(ssrc, kOutgoingPacket); |
166 RegisterHeaderExtensions(config.rtp.extensions, | 152 RegisterHeaderExtensions(config.rtp.extensions, |
167 &extension_maps[stream]); | 153 &extension_maps[stream]); |
| 154 video_ssrcs_.insert(stream); |
168 } | 155 } |
169 for (auto ssrc : config.rtp.rtx.ssrcs) { | 156 for (auto ssrc : config.rtp.rtx.ssrcs) { |
170 StreamId stream(ssrc, kOutgoingPacket); | 157 StreamId rtx_stream(ssrc, kOutgoingPacket); |
171 RegisterHeaderExtensions(config.rtp.extensions, | 158 RegisterHeaderExtensions(config.rtp.extensions, |
172 &extension_maps[stream]); | 159 &extension_maps[rtx_stream]); |
| 160 video_ssrcs_.insert(rtx_stream); |
| 161 rtx_ssrcs_.insert(rtx_stream); |
173 } | 162 } |
174 break; | 163 break; |
175 } | 164 } |
176 case ParsedRtcEventLog::AUDIO_RECEIVER_CONFIG_EVENT: { | 165 case ParsedRtcEventLog::AUDIO_RECEIVER_CONFIG_EVENT: { |
177 AudioReceiveStream::Config config; | 166 AudioReceiveStream::Config config; |
178 // TODO(terelius): Parse the audio configs once we have them. | 167 // TODO(terelius): Parse the audio configs once we have them. |
179 break; | 168 break; |
180 } | 169 } |
181 case ParsedRtcEventLog::AUDIO_SENDER_CONFIG_EVENT: { | 170 case ParsedRtcEventLog::AUDIO_SENDER_CONFIG_EVENT: { |
182 AudioSendStream::Config config(nullptr); | 171 AudioSendStream::Config config(nullptr); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 bool bitrate_updated = bitrate_updated_; | 285 bool bitrate_updated = bitrate_updated_; |
297 bitrate_updated_ = false; | 286 bitrate_updated_ = false; |
298 return bitrate_updated; | 287 return bitrate_updated; |
299 } | 288 } |
300 | 289 |
301 private: | 290 private: |
302 uint32_t last_bitrate_bps_; | 291 uint32_t last_bitrate_bps_; |
303 bool bitrate_updated_; | 292 bool bitrate_updated_; |
304 }; | 293 }; |
305 | 294 |
| 295 bool EventLogAnalyzer::IsRtxSsrc(StreamId stream_id) { |
| 296 return rtx_ssrcs_.count(stream_id) == 1; |
| 297 } |
| 298 |
| 299 bool EventLogAnalyzer::IsVideoSsrc(StreamId stream_id) { |
| 300 return video_ssrcs_.count(stream_id) == 1; |
| 301 } |
| 302 |
| 303 bool EventLogAnalyzer::IsAudioSsrc(StreamId stream_id) { |
| 304 return audio_ssrcs_.count(stream_id) == 1; |
| 305 } |
| 306 |
306 void EventLogAnalyzer::CreatePacketGraph(PacketDirection desired_direction, | 307 void EventLogAnalyzer::CreatePacketGraph(PacketDirection desired_direction, |
307 Plot* plot) { | 308 Plot* plot) { |
308 std::map<uint32_t, TimeSeries> time_series; | 309 std::map<uint32_t, TimeSeries> time_series; |
309 | 310 |
310 PacketDirection direction; | 311 PacketDirection direction; |
311 MediaType media_type; | 312 MediaType media_type; |
312 uint8_t header[IP_PACKET_SIZE]; | 313 uint8_t header[IP_PACKET_SIZE]; |
313 size_t header_length, total_length; | 314 size_t header_length, total_length; |
314 | 315 |
315 for (size_t i = 0; i < parsed_log_.GetNumberOfEvents(); i++) { | 316 for (size_t i = 0; i < parsed_log_.GetNumberOfEvents(); i++) { |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 // Add the data set to the plot. | 794 // Add the data set to the plot. |
794 plot->series_list_.push_back(std::move(time_series)); | 795 plot->series_list_.push_back(std::move(time_series)); |
795 | 796 |
796 plot->SetXAxis(0, call_duration_s_, "Time (s)", kLeftMargin, kRightMargin); | 797 plot->SetXAxis(0, call_duration_s_, "Time (s)", kLeftMargin, kRightMargin); |
797 plot->SetSuggestedYAxis(0, 10, "Bitrate (kbps)", kBottomMargin, kTopMargin); | 798 plot->SetSuggestedYAxis(0, 10, "Bitrate (kbps)", kBottomMargin, kTopMargin); |
798 plot->SetTitle("Simulated BWE behavior"); | 799 plot->SetTitle("Simulated BWE behavior"); |
799 } | 800 } |
800 | 801 |
801 } // namespace plotting | 802 } // namespace plotting |
802 } // namespace webrtc | 803 } // namespace webrtc |
OLD | NEW |