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

Unified Diff: webrtc/video/receive_statistics_proxy.cc

Issue 2474913002: Logging basic bad call detection (Closed)
Patch Set: Logging on state change Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/video/receive_statistics_proxy.cc
diff --git a/webrtc/video/receive_statistics_proxy.cc b/webrtc/video/receive_statistics_proxy.cc
index d4a0df371d1902114cf703c068a892ad927a184f..96293f3db10ea4d42017c32c6cdedb19ed82f3cd 100644
--- a/webrtc/video/receive_statistics_proxy.cc
+++ b/webrtc/video/receive_statistics_proxy.cc
@@ -13,12 +13,20 @@
#include <cmath>
#include "webrtc/base/checks.h"
+#include "webrtc/base/logging.h"
#include "webrtc/modules/video_coding/include/video_codec_interface.h"
#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/system_wrappers/include/metrics.h"
namespace webrtc {
+const int kNumMeasurements = 10;
+const float kBadFraction = 0.8f;
+const int kFpsThreshold = 13;
+const int kDefaultFps = 15;
+const int kQpThreshold = 60;
+const int kDefaultQp = 20;
+
ReceiveStatisticsProxy::ReceiveStatisticsProxy(
const VideoReceiveStream::Config* config,
Clock* clock)
@@ -26,6 +34,12 @@ ReceiveStatisticsProxy::ReceiveStatisticsProxy(
config_(*config),
start_ms_(clock->TimeInMilliseconds()),
// 1000ms window, scale 1000 for ms to s.
+ last_sample_time_(clock->TimeInMilliseconds()),
+ fps_threshold_(kFpsThreshold,
+ kDefaultFps,
+ kBadFraction,
+ kNumMeasurements),
+ qp_threshold_(kQpThreshold, kDefaultQp, kBadFraction, kNumMeasurements),
decode_fps_estimator_(1000, 1000),
renders_fps_estimator_(1000, 1000),
render_fps_tracker_(100, 10u),
@@ -150,6 +164,82 @@ void ReceiveStatisticsProxy::UpdateHistograms() {
}
}
+void ReceiveStatisticsProxy::BadCallSample() {
+ uint64_t now = clock_->TimeInMilliseconds();
+
+ double fps =
+ render_fps_tracker_.ComputeRateForInterval(now - last_sample_time_);
+ int qp = qp_sample_.Avg(1);
+
+ BadCallThreshold::BadCallState fps_state = fps_threshold_.AddMeasurement(fps);
+ BadCallThreshold::BadCallState qp_state = qp_threshold_.AddMeasurement(qp);
+
+ switch (fps_state) {
+ case BadCallThreshold::NEWLY_HIGH:
+ LOG(LS_WARNING) << "Bad call (fps) end";
+ break;
+ case BadCallThreshold::NEWLY_LOW:
+ LOG(LS_WARNING) << "Bad call (fps) start";
+ break;
+ default:
+ break;
+ }
+
+ switch (qp_state) {
+ case BadCallThreshold::NEWLY_HIGH:
+ LOG(LS_WARNING) << "Bad call (qp) start";
+ break;
+ case BadCallThreshold::NEWLY_LOW:
+ LOG(LS_WARNING) << "Bad call (qp) end";
+ break;
+ default:
+ break;
+ }
+
+ std::string fpsBad;
+ switch (fps_state) {
+ case BadCallThreshold::NEWLY_LOW:
+ fpsBad = "NEWLY_LOW";
+ break;
+ case BadCallThreshold::STILL_LOW:
+ fpsBad = "STILL_LOW";
+ break;
+ case BadCallThreshold::NEWLY_HIGH:
+ fpsBad = "NEWLY_HIGH";
+ break;
+ case BadCallThreshold::STILL_HIGH:
+ fpsBad = "STILL_HIGH";
+ break;
+ default:
+ fpsBad = "WAT";
+ }
+
+ std::string qpBad;
+ switch (qp_state) {
+ case BadCallThreshold::NEWLY_LOW:
+ qpBad = "NEWLY_LOW";
+ break;
+ case BadCallThreshold::STILL_LOW:
+ qpBad = "STILL_LOW";
+ break;
+ case BadCallThreshold::NEWLY_HIGH:
+ qpBad = "NEWLY_HIGH";
+ break;
+ case BadCallThreshold::STILL_HIGH:
+ qpBad = "STILL_HIGH";
+ break;
+ default:
+ qpBad = "WAT";
+ }
+
+ LOG(LS_INFO) << "SAMPLE: sample_length: " << (now - last_sample_time_)
+ << " fps: " << fps << " fpsBad: " << fpsBad << " qp: " << qp
+ << " qpBad: " << qpBad;
+
+ last_sample_time_ = now;
+ qp_sample_.Reset();
+}
+
VideoReceiveStream::Stats ReceiveStatisticsProxy::GetStats() const {
rtc::CritScope lock(&crit_);
return stats_;
@@ -168,6 +258,7 @@ void ReceiveStatisticsProxy::OnDecoderImplementationName(
void ReceiveStatisticsProxy::OnIncomingRate(unsigned int framerate,
unsigned int bitrate_bps) {
rtc::CritScope lock(&crit_);
+ BadCallSample();
stats_.network_frame_rate = framerate;
stats_.total_bitrate_bps = bitrate_bps;
}
@@ -304,6 +395,8 @@ void ReceiveStatisticsProxy::OnPreDecode(
}
if (codec_specific_info->codecType == kVideoCodecVP8) {
qp_counters_.vp8.Add(encoded_image.qp_);
+ rtc::CritScope lock(&crit_);
+ qp_sample_.Add(encoded_image.qp_);
}
}
@@ -318,4 +411,9 @@ int ReceiveStatisticsProxy::SampleCounter::Avg(int min_required_samples) const {
return sum / num_samples;
}
+void ReceiveStatisticsProxy::SampleCounter::Reset() {
+ num_samples = 0;
+ sum = 0;
+}
+
} // namespace webrtc
« webrtc/video/bad_call_threshold.cc ('K') | « webrtc/video/receive_statistics_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698