Reduce implementations of CallStatsObserver by 2.

Both of these implementations are added as observers by
VideoReceiveStream, which is also an observer.

Instead, VideoReceiveStream now forward the necessary information
when the stats are updated as is already done for |frame_buffer_|.

Fewer observers registered, simplifies the code a little bit,
reduces synchronization when registering/unregistering observers
and reduces the set of existing implementations.

(I'm changing call_stats.* a little bit, so this is a by-the-way change)

Bug: none
Change-Id: I2d40b80a60e5ca632293c5118ac3b1a35d48ea40
Reviewed-on: https://webrtc-review.googlesource.com/64524
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22594}
This commit is contained in:
Tommi 2018-03-25 22:19:25 +02:00 committed by Commit Bot
parent 6b28e20257
commit 81de14ffd4
5 changed files with 11 additions and 15 deletions

View File

@ -359,8 +359,7 @@ void RtpVideoStreamReceiver::OnCompleteFrame(
complete_frame_callback_->OnCompleteFrame(std::move(frame));
}
void RtpVideoStreamReceiver::OnRttUpdate(int64_t avg_rtt_ms,
int64_t max_rtt_ms) {
void RtpVideoStreamReceiver::UpdateRtt(int64_t max_rtt_ms) {
if (nack_module_)
nack_module_->UpdateRtt(max_rtt_ms);
}

View File

@ -60,8 +60,7 @@ class RtpVideoStreamReceiver : public RtpData,
public VCMFrameTypeCallback,
public VCMPacketRequestCallback,
public video_coding::OnReceivedFrameCallback,
public video_coding::OnCompleteFrameCallback,
public CallStatsObserver {
public video_coding::OnCompleteFrameCallback {
public:
RtpVideoStreamReceiver(
Transport* transport,
@ -132,7 +131,8 @@ class RtpVideoStreamReceiver : public RtpData,
void OnCompleteFrame(
std::unique_ptr<video_coding::EncodedFrame> frame) override;
void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
// Called by VideoReceiveStream when stats are updated.
void UpdateRtt(int64_t max_rtt_ms);
rtc::Optional<int64_t> LastReceivedPacketMs() const;
rtc::Optional<int64_t> LastReceivedKeyframePacketMs() const;

View File

@ -180,7 +180,6 @@ void VideoReceiveStream::Start() {
rtp_video_stream_receiver_.IsUlpfecEnabled();
frame_buffer_->Start();
call_stats_->RegisterStatsObserver(&rtp_video_stream_receiver_);
call_stats_->RegisterStatsObserver(this);
if (rtp_video_stream_receiver_.IsRetransmissionsEnabled() &&
@ -216,8 +215,6 @@ void VideoReceiveStream::Start() {
&rtp_video_stream_receiver_,
rtp_video_stream_receiver_.IsRetransmissionsEnabled(), protected_by_fec,
&stats_proxy_, renderer));
// Register the channel to receive stats updates.
call_stats_->RegisterStatsObserver(video_stream_decoder_.get());
process_thread_->RegisterModule(&video_receiver_, RTC_FROM_HERE);
@ -237,7 +234,6 @@ void VideoReceiveStream::Stop() {
frame_buffer_->Stop();
call_stats_->DeregisterStatsObserver(this);
call_stats_->DeregisterStatsObserver(&rtp_video_stream_receiver_);
process_thread_->DeRegisterModule(&video_receiver_);
if (decode_thread_.IsRunning()) {
@ -257,7 +253,6 @@ void VideoReceiveStream::Stop() {
video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type);
}
call_stats_->DeregisterStatsObserver(video_stream_decoder_.get());
video_stream_decoder_.reset();
incoming_video_stream_.reset();
transport_adapter_.Disable();
@ -362,7 +357,10 @@ void VideoReceiveStream::OnCompleteFrame(
}
void VideoReceiveStream::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&module_process_sequence_checker_);
frame_buffer_->UpdateRtt(max_rtt_ms);
rtp_video_stream_receiver_.UpdateRtt(max_rtt_ms);
video_stream_decoder_->UpdateRtt(max_rtt_ms);
}
int VideoReceiveStream::id() const {

View File

@ -125,7 +125,7 @@ void VideoStreamDecoder::OnCompleteFrame(bool is_keyframe,
size_t size_bytes,
VideoContentType content_type) {}
void VideoStreamDecoder::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) {
void VideoStreamDecoder::UpdateRtt(int64_t max_rtt_ms) {
video_receiver_->SetReceiveChannelParameters(max_rtt_ms);
}
} // namespace webrtc

View File

@ -42,8 +42,7 @@ enum StreamType {
};
class VideoStreamDecoder : public VCMReceiveCallback,
public VCMReceiveStatisticsCallback,
public CallStatsObserver {
public VCMReceiveStatisticsCallback {
public:
friend class ChannelStatsObserver;
@ -85,8 +84,8 @@ class VideoStreamDecoder : public VCMReceiveCallback,
void RegisterReceiveStatisticsProxy(
ReceiveStatisticsProxy* receive_statistics_proxy);
// Implements StatsObserver.
void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
// Called by VideoReceiveStream when stats are updated.
void UpdateRtt(int64_t max_rtt_ms);
private:
// Used for all registered callbacks except rendering.