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

Unified Diff: webrtc/modules/video_coding/main/source/video_sender.cc

Issue 1169543005: Add sent framerates to histogram stats: (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 6 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
Index: webrtc/modules/video_coding/main/source/video_sender.cc
diff --git a/webrtc/modules/video_coding/main/source/video_sender.cc b/webrtc/modules/video_coding/main/source/video_sender.cc
index 9b855da16a4cfc6402795770a7205455cc4a69e6..5fc5041cf149ea20a328356e57f97290aebb6d28 100644
--- a/webrtc/modules/video_coding/main/source/video_sender.cc
+++ b/webrtc/modules/video_coding/main/source/video_sender.cc
@@ -20,6 +20,7 @@
#include "webrtc/modules/video_coding/utility/include/quality_scaler.h"
#include "webrtc/system_wrappers/interface/clock.h"
#include "webrtc/system_wrappers/interface/logging.h"
+#include "webrtc/system_wrappers/interface/metrics.h"
namespace webrtc {
namespace vcm {
@@ -51,9 +52,28 @@ VideoSender::VideoSender(Clock* clock,
}
VideoSender::~VideoSender() {
+ UpdateHistograms();
delete _sendCritSect;
}
+void VideoSender::UpdateHistograms() {
+ int avg_encode_time_ms;
+ int max_encode_time_ms;
+ {
+ CriticalSectionScoped cs(_sendCritSect);
+ avg_encode_time_ms = stats_.AvgEncodeTimeMs();
+ max_encode_time_ms = stats_.MaxEncodeTimeMs();
+ }
+ if (avg_encode_time_ms != -1) {
+ RTC_HISTOGRAM_COUNTS_1000("WebRTC.Video.AvgEncodeTimeInMs",
+ avg_encode_time_ms);
+ }
+ if (max_encode_time_ms != -1) {
+ RTC_HISTOGRAM_COUNTS_1000("WebRTC.Video.MaxEncodeTimeInMs",
+ max_encode_time_ms);
+ }
+}
+
int32_t VideoSender::Process() {
int32_t returnValue = VCM_OK;
@@ -329,12 +349,15 @@ int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
CHECK(!converted_frame.IsZeroSize())
<< "Frame conversion failed, won't be able to encode frame.";
}
+ int64_t encode_start_time_ms = clock_->TimeInMilliseconds();
int32_t ret =
_encoder->Encode(converted_frame, codecSpecificInfo, _nextFrameTypes);
if (ret < 0) {
LOG(LS_ERROR) << "Failed to encode frame. Error code: " << ret;
return ret;
}
+ stats_.Update(clock_->TimeInMilliseconds() - encode_start_time_ms);
+
for (size_t i = 0; i < _nextFrameTypes.size(); ++i) {
_nextFrameTypes[i] = kVideoFrameDelta; // Default frame type.
}
@@ -383,5 +406,11 @@ bool VideoSender::VideoSuspended() const {
CriticalSectionScoped cs(_sendCritSect);
return _mediaOpt.IsVideoSuspended();
}
+
+void VideoSender::EncodedFrameStats::Update(int64_t encode_time_ms) {
+ sum_encode_time_ms += encode_time_ms;
+ max_encode_time_ms = std::max(max_encode_time_ms, encode_time_ms);
+ ++encoded_frames;
+}
} // namespace vcm
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698