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

Unified Diff: webrtc/video/send_statistics_proxy.cc

Issue 1228393008: Add resolution and fps stats to histograms. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/send_statistics_proxy.h ('k') | webrtc/video/video_capture_input.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/send_statistics_proxy.cc
diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc
index c6f48e21a853a3b254a6eb0c92a43f39c04af930..fe60f1eaa5f9937441a9fbfc289d868109a0b18c 100644
--- a/webrtc/video/send_statistics_proxy.cc
+++ b/webrtc/video/send_statistics_proxy.cc
@@ -10,6 +10,7 @@
#include "webrtc/video/send_statistics_proxy.h"
+#include <algorithm>
#include <map>
#include "webrtc/base/checks.h"
@@ -24,7 +25,11 @@ const int SendStatisticsProxy::kStatsTimeoutMs = 5000;
SendStatisticsProxy::SendStatisticsProxy(Clock* clock,
const VideoSendStream::Config& config)
- : clock_(clock), config_(config), last_sent_frame_timestamp_(0) {
+ : clock_(clock),
+ config_(config),
+ last_sent_frame_timestamp_(0),
+ max_sent_width_per_timestamp_(0),
+ max_sent_height_per_timestamp_(0) {
}
SendStatisticsProxy::~SendStatisticsProxy() {
@@ -34,13 +39,26 @@ SendStatisticsProxy::~SendStatisticsProxy() {
void SendStatisticsProxy::UpdateHistograms() {
int input_fps =
static_cast<int>(input_frame_rate_tracker_total_.units_second());
- int sent_fps =
- static_cast<int>(sent_frame_rate_tracker_total_.units_second());
-
if (input_fps > 0)
RTC_HISTOGRAM_COUNTS_100("WebRTC.Video.InputFramesPerSecond", input_fps);
+ int sent_fps =
+ static_cast<int>(sent_frame_rate_tracker_total_.units_second());
if (sent_fps > 0)
RTC_HISTOGRAM_COUNTS_100("WebRTC.Video.SentFramesPerSecond", sent_fps);
+
+ const int kMinRequiredSamples = 100;
+ int in_width = input_width_counter_.Avg(kMinRequiredSamples);
+ int in_height = input_height_counter_.Avg(kMinRequiredSamples);
+ if (in_width != -1) {
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.InputWidthInPixels", in_width);
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.InputHeightInPixels", in_height);
+ }
+ int sent_width = sent_width_counter_.Avg(kMinRequiredSamples);
+ int sent_height = sent_height_counter_.Avg(kMinRequiredSamples);
+ if (sent_width != -1) {
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.SentWidthInPixels", sent_width);
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.SentHeightInPixels", sent_height);
+ }
}
void SendStatisticsProxy::OutgoingRate(const int video_channel,
@@ -139,16 +157,33 @@ void SendStatisticsProxy::OnSendEncodedImage(
stats->width = encoded_image._encodedWidth;
stats->height = encoded_image._encodedHeight;
update_times_[ssrc].resolution_update_ms = clock_->TimeInMilliseconds();
- if (encoded_image._timeStamp != last_sent_frame_timestamp_) {
- last_sent_frame_timestamp_ = encoded_image._timeStamp;
+
+ // TODO(asapersson): This is incorrect if simulcast layers are encoded on
+ // different threads and there is no guarantee that one frame of all layers
+ // are encoded before the next start.
+ if (last_sent_frame_timestamp_ > 0 &&
+ encoded_image._timeStamp != last_sent_frame_timestamp_) {
sent_frame_rate_tracker_total_.Update(1);
+ sent_width_counter_.Add(max_sent_width_per_timestamp_);
+ sent_height_counter_.Add(max_sent_height_per_timestamp_);
+ max_sent_width_per_timestamp_ = 0;
+ max_sent_height_per_timestamp_ = 0;
}
+ last_sent_frame_timestamp_ = encoded_image._timeStamp;
+ max_sent_width_per_timestamp_ =
+ std::max(max_sent_width_per_timestamp_,
+ static_cast<int>(encoded_image._encodedWidth));
+ max_sent_height_per_timestamp_ =
+ std::max(max_sent_height_per_timestamp_,
+ static_cast<int>(encoded_image._encodedHeight));
}
-void SendStatisticsProxy::OnIncomingFrame() {
+void SendStatisticsProxy::OnIncomingFrame(int width, int height) {
rtc::CritScope lock(&crit_);
input_frame_rate_tracker_.Update(1);
input_frame_rate_tracker_total_.Update(1);
+ input_width_counter_.Add(width);
+ input_height_counter_.Add(height);
}
void SendStatisticsProxy::RtcpPacketTypesCounterUpdated(
@@ -219,4 +254,15 @@ void SendStatisticsProxy::SendSideDelayUpdated(int avg_delay_ms,
stats->max_delay_ms = max_delay_ms;
}
+void SendStatisticsProxy::SampleCounter::Add(int sample) {
+ sum += sample;
+ ++num_samples;
+}
+
+int SendStatisticsProxy::SampleCounter::Avg(int min_required_samples) const {
+ if (num_samples < min_required_samples || num_samples == 0)
+ return -1;
+ return sum / num_samples;
+}
+
} // namespace webrtc
« no previous file with comments | « webrtc/video/send_statistics_proxy.h ('k') | webrtc/video/video_capture_input.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698