Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(779)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2133073002: Add periodic logging of video stats. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: add logging of stats for receive streams Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/video/receive_statistics_proxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 // duration hasn't been implemented. 335 // duration hasn't been implemented.
336 static const int kNackHistoryMs = 1000; 336 static const int kNackHistoryMs = 1000;
337 337
338 static const int kDefaultQpMax = 56; 338 static const int kDefaultQpMax = 56;
339 339
340 static const int kDefaultRtcpReceiverReportSsrc = 1; 340 static const int kDefaultRtcpReceiverReportSsrc = 1;
341 341
342 // Down grade resolution at most 2 times for CPU reasons. 342 // Down grade resolution at most 2 times for CPU reasons.
343 static const int kMaxCpuDowngrades = 2; 343 static const int kMaxCpuDowngrades = 2;
344 344
345 // Minimum time interval for logging stats.
346 static const int64_t kStatsLogIntervalMs = 8000;
347
345 // Adds |codec| to |list|, and also adds an RTX codec if |codec|'s name is 348 // Adds |codec| to |list|, and also adds an RTX codec if |codec|'s name is
346 // recognized. 349 // recognized.
347 // TODO(deadbeef): Should we add RTX codecs for external codecs whose names we 350 // TODO(deadbeef): Should we add RTX codecs for external codecs whose names we
348 // don't recognize? 351 // don't recognize?
349 void AddCodecAndMaybeRtxCodec(const VideoCodec& codec, 352 void AddCodecAndMaybeRtxCodec(const VideoCodec& codec,
350 std::vector<VideoCodec>* codecs) { 353 std::vector<VideoCodec>* codecs) {
351 codecs->push_back(codec); 354 codecs->push_back(codec);
352 int rtx_payload_type = 0; 355 int rtx_payload_type = 0;
353 if (CodecNamesEq(codec.name, kVp8CodecName)) { 356 if (CodecNamesEq(codec.name, kVp8CodecName)) {
354 rtx_payload_type = kDefaultRtxVp8PlType; 357 rtx_payload_type = kDefaultRtxVp8PlType;
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 const std::vector<VideoCodec>& recv_codecs, 672 const std::vector<VideoCodec>& recv_codecs,
670 WebRtcVideoEncoderFactory* external_encoder_factory, 673 WebRtcVideoEncoderFactory* external_encoder_factory,
671 WebRtcVideoDecoderFactory* external_decoder_factory) 674 WebRtcVideoDecoderFactory* external_decoder_factory)
672 : VideoMediaChannel(config), 675 : VideoMediaChannel(config),
673 call_(call), 676 call_(call),
674 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 677 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
675 video_config_(config.video), 678 video_config_(config.video),
676 external_encoder_factory_(external_encoder_factory), 679 external_encoder_factory_(external_encoder_factory),
677 external_decoder_factory_(external_decoder_factory), 680 external_decoder_factory_(external_decoder_factory),
678 default_send_options_(options), 681 default_send_options_(options),
679 red_disabled_by_remote_side_(false) { 682 red_disabled_by_remote_side_(false),
683 last_stats_log_ms_(-1) {
680 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 684 RTC_DCHECK(thread_checker_.CalledOnValidThread());
681 685
682 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 686 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
683 sending_ = false; 687 sending_ = false;
684 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); 688 RTC_DCHECK(ValidateCodecFormats(recv_codecs));
685 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); 689 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs));
686 } 690 }
687 691
688 WebRtcVideoChannel2::~WebRtcVideoChannel2() { 692 WebRtcVideoChannel2::~WebRtcVideoChannel2() {
689 for (auto& kv : send_streams_) 693 for (auto& kv : send_streams_)
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 return false; 1342 return false;
1339 } 1343 }
1340 1344
1341 it->second->SetSink(sink); 1345 it->second->SetSink(sink);
1342 return true; 1346 return true;
1343 } 1347 }
1344 1348
1345 bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) { 1349 bool WebRtcVideoChannel2::GetStats(VideoMediaInfo* info) {
1346 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::GetStats"); 1350 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::GetStats");
1347 info->Clear(); 1351 info->Clear();
1348 FillSenderStats(info); 1352 FillSenderStats(info);
mflodman 2016/08/04 13:37:09 We could keep track of time just here and add a "b
mflodman 2016/08/04 13:37:09 And related, should we just enable this as is or g
åsapersson 2016/08/04 14:54:18 Done.
1349 FillReceiverStats(info); 1353 FillReceiverStats(info);
1350 webrtc::Call::Stats stats = call_->GetStats(); 1354 webrtc::Call::Stats stats = call_->GetStats();
1351 FillBandwidthEstimationStats(stats, info); 1355 FillBandwidthEstimationStats(stats, info);
1352 if (stats.rtt_ms != -1) { 1356 if (stats.rtt_ms != -1) {
1353 for (size_t i = 0; i < info->senders.size(); ++i) { 1357 for (size_t i = 0; i < info->senders.size(); ++i) {
1354 info->senders[i].rtt_ms = stats.rtt_ms; 1358 info->senders[i].rtt_ms = stats.rtt_ms;
1355 } 1359 }
1356 } 1360 }
1361 // Log stats periodically.
1362 int64_t now_ms = rtc::TimeMillis();
1363 if (last_stats_log_ms_ == -1 ||
1364 now_ms - last_stats_log_ms_ > kStatsLogIntervalMs) {
1365 last_stats_log_ms_ = now_ms;
1366 LOG(LS_INFO) << stats.ToString(now_ms);
1367 }
1357 return true; 1368 return true;
1358 } 1369 }
1359 1370
1360 void WebRtcVideoChannel2::FillSenderStats(VideoMediaInfo* video_media_info) { 1371 void WebRtcVideoChannel2::FillSenderStats(VideoMediaInfo* video_media_info) {
1361 rtc::CritScope stream_lock(&stream_crit_); 1372 rtc::CritScope stream_lock(&stream_crit_);
1362 for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it = 1373 for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it =
1363 send_streams_.begin(); 1374 send_streams_.begin();
1364 it != send_streams_.end(); ++it) { 1375 it != send_streams_.end(); ++it) {
1365 video_media_info->senders.push_back(it->second->GetVideoSenderInfo()); 1376 video_media_info->senders.push_back(it->second->GetVideoSenderInfo());
1366 } 1377 }
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, 1558 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions,
1548 // TODO(deadbeef): Don't duplicate information between send_params, 1559 // TODO(deadbeef): Don't duplicate information between send_params,
1549 // rtp_extensions, options, etc. 1560 // rtp_extensions, options, etc.
1550 const VideoSendParameters& send_params) 1561 const VideoSendParameters& send_params)
1551 : worker_thread_(rtc::Thread::Current()), 1562 : worker_thread_(rtc::Thread::Current()),
1552 ssrcs_(sp.ssrcs), 1563 ssrcs_(sp.ssrcs),
1553 ssrc_groups_(sp.ssrc_groups), 1564 ssrc_groups_(sp.ssrc_groups),
1554 call_(call), 1565 call_(call),
1555 cpu_restricted_counter_(0), 1566 cpu_restricted_counter_(0),
1556 number_of_cpu_adapt_changes_(0), 1567 number_of_cpu_adapt_changes_(0),
1568 last_stats_log_ms_(-1),
1557 source_(nullptr), 1569 source_(nullptr),
1558 external_encoder_factory_(external_encoder_factory), 1570 external_encoder_factory_(external_encoder_factory),
1559 stream_(nullptr), 1571 stream_(nullptr),
1560 parameters_(config, options, max_bitrate_bps, codec_settings), 1572 parameters_(config, options, max_bitrate_bps, codec_settings),
1561 rtp_parameters_(CreateRtpParametersWithOneEncoding()), 1573 rtp_parameters_(CreateRtpParametersWithOneEncoding()),
1562 pending_encoder_reconfiguration_(false), 1574 pending_encoder_reconfiguration_(false),
1563 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), 1575 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
1564 sending_(false), 1576 sending_(false),
1565 last_frame_timestamp_ms_(0) { 1577 last_frame_timestamp_ms_(0) {
1566 parameters_.config.rtp.max_packet_size = kVideoMtu; 1578 parameters_.config.rtp.max_packet_size = kVideoMtu;
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
2116 info.preferred_bitrate += 2128 info.preferred_bitrate +=
2117 parameters_.encoder_config.streams[i].target_bitrate_bps; 2129 parameters_.encoder_config.streams[i].target_bitrate_bps;
2118 } 2130 }
2119 } 2131 }
2120 2132
2121 if (stream_ == NULL) 2133 if (stream_ == NULL)
2122 return info; 2134 return info;
2123 2135
2124 stats = stream_->GetStats(); 2136 stats = stream_->GetStats();
2125 } 2137 }
2138
2139 // Log stats periodically.
2140 int64_t now_ms = rtc::TimeMillis();
2141 if (last_stats_log_ms_ == -1 ||
2142 now_ms - last_stats_log_ms_ > kStatsLogIntervalMs) {
2143 last_stats_log_ms_ = now_ms;
2144 LOG(LS_INFO) << stats.ToString(now_ms);
2145 }
2146
2126 info.adapt_changes = number_of_cpu_adapt_changes_; 2147 info.adapt_changes = number_of_cpu_adapt_changes_;
2127 info.adapt_reason = 2148 info.adapt_reason =
2128 cpu_restricted_counter_ <= 0 ? ADAPTREASON_NONE : ADAPTREASON_CPU; 2149 cpu_restricted_counter_ <= 0 ? ADAPTREASON_NONE : ADAPTREASON_CPU;
2129 2150
2130 // Get bandwidth limitation info from stream_->GetStats(). 2151 // Get bandwidth limitation info from stream_->GetStats().
2131 // Input resolution (output from video_adapter) can be further scaled down or 2152 // Input resolution (output from video_adapter) can be further scaled down or
2132 // higher video layer(s) can be dropped due to bitrate constraints. 2153 // higher video layer(s) can be dropped due to bitrate constraints.
2133 // Note, adapt_changes only include changes from the video_adapter. 2154 // Note, adapt_changes only include changes from the video_adapter.
2134 if (stats.bw_limited_resolution) 2155 if (stats.bw_limited_resolution)
2135 info.adapt_reason |= ADAPTREASON_BANDWIDTH; 2156 info.adapt_reason |= ADAPTREASON_BANDWIDTH;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 bool default_stream, 2251 bool default_stream,
2231 const std::vector<VideoCodecSettings>& recv_codecs, 2252 const std::vector<VideoCodecSettings>& recv_codecs,
2232 bool red_disabled_by_remote_side) 2253 bool red_disabled_by_remote_side)
2233 : call_(call), 2254 : call_(call),
2234 stream_params_(sp), 2255 stream_params_(sp),
2235 stream_(NULL), 2256 stream_(NULL),
2236 default_stream_(default_stream), 2257 default_stream_(default_stream),
2237 config_(std::move(config)), 2258 config_(std::move(config)),
2238 red_disabled_by_remote_side_(red_disabled_by_remote_side), 2259 red_disabled_by_remote_side_(red_disabled_by_remote_side),
2239 external_decoder_factory_(external_decoder_factory), 2260 external_decoder_factory_(external_decoder_factory),
2261 last_stats_log_ms_(-1),
2240 sink_(NULL), 2262 sink_(NULL),
2241 last_width_(-1), 2263 last_width_(-1),
2242 last_height_(-1), 2264 last_height_(-1),
2243 first_frame_timestamp_(-1), 2265 first_frame_timestamp_(-1),
2244 estimated_remote_start_ntp_time_ms_(0) { 2266 estimated_remote_start_ntp_time_ms_(0) {
2245 config_.renderer = this; 2267 config_.renderer = this;
2246 std::vector<AllocatedDecoder> old_decoders; 2268 std::vector<AllocatedDecoder> old_decoders;
2247 ConfigureCodecs(recv_codecs, &old_decoders); 2269 ConfigureCodecs(recv_codecs, &old_decoders);
2248 RecreateWebRtcStream(); 2270 RecreateWebRtcStream();
2249 RTC_DCHECK(old_decoders.empty()); 2271 RTC_DCHECK(old_decoders.empty());
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
2529 info.jitter_buffer_ms = stats.jitter_buffer_ms; 2551 info.jitter_buffer_ms = stats.jitter_buffer_ms;
2530 info.min_playout_delay_ms = stats.min_playout_delay_ms; 2552 info.min_playout_delay_ms = stats.min_playout_delay_ms;
2531 info.render_delay_ms = stats.render_delay_ms; 2553 info.render_delay_ms = stats.render_delay_ms;
2532 2554
2533 info.codec_name = GetCodecNameFromPayloadType(stats.current_payload_type); 2555 info.codec_name = GetCodecNameFromPayloadType(stats.current_payload_type);
2534 2556
2535 info.firs_sent = stats.rtcp_packet_type_counts.fir_packets; 2557 info.firs_sent = stats.rtcp_packet_type_counts.fir_packets;
2536 info.plis_sent = stats.rtcp_packet_type_counts.pli_packets; 2558 info.plis_sent = stats.rtcp_packet_type_counts.pli_packets;
2537 info.nacks_sent = stats.rtcp_packet_type_counts.nack_packets; 2559 info.nacks_sent = stats.rtcp_packet_type_counts.nack_packets;
2538 2560
2561 // Log stats periodically.
2562 int64_t now_ms = rtc::TimeMillis();
2563 if (last_stats_log_ms_ == -1 ||
2564 now_ms - last_stats_log_ms_ > kStatsLogIntervalMs) {
2565 last_stats_log_ms_ = now_ms;
2566 LOG(LS_INFO) << stats.ToString(now_ms);
2567 }
2568
2539 return info; 2569 return info;
2540 } 2570 }
2541 2571
2542 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFecDisabledRemotely( 2572 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetFecDisabledRemotely(
2543 bool disable) { 2573 bool disable) {
2544 red_disabled_by_remote_side_ = disable; 2574 red_disabled_by_remote_side_ = disable;
2545 RecreateWebRtcStream(); 2575 RecreateWebRtcStream();
2546 } 2576 }
2547 2577
2548 WebRtcVideoChannel2::VideoCodecSettings::VideoCodecSettings() 2578 WebRtcVideoChannel2::VideoCodecSettings::VideoCodecSettings()
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2651 rtx_mapping[video_codecs[i].codec.id] != 2681 rtx_mapping[video_codecs[i].codec.id] !=
2652 fec_settings.red_payload_type) { 2682 fec_settings.red_payload_type) {
2653 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2683 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2654 } 2684 }
2655 } 2685 }
2656 2686
2657 return video_codecs; 2687 return video_codecs;
2658 } 2688 }
2659 2689
2660 } // namespace cricket 2690 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/video/receive_statistics_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698