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

Unified Diff: webrtc/video/overuse_frame_detector.h

Issue 1569853002: Measure encoding time on encode callbacks. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: remove unused variable Created 4 years, 11 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/overuse_frame_detector.h
diff --git a/webrtc/video/overuse_frame_detector.h b/webrtc/video/overuse_frame_detector.h
index d2606c19e6950003e366a87856d308d9f20c6d4e..fe4ebe5bb1f9be1ab02bc95320dd680273a50d27 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_;

Powered by Google App Engine
This is Rietveld 408576698