summaryrefslogtreecommitdiff
path: root/video_engine/overuse_frame_detector.h
diff options
context:
space:
mode:
authorasapersson@webrtc.org <asapersson@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-03-20 13:15:01 +0000
committerasapersson@webrtc.org <asapersson@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-03-20 13:15:01 +0000
commit9da327cad743253030f65939c316d009bb48d8e1 (patch)
treeadbaca9f879c4f67c8642397236e2d35066f64ba /video_engine/overuse_frame_detector.h
parenta5db8e3fcab02b6992a017b4b4f462899047e2d1 (diff)
downloadwebrtc-9da327cad743253030f65939c316d009bb48d8e1.tar.gz
Add ability to configure cpu overuse options via an API.
BUG=1577 R=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/9299006 git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@5736 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/overuse_frame_detector.h')
-rw-r--r--video_engine/overuse_frame_detector.h61
1 files changed, 15 insertions, 46 deletions
diff --git a/video_engine/overuse_frame_detector.h b/video_engine/overuse_frame_detector.h
index c87fe364..92a2d14a 100644
--- a/video_engine/overuse_frame_detector.h
+++ b/video_engine/overuse_frame_detector.h
@@ -14,7 +14,7 @@
#include "webrtc/modules/interface/module.h"
#include "webrtc/system_wrappers/interface/constructor_magic.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
-#include "webrtc/test/testsupport/gtest_prod_util.h"
+#include "webrtc/video_engine/include/vie_base.h"
namespace webrtc {
@@ -23,24 +23,6 @@ class CpuOveruseObserver;
class CriticalSectionWrapper;
class VCMExpFilter;
-// Limits on standard deviation for under/overuse.
-#ifdef WEBRTC_ANDROID
-const float kOveruseStdDevMs = 32.0f;
-const float kNormalUseStdDevMs = 27.0f;
-#elif WEBRTC_LINUX
-const float kOveruseStdDevMs = 20.0f;
-const float kNormalUseStdDevMs = 14.0f;
-#elif WEBRTC_MAC
-const float kOveruseStdDevMs = 27.0f;
-const float kNormalUseStdDevMs = 21.0f;
-#elif WEBRTC_WIN
-const float kOveruseStdDevMs = 20.0f;
-const float kNormalUseStdDevMs = 14.0f;
-#else
-const float kOveruseStdDevMs = 30.0f;
-const float kNormalUseStdDevMs = 20.0f;
-#endif
-
// TODO(pbos): Move this somewhere appropriate.
class Statistics {
public:
@@ -48,6 +30,7 @@ class Statistics {
void AddSample(float sample_ms);
void Reset();
+ void SetOptions(const CpuOveruseOptions& options);
float Mean() const;
float StdDev() const;
@@ -59,6 +42,7 @@ class Statistics {
float sum_;
uint64_t count_;
+ CpuOveruseOptions options_;
scoped_ptr<VCMExpFilter> filtered_samples_;
scoped_ptr<VCMExpFilter> filtered_variance_;
};
@@ -66,15 +50,16 @@ class Statistics {
// Use to detect system overuse based on jitter in incoming frames.
class OveruseFrameDetector : public Module {
public:
- explicit OveruseFrameDetector(Clock* clock,
- float normaluse_stddev_ms,
- float overuse_stddev_ms);
+ explicit OveruseFrameDetector(Clock* clock);
~OveruseFrameDetector();
// Registers an observer receiving overuse and underuse callbacks. Set
// 'observer' to NULL to disable callbacks.
void SetObserver(CpuOveruseObserver* observer);
+ // Sets options for overuse detection.
+ void SetOptions(const CpuOveruseOptions& options);
+
// Called for each captured frame.
void FrameCaptured(int width, int height);
@@ -85,8 +70,8 @@ class OveruseFrameDetector : public Module {
void FrameEncoded(int encode_time_ms);
// Accessors.
- // The last estimated jitter based on the incoming captured frames.
- int last_capture_jitter_ms() const;
+ // The estimated jitter based on incoming captured frames.
+ int CaptureJitterMs() const;
// Running average of reported encode time (FrameEncoded()).
// Only used for stats.
@@ -111,19 +96,6 @@ class OveruseFrameDetector : public Module {
virtual int32_t Process() OVERRIDE;
private:
- FRIEND_TEST_ALL_PREFIXES(OveruseFrameDetectorTest, TriggerOveruse);
- FRIEND_TEST_ALL_PREFIXES(OveruseFrameDetectorTest, OveruseAndRecover);
- FRIEND_TEST_ALL_PREFIXES(OveruseFrameDetectorTest, DoubleOveruseAndRecover);
- FRIEND_TEST_ALL_PREFIXES(
- OveruseFrameDetectorTest, TriggerNormalUsageWithMinProcessCount);
- FRIEND_TEST_ALL_PREFIXES(
- OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage);
- FRIEND_TEST_ALL_PREFIXES(OveruseFrameDetectorTest, LastCaptureJitter);
-
- void set_min_process_count_before_reporting(int64_t count) {
- min_process_count_before_reporting_ = count;
- }
-
class EncodeTimeAvg;
class EncodeUsage;
class CaptureQueueDelay;
@@ -131,20 +103,19 @@ class OveruseFrameDetector : public Module {
bool IsOverusing();
bool IsUnderusing(int64_t time_now);
- bool DetectFrameTimeout(int64_t now) const;
+ bool FrameTimeoutDetected(int64_t now) const;
+ bool FrameSizeChanged(int num_pixels) const;
+
+ void ResetAll(int num_pixels);
// Protecting all members.
scoped_ptr<CriticalSectionWrapper> crit_;
- // Limits on standard deviation for under/overuse.
- const float normaluse_stddev_ms_;
- const float overuse_stddev_ms_;
-
- int64_t min_process_count_before_reporting_;
-
// Observer getting overuse reports.
CpuOveruseObserver* observer_;
+ CpuOveruseOptions options_;
+
Clock* clock_;
int64_t next_process_time_;
int64_t num_process_times_;
@@ -162,8 +133,6 @@ class OveruseFrameDetector : public Module {
// Number of pixels of last captured frame.
int num_pixels_;
- int last_capture_jitter_ms_;
-
int64_t last_encode_sample_ms_;
scoped_ptr<EncodeTimeAvg> encode_time_;
scoped_ptr<EncodeUsage> encode_usage_;