diff options
author | stefan@webrtc.org <stefan@webrtc.org> | 2014-11-05 14:05:29 +0000 |
---|---|---|
committer | stefan@webrtc.org <stefan@webrtc.org> | 2014-11-05 14:05:29 +0000 |
commit | 16cad083760474d71bdc3e990fd2f85c0245f000 (patch) | |
tree | d059241f0d58aa5d17cdbf12ca4dbfd43310618a | |
parent | 31e29d7cd5e7c348d2b39546796a510b6433ae2a (diff) | |
download | talk-16cad083760474d71bdc3e990fd2f85c0245f000.tar.gz |
Wire up bandwidth stats to the new API and webrtcvideoengine2.
Adds stats to verify bandwidth and pacer stats.
BUG=1788
R=mflodman@webrtc.org, pbos@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/24969004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@7634 4adac7df-926f-26a2-2b94-8c16560cd09d
-rw-r--r-- | media/webrtc/webrtcvideoengine2.cc | 39 | ||||
-rw-r--r-- | media/webrtc/webrtcvideoengine2.h | 1 | ||||
-rw-r--r-- | media/webrtc/webrtcvideoengine2_unittest.cc | 9 | ||||
-rw-r--r-- | media/webrtc/webrtcvideoengine2_unittest.h | 3 |
4 files changed, 40 insertions, 12 deletions
diff --git a/media/webrtc/webrtcvideoengine2.cc b/media/webrtc/webrtcvideoengine2.cc index d79f71d..5062fb9 100644 --- a/media/webrtc/webrtcvideoengine2.cc +++ b/media/webrtc/webrtcvideoengine2.cc @@ -1202,7 +1202,21 @@ void WebRtcVideoChannel2::FillReceiverStats(VideoMediaInfo* video_media_info) { void WebRtcVideoChannel2::FillBandwidthEstimationStats( VideoMediaInfo* video_media_info) { - // TODO(pbos): Implement. + BandwidthEstimationInfo bwe_info; + webrtc::Call::Stats stats = call_->GetStats(); + bwe_info.available_send_bandwidth = stats.send_bandwidth_bps; + bwe_info.available_recv_bandwidth = stats.recv_bandwidth_bps; + bwe_info.bucket_delay = stats.pacer_delay_ms; + + // Get send stream bitrate stats. + rtc::CritScope stream_lock(&stream_crit_); + for (std::map<uint32, WebRtcVideoSendStream*>::iterator stream = + send_streams_.begin(); + stream != send_streams_.end(); + ++stream) { + stream->second->FillBandwidthEstimationInfo(&bwe_info); + } + video_media_info->bw_estimations.push_back(bwe_info); } bool WebRtcVideoChannel2::SetCapturer(uint32 ssrc, VideoCapturer* capturer) { @@ -1842,12 +1856,12 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { info.framerate_input = stats.input_frame_rate; info.framerate_sent = stats.encode_frame_rate; - for (std::map<uint32_t, webrtc::StreamStats>::iterator it = + for (std::map<uint32_t, webrtc::SsrcStats>::iterator it = stats.substreams.begin(); it != stats.substreams.end(); ++it) { // TODO(pbos): Wire up additional stats, such as padding bytes. - webrtc::StreamStats stream_stats = it->second; + webrtc::SsrcStats stream_stats = it->second; info.bytes_sent += stream_stats.rtp_stats.bytes + stream_stats.rtp_stats.header_bytes + stream_stats.rtp_stats.padding_bytes; @@ -1857,7 +1871,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { if (!stats.substreams.empty()) { // TODO(pbos): Report fraction lost per SSRC. - webrtc::StreamStats first_stream_stats = stats.substreams.begin()->second; + webrtc::SsrcStats first_stream_stats = stats.substreams.begin()->second; info.fraction_lost = static_cast<float>(first_stream_stats.rtcp_stats.fraction_lost) / (1 << 8); @@ -1884,6 +1898,23 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { return info; } +void WebRtcVideoChannel2::WebRtcVideoSendStream::FillBandwidthEstimationInfo( + BandwidthEstimationInfo* bwe_info) { + rtc::CritScope cs(&lock_); + if (stream_ == NULL) { + return; + } + webrtc::VideoSendStream::Stats stats = stream_->GetStats(); + for (std::map<uint32_t, webrtc::SsrcStats>::iterator it = + stats.substreams.begin(); + it != stats.substreams.end(); + ++it) { + bwe_info->transmit_bitrate += it->second.total_bitrate_bps; + bwe_info->retransmit_bitrate += it->second.retransmit_bitrate_bps; + } + bwe_info->actual_enc_bitrate = stats.media_bitrate_bps; +} + void WebRtcVideoChannel2::WebRtcVideoSendStream::OnCpuResolutionRequest( CoordinatedVideoAdapter::AdaptRequest adapt_request) { rtc::CritScope cs(&lock_); diff --git a/media/webrtc/webrtcvideoengine2.h b/media/webrtc/webrtcvideoengine2.h index 0b812ef..299ac35 100644 --- a/media/webrtc/webrtcvideoengine2.h +++ b/media/webrtc/webrtcvideoengine2.h @@ -315,6 +315,7 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler, void Stop(); VideoSenderInfo GetVideoSenderInfo(); + void FillBandwidthEstimationInfo(BandwidthEstimationInfo* bwe_info); void OnCpuResolutionRequest( CoordinatedVideoAdapter::AdaptRequest adapt_request); diff --git a/media/webrtc/webrtcvideoengine2_unittest.cc b/media/webrtc/webrtcvideoengine2_unittest.cc index 0b85723..afea370 100644 --- a/media/webrtc/webrtcvideoengine2_unittest.cc +++ b/media/webrtc/webrtcvideoengine2_unittest.cc @@ -294,12 +294,9 @@ webrtc::PacketReceiver* FakeCall::Receiver() { return NULL; } -uint32_t FakeCall::SendBitrateEstimate() { - return 0; -} - -uint32_t FakeCall::ReceiveBitrateEstimate() { - return 0; +webrtc::Call::Stats FakeCall::GetStats() const { + webrtc::Call::Stats stats; + return stats; } void FakeCall::SignalNetworkState(webrtc::Call::NetworkState state) { diff --git a/media/webrtc/webrtcvideoengine2_unittest.h b/media/webrtc/webrtcvideoengine2_unittest.h index 3b62289..48c4f64 100644 --- a/media/webrtc/webrtcvideoengine2_unittest.h +++ b/media/webrtc/webrtcvideoengine2_unittest.h @@ -127,8 +127,7 @@ class FakeCall : public webrtc::Call { webrtc::VideoReceiveStream* receive_stream) OVERRIDE; virtual webrtc::PacketReceiver* Receiver() OVERRIDE; - virtual uint32_t SendBitrateEstimate() OVERRIDE; - virtual uint32_t ReceiveBitrateEstimate() OVERRIDE; + virtual webrtc::Call::Stats GetStats() const OVERRIDE; virtual void SignalNetworkState(webrtc::Call::NetworkState state) OVERRIDE; |