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

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

Issue 2254893009: Add histogram for percentage of incoming frames that are limited in resolution due to cpu (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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') | no next file » | 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 13 matching lines...) Expand all
24 #include "webrtc/media/engine/constants.h" 24 #include "webrtc/media/engine/constants.h"
25 #include "webrtc/media/engine/simulcast.h" 25 #include "webrtc/media/engine/simulcast.h"
26 #include "webrtc/media/engine/webrtcmediaengine.h" 26 #include "webrtc/media/engine/webrtcmediaengine.h"
27 #include "webrtc/media/engine/webrtcvideoencoderfactory.h" 27 #include "webrtc/media/engine/webrtcvideoencoderfactory.h"
28 #include "webrtc/media/engine/webrtcvideoframe.h" 28 #include "webrtc/media/engine/webrtcvideoframe.h"
29 #include "webrtc/media/engine/webrtcvoiceengine.h" 29 #include "webrtc/media/engine/webrtcvoiceengine.h"
30 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" 30 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
31 #include "webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h" 31 #include "webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h"
32 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 32 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
33 #include "webrtc/system_wrappers/include/field_trial.h" 33 #include "webrtc/system_wrappers/include/field_trial.h"
34 #include "webrtc/system_wrappers/include/metrics.h"
34 #include "webrtc/video_decoder.h" 35 #include "webrtc/video_decoder.h"
35 #include "webrtc/video_encoder.h" 36 #include "webrtc/video_encoder.h"
36 37
37 namespace cricket { 38 namespace cricket {
38 namespace { 39 namespace {
39 40
40 // Wrap cricket::WebRtcVideoEncoderFactory as a webrtc::VideoEncoderFactory. 41 // Wrap cricket::WebRtcVideoEncoderFactory as a webrtc::VideoEncoderFactory.
41 class EncoderFactoryAdapter : public webrtc::VideoEncoderFactory { 42 class EncoderFactoryAdapter : public webrtc::VideoEncoderFactory {
42 public: 43 public:
43 // EncoderFactoryAdapter doesn't take ownership of |factory|, which is owned 44 // EncoderFactoryAdapter doesn't take ownership of |factory|, which is owned
(...skipping 1525 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, 1570 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions,
1570 // TODO(deadbeef): Don't duplicate information between send_params, 1571 // TODO(deadbeef): Don't duplicate information between send_params,
1571 // rtp_extensions, options, etc. 1572 // rtp_extensions, options, etc.
1572 const VideoSendParameters& send_params) 1573 const VideoSendParameters& send_params)
1573 : worker_thread_(rtc::Thread::Current()), 1574 : worker_thread_(rtc::Thread::Current()),
1574 ssrcs_(sp.ssrcs), 1575 ssrcs_(sp.ssrcs),
1575 ssrc_groups_(sp.ssrc_groups), 1576 ssrc_groups_(sp.ssrc_groups),
1576 call_(call), 1577 call_(call),
1577 cpu_restricted_counter_(0), 1578 cpu_restricted_counter_(0),
1578 number_of_cpu_adapt_changes_(0), 1579 number_of_cpu_adapt_changes_(0),
1580 frames_(0),
1581 cpu_restricted_frames_(0),
1579 source_(nullptr), 1582 source_(nullptr),
1580 external_encoder_factory_(external_encoder_factory), 1583 external_encoder_factory_(external_encoder_factory),
1581 stream_(nullptr), 1584 stream_(nullptr),
1582 parameters_(config, options, max_bitrate_bps, codec_settings), 1585 parameters_(config, options, max_bitrate_bps, codec_settings),
1583 rtp_parameters_(CreateRtpParametersWithOneEncoding()), 1586 rtp_parameters_(CreateRtpParametersWithOneEncoding()),
1584 pending_encoder_reconfiguration_(false), 1587 pending_encoder_reconfiguration_(false),
1585 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), 1588 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
1586 sending_(false), 1589 sending_(false),
1587 last_frame_timestamp_ms_(0) { 1590 last_frame_timestamp_ms_(0) {
1588 parameters_.config.rtp.max_packet_size = kVideoMtu; 1591 parameters_.config.rtp.max_packet_size = kVideoMtu;
(...skipping 25 matching lines...) Expand all
1614 SetCodec(*codec_settings); 1617 SetCodec(*codec_settings);
1615 } 1618 }
1616 } 1619 }
1617 1620
1618 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() { 1621 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
1619 DisconnectSource(); 1622 DisconnectSource();
1620 if (stream_ != NULL) { 1623 if (stream_ != NULL) {
1621 call_->DestroyVideoSendStream(stream_); 1624 call_->DestroyVideoSendStream(stream_);
1622 } 1625 }
1623 DestroyVideoEncoder(&allocated_encoder_); 1626 DestroyVideoEncoder(&allocated_encoder_);
1627 UpdateHistograms();
1628 }
1629
1630 void WebRtcVideoChannel2::WebRtcVideoSendStream::UpdateHistograms() const {
1631 const int kMinRequiredFrames = 200;
1632 if (frames_ > kMinRequiredFrames) {
1633 RTC_LOGGED_HISTOGRAM_PERCENTAGE(
1634 "WebRTC.Video.CpuLimitedResolutionInPercent",
1635 cpu_restricted_frames_ * 100 / frames_);
perkj_webrtc 2016/08/22 09:06:42 suggest rename frames_ to frame_count_. Suggest to
åsapersson 2016/08/22 09:41:51 Done.
1636 }
1624 } 1637 }
1625 1638
1626 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame( 1639 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame(
1627 const VideoFrame& frame) { 1640 const VideoFrame& frame) {
1628 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::OnFrame"); 1641 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::OnFrame");
1629 webrtc::VideoFrame video_frame(frame.video_frame_buffer(), 0, 0, 1642 webrtc::VideoFrame video_frame(frame.video_frame_buffer(), 0, 0,
1630 frame.rotation()); 1643 frame.rotation());
1631 rtc::CritScope cs(&lock_); 1644 rtc::CritScope cs(&lock_);
1632 1645
1633 if (video_frame.width() != last_frame_info_.width || 1646 if (video_frame.width() != last_frame_info_.width ||
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 pending_encoder_reconfiguration_ = false; 1681 pending_encoder_reconfiguration_ = false;
1669 } 1682 }
1670 1683
1671 // Not sending, abort after reconfiguration. Reconfiguration should still 1684 // Not sending, abort after reconfiguration. Reconfiguration should still
1672 // occur to permit sending this input as quickly as possible once we start 1685 // occur to permit sending this input as quickly as possible once we start
1673 // sending (without having to reconfigure then). 1686 // sending (without having to reconfigure then).
1674 if (!sending_) { 1687 if (!sending_) {
1675 return; 1688 return;
1676 } 1689 }
1677 1690
1691 ++frames_;
perkj_webrtc 2016/08/22 09:06:42 frames_ and cpu_restricted_frames_ will be written
åsapersson 2016/08/22 09:41:51 Added guarded_by (and exclusive_lock_required for
1692 if (cpu_restricted_counter_ > 0)
perkj_webrtc 2016/08/19 13:14:46 Would it be possible to do this in ViEEncoder inst
åsapersson 2016/08/22 07:56:29 Could it be done in a separate/follow up CL when t
perkj_webrtc 2016/08/22 09:06:42 sure.
1693 ++cpu_restricted_frames_;
1694
1678 stream_->Input()->IncomingCapturedFrame(video_frame); 1695 stream_->Input()->IncomingCapturedFrame(video_frame);
1679 } 1696 }
1680 1697
1681 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( 1698 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend(
1682 bool enable, 1699 bool enable,
1683 const VideoOptions* options, 1700 const VideoOptions* options,
1684 rtc::VideoSourceInterface<cricket::VideoFrame>* source) { 1701 rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
1685 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend"); 1702 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend");
1686 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 1703 RTC_DCHECK(thread_checker_.CalledOnValidThread());
1687 1704
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after
2696 rtx_mapping[video_codecs[i].codec.id] != 2713 rtx_mapping[video_codecs[i].codec.id] !=
2697 fec_settings.red_payload_type) { 2714 fec_settings.red_payload_type) {
2698 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2715 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2699 } 2716 }
2700 } 2717 }
2701 2718
2702 return video_codecs; 2719 return video_codecs;
2703 } 2720 }
2704 2721
2705 } // namespace cricket 2722 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698