Index: webrtc/video/overuse_frame_detector.h |
diff --git a/webrtc/video/overuse_frame_detector.h b/webrtc/video/overuse_frame_detector.h |
index 0ef2e43857d2601c800c48a09d0dc6e237692e53..f3a458ee82263dafc3124a113cc5bdc22d6f9f65 100644 |
--- a/webrtc/video/overuse_frame_detector.h |
+++ b/webrtc/video/overuse_frame_detector.h |
@@ -11,6 +11,8 @@ |
#ifndef WEBRTC_VIDEO_OVERUSE_FRAME_DETECTOR_H_ |
#define WEBRTC_VIDEO_OVERUSE_FRAME_DETECTOR_H_ |
+#include <list> |
+ |
#include "webrtc/base/constructormagic.h" |
#include "webrtc/base/criticalsection.h" |
#include "webrtc/base/scoped_ptr.h" |
@@ -22,6 +24,8 @@ |
namespace webrtc { |
class Clock; |
+class EncodedFrameObserver; |
+class VideoFrame; |
// CpuOveruseObserver is called when a system overuse is detected and |
// VideoEngine cannot keep up the encoding frequency. |
@@ -68,10 +72,10 @@ struct CpuOveruseMetrics { |
class CpuOveruseMetricsObserver { |
public: |
virtual ~CpuOveruseMetricsObserver() {} |
- virtual void CpuOveruseMetricsUpdated(const CpuOveruseMetrics& metrics) = 0; |
+ virtual void OnEncodedFrameTimeMeasured(int encode_duration_ms, |
+ const CpuOveruseMetrics& metrics) = 0; |
}; |
- |
// Use to detect system overuse based on the send-side processing time of |
// incoming frames. |
class OveruseFrameDetector : public Module { |
@@ -79,18 +83,15 @@ class OveruseFrameDetector : public Module { |
OveruseFrameDetector(Clock* clock, |
const CpuOveruseOptions& options, |
CpuOveruseObserver* overuse_observer, |
+ EncodedFrameObserver* encoder_timing_, |
CpuOveruseMetricsObserver* metrics_observer); |
~OveruseFrameDetector(); |
// Called for each captured frame. |
- void FrameCaptured(int width, int height, int64_t capture_time_ms); |
+ void FrameCaptured(const VideoFrame& frame); |
// Called for each sent frame. |
- void FrameSent(int64_t capture_time_ms); |
- |
- // Only public for testing. |
- int LastProcessingTimeMs() const; |
- int FramesInQueue() const; |
+ void FrameSent(uint32_t timestamp); |
// Implements Module. |
int64_t TimeUntilNextProcess() override; |
@@ -98,9 +99,20 @@ class OveruseFrameDetector : public Module { |
private: |
class SendProcessingUsage; |
- class FrameQueue; |
- |
- void UpdateCpuOveruseMetrics() EXCLUSIVE_LOCKS_REQUIRED(crit_); |
+ struct FrameTiming { |
+ FrameTiming(int64_t capture_ntp_ms, uint32_t timestamp, int64_t now) |
+ : capture_ntp_ms(capture_ntp_ms), |
+ timestamp(timestamp), |
+ capture_ms(now), |
+ last_send_ms(-1) {} |
+ int64_t capture_ntp_ms; |
+ uint32_t timestamp; |
+ int64_t capture_ms; |
+ int64_t last_send_ms; |
+ }; |
+ |
+ void EncodedFrameTimeMeasured(int encode_duration_ms) |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_); |
// TODO(asapersson): This method is only used on one thread, so it shouldn't |
// need a guard. |
@@ -125,6 +137,7 @@ class OveruseFrameDetector : public Module { |
// Observer getting overuse reports. |
CpuOveruseObserver* const observer_; |
+ EncodedFrameObserver* const encoder_timing_; |
// Stats metrics. |
CpuOveruseMetricsObserver* const metrics_observer_; |
@@ -152,7 +165,7 @@ class OveruseFrameDetector : public Module { |
// TODO(asapersson): Can these be regular members (avoid separate heap |
// allocs)? |
const rtc::scoped_ptr<SendProcessingUsage> usage_ GUARDED_BY(crit_); |
- const rtc::scoped_ptr<FrameQueue> frame_queue_ GUARDED_BY(crit_); |
+ std::list<FrameTiming> frame_timing_ GUARDED_BY(crit_); |
rtc::ThreadChecker processing_thread_; |