Index: webrtc/modules/video_coding/frame_buffer2.cc |
diff --git a/webrtc/modules/video_coding/frame_buffer2.cc b/webrtc/modules/video_coding/frame_buffer2.cc |
index dcbcb1f9bdfd56b1f8cc3c3caa1904d4dfe1dc82..027b94304d79b3982a3f8f5b61cb462bda1bb439 100644 |
--- a/webrtc/modules/video_coding/frame_buffer2.cc |
+++ b/webrtc/modules/video_coding/frame_buffer2.cc |
@@ -16,7 +16,6 @@ |
#include "webrtc/base/checks.h" |
#include "webrtc/base/logging.h" |
-#include "webrtc/modules/video_coding/include/video_coding_defines.h" |
#include "webrtc/modules/video_coding/jitter_estimator.h" |
#include "webrtc/modules/video_coding/timing.h" |
#include "webrtc/system_wrappers/include/clock.h" |
@@ -35,8 +34,7 @@ constexpr int kMaxFramesHistory = 50; |
FrameBuffer::FrameBuffer(Clock* clock, |
VCMJitterEstimator* jitter_estimator, |
- VCMTiming* timing, |
- VCMReceiveStatisticsCallback* stats_callback) |
+ VCMTiming* timing) |
: clock_(clock), |
new_countinuous_frame_event_(false, false), |
jitter_estimator_(jitter_estimator), |
@@ -47,10 +45,11 @@ FrameBuffer::FrameBuffer(Clock* clock, |
num_frames_history_(0), |
num_frames_buffered_(0), |
stopped_(false), |
- protection_mode_(kProtectionNack), |
- stats_callback_(stats_callback) {} |
+ protection_mode_(kProtectionNack) {} |
-FrameBuffer::~FrameBuffer() {} |
+FrameBuffer::~FrameBuffer() { |
+ UpdateHistograms(); |
+} |
FrameBuffer::ReturnReason FrameBuffer::NextFrame( |
int64_t max_wait_time_ms, |
@@ -173,8 +172,9 @@ int FrameBuffer::InsertFrame(std::unique_ptr<FrameObject> frame) { |
rtc::CritScope lock(&crit_); |
RTC_DCHECK(frame); |
- if (stats_callback_) |
- stats_callback_->OnCompleteFrame(frame->num_references == 0, frame->size()); |
+ ++num_total_frames_; |
+ if (frame->num_references == 0) |
+ ++num_key_frames_; |
FrameKey key(frame->picture_id, frame->spatial_layer); |
int last_continuous_picture_id = |
@@ -388,22 +388,28 @@ bool FrameBuffer::UpdateFrameInfoWithIncomingFrame(const FrameObject& frame, |
} |
void FrameBuffer::UpdateJitterDelay() { |
- if (!stats_callback_) |
- return; |
- |
- int decode_ms; |
- int max_decode_ms; |
- int current_delay_ms; |
- int target_delay_ms; |
- int jitter_buffer_ms; |
- int min_playout_delay_ms; |
- int render_delay_ms; |
- if (timing_->GetTimings(&decode_ms, &max_decode_ms, ¤t_delay_ms, |
- &target_delay_ms, &jitter_buffer_ms, |
- &min_playout_delay_ms, &render_delay_ms)) { |
- stats_callback_->OnFrameBufferTimingsUpdated( |
- decode_ms, max_decode_ms, current_delay_ms, target_delay_ms, |
- jitter_buffer_ms, min_playout_delay_ms, render_delay_ms); |
+ int unused; |
+ int delay; |
+ timing_->GetTimings(&unused, &unused, &unused, &unused, &delay, &unused, |
+ &unused); |
+ |
+ accumulated_delay_ += delay; |
+ ++accumulated_delay_samples_; |
+} |
+ |
+void FrameBuffer::UpdateHistograms() const { |
+ rtc::CritScope lock(&crit_); |
+ if (num_total_frames_ > 0) { |
+ int key_frames_permille = (static_cast<float>(num_key_frames_) * 1000.0f / |
+ static_cast<float>(num_total_frames_) + |
+ 0.5f); |
+ RTC_HISTOGRAM_COUNTS_1000("WebRTC.Video.KeyFramesReceivedInPermille", |
+ key_frames_permille); |
+ } |
+ |
+ if (accumulated_delay_samples_ > 0) { |
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.JitterBufferDelayInMs", |
+ accumulated_delay_ / accumulated_delay_samples_); |
} |
} |