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@5736 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video_engine/overuse_frame_detector.h b/webrtc/video_engine/overuse_frame_detector.h
index c87fe36..92a2d14 100644
--- a/webrtc/video_engine/overuse_frame_detector.h
+++ b/webrtc/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 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 @@
 
   void AddSample(float sample_ms);
   void Reset();
+  void SetOptions(const CpuOveruseOptions& options);
 
   float Mean() const;
   float StdDev() const;
@@ -59,6 +42,7 @@
 
   float sum_;
   uint64_t count_;
+  CpuOveruseOptions options_;
   scoped_ptr<VCMExpFilter> filtered_samples_;
   scoped_ptr<VCMExpFilter> filtered_variance_;
 };
@@ -66,15 +50,16 @@
 // 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 @@
   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 @@
   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 @@
   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 @@
   // 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_;