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

Unified Diff: webrtc/video/receive_statistics_proxy.h

Issue 2995143002: Report max interframe delay over window insdead of interframe delay sum (Closed)
Patch Set: Created 3 years, 4 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/video/receive_statistics_proxy.h
diff --git a/webrtc/video/receive_statistics_proxy.h b/webrtc/video/receive_statistics_proxy.h
index 8aff1a254c47ec6c79f50696cb13009350822d98..09ffdc0debf6ac26c1ce52fb59c18876700aa702 100644
--- a/webrtc/video/receive_statistics_proxy.h
+++ b/webrtc/video/receive_statistics_proxy.h
@@ -11,8 +11,10 @@
#ifndef WEBRTC_VIDEO_RECEIVE_STATISTICS_PROXY_H_
#define WEBRTC_VIDEO_RECEIVE_STATISTICS_PROXY_H_
+#include <deque>
#include <map>
#include <string>
+#include <utility>
#include "webrtc/common_types.h"
#include "webrtc/common_video/include/frame_callback.h"
@@ -103,6 +105,27 @@ class ReceiveStatisticsProxy : public VCMReceiveStatisticsCallback,
struct QpCounters {
SampleCounter vp8;
};
+ // |time_ms| should never decrease in consecutive calls to Add and MovingMax
+ // as if it's local time. Not thread-safe.
+ class MovingMaxCounter {
+ public:
+ explicit MovingMaxCounter(int window_length_ms) :
+ window_length_ms_(window_length_ms) {}
+ void Add(int sample, int64_t time_ms);
+ // Returns max sample in window given current time.
+ // Can be sped-up in case when MovingMax is called many times in a row
+ // without new elements added (not likely case currently) by removing
+ // obsolete elements from the beginning of the deque instead of skipping
+ // them. In that case deque should be marked as mutable.
+ rtc::Optional<int> MovingMax(int64_t time_ms) const;
+ void Reset();
+ private:
+ int window_length_ms_;
+ // Samples in the window are stored as pairs <time, sample> in this deque in
+ // chronological order. Samples what can't be maximum in any window are
+ // thrown out - deque always contain decreasing sequence of samples.
+ std::deque <std::pair<int64_t, int>> samples_;
+ };
sprang_webrtc 2017/08/18 09:06:49 Interesting class. If no equivalent is available i
ilnik 2017/08/18 11:43:01 Done.
void UpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_);
@@ -152,6 +175,7 @@ class ReceiveStatisticsProxy : public VCMReceiveStatisticsCallback,
int64_t e2e_delay_max_ms_screenshare_ GUARDED_BY(crit_);
int64_t interframe_delay_max_ms_video_ GUARDED_BY(crit_);
int64_t interframe_delay_max_ms_screenshare_ GUARDED_BY(crit_);
+ MovingMaxCounter interframe_delay_max_moving_ GUARDED_BY(crit_);
MaxCounter freq_offset_counter_ GUARDED_BY(crit_);
int64_t first_report_block_time_ms_ GUARDED_BY(crit_);
ReportBlockStats report_block_stats_ GUARDED_BY(crit_);

Powered by Google App Engine
This is Rietveld 408576698