Remove unused code in overuse detector.

R=mflodman@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/31579004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7557 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video_engine/include/vie_base.h b/webrtc/video_engine/include/vie_base.h
index a49aba7..ae80cd7 100644
--- a/webrtc/video_engine/include/vie_base.h
+++ b/webrtc/video_engine/include/vie_base.h
@@ -63,6 +63,7 @@
   bool enable_encode_usage_method;
   int low_encode_usage_threshold_percent;  // Threshold for triggering underuse.
   int high_encode_usage_threshold_percent; // Threshold for triggering overuse.
+  // TODO(asapersson): Remove options, not used.
   int low_encode_time_rsd_threshold;   // Additional threshold for triggering
                                        // underuse (used in addition to
                                        // threshold above if configured).
@@ -117,6 +118,7 @@
   int avg_encode_time_ms;   // The average encode time in ms.
   int encode_usage_percent; // The average encode time divided by the average
                             // time difference between incoming captured frames.
+  // TODO(asapersson): Remove metric, not used.
   int encode_rsd;           // The relative std dev of encode time of frames.
   int capture_queue_delay_ms_per_s;  // The current time delay between an
                                      // incoming captured frame until the frame
diff --git a/webrtc/video_engine/overuse_frame_detector.cc b/webrtc/video_engine/overuse_frame_detector.cc
index 9603613..32b0d25 100644
--- a/webrtc/video_engine/overuse_frame_detector.cc
+++ b/webrtc/video_engine/overuse_frame_detector.cc
@@ -212,112 +212,6 @@
   scoped_ptr<rtc::ExpFilter> filtered_frame_diff_ms_;
 };
 
-// Class for calculating the relative standard deviation of the processing time
-// of frame on the send-side.
-// Currently only used for testing.
-class OveruseFrameDetector::SendProcessingRsd {
- public:
-  SendProcessingRsd(Clock* clock)
-      : kWeightFactor(0.6f),
-        count_(0),
-        filtered_rsd_(new rtc::ExpFilter(kWeightFactor)),
-        hist_samples_(0),
-        hist_sum_(0.0f),
-        last_process_time_ms_(clock->TimeInMilliseconds()) {
-    Reset();
-  }
-  ~SendProcessingRsd() {}
-
-  void SetOptions(const CpuOveruseOptions& options) {
-    options_ = options;
-  }
-
-  void Reset() {
-    count_ = 0;
-    filtered_rsd_->Reset(kWeightFactor);
-    filtered_rsd_->Apply(1.0f, InitialValue());
-    hist_.clear();
-    hist_samples_ = 0;
-    hist_sum_ = 0.0f;
-  }
-
-  void AddSample(float processing_ms) {
-    int bin = static_cast<int>(processing_ms + 0.5f);
-    if (bin <= 0) {
-      return;
-    }
-    ++count_;
-    ++hist_[bin];
-    ++hist_samples_;
-    hist_sum_ += bin;
-  }
-
-  void Process(int64_t now) {
-    if (count_ < static_cast<uint32_t>(options_.min_frame_samples)) {
-      // Have not received min number of frames since last reset.
-      return;
-    }
-    const int kMinHistSamples = 20;
-    if (hist_samples_ < kMinHistSamples) {
-      return;
-    }
-    const int64_t kMinDiffSinceLastProcessMs = 1000;
-    int64_t diff_last_process_ms = now - last_process_time_ms_;
-    if (now - last_process_time_ms_ <= kMinDiffSinceLastProcessMs) {
-      return;
-    }
-    last_process_time_ms_ = now;
-
-    // Calculate variance (using samples above the mean).
-    // Checks for a larger processing time of some frames while there is a small
-    // increase in the average time.
-    int mean = hist_sum_ / hist_samples_;
-    float variance = 0.0f;
-    int total_count = 0;
-    for (std::map<int,int>::iterator it = hist_.begin();
-         it != hist_.end(); ++it) {
-      int time = it->first;
-      int count = it->second;
-      if (time > mean) {
-        total_count += count;
-        for (int i = 0; i < count; ++i) {
-          variance += ((time - mean) * (time - mean));
-        }
-      }
-    }
-    variance /= std::max(total_count, 1);
-    float cov = sqrt(variance) / mean;
-
-    hist_.clear();
-    hist_samples_ = 0;
-    hist_sum_ = 0.0f;
-
-    float exp = static_cast<float>(diff_last_process_ms) / kProcessIntervalMs;
-    exp = std::min(exp, kMaxExp);
-    filtered_rsd_->Apply(exp, 100.0f * cov);
-  }
-
-  int Value() const {
-    return static_cast<int>(filtered_rsd_->filtered() + 0.5);
-  }
-
- private:
-  float InitialValue() const {
-    // Start in between the underuse and overuse threshold.
-    return std::max(((options_.low_encode_time_rsd_threshold +
-                      options_.high_encode_time_rsd_threshold) / 2.0f), 0.0f);
-  }
-
-  const float kWeightFactor;
-  uint32_t count_;  // Number of samples since last reset.
-  CpuOveruseOptions options_;
-  scoped_ptr<rtc::ExpFilter> filtered_rsd_;
-  int hist_samples_;
-  float hist_sum_;
-  std::map<int, int> hist_;  // Histogram of time spent on processing frames.
-  int64_t last_process_time_ms_;
-};
-
 // Class for calculating the processing time of frames.
 class OveruseFrameDetector::FrameQueue {
  public:
@@ -439,7 +333,6 @@
       num_pixels_(0),
       last_encode_sample_ms_(0),
       encode_time_(new EncodeTimeAvg()),
-      rsd_(new SendProcessingRsd(clock)),
       usage_(new SendProcessingUsage()),
       frame_queue_(new FrameQueue()),
       last_sample_time_ms_(0),
@@ -463,7 +356,6 @@
   options_ = options;
   capture_deltas_.SetOptions(options);
   usage_->SetOptions(options);
-  rsd_->SetOptions(options);
   ResetAll(num_pixels_);
 }
 
@@ -487,7 +379,7 @@
   CriticalSectionScoped cs(crit_.get());
   metrics->capture_jitter_ms = static_cast<int>(capture_deltas_.StdDev() + 0.5);
   metrics->avg_encode_time_ms = encode_time_->Value();
-  metrics->encode_rsd = rsd_->Value();
+  metrics->encode_rsd = 0;
   metrics->encode_usage_percent = usage_->Value();
   metrics->capture_queue_delay_ms_per_s = capture_queue_delay_->Value();
 }
@@ -515,7 +407,6 @@
   num_pixels_ = num_pixels;
   capture_deltas_.Reset();
   usage_->Reset();
-  rsd_->Reset();
   frame_queue_->Reset();
   capture_queue_delay_->ClearFrames();
   last_capture_time_ = 0;
@@ -581,7 +472,6 @@
   if (last_sample_time_ms_ != 0) {
     int64_t diff_ms = now - last_sample_time_ms_;
     usage_->AddSample(elapsed_ms, diff_ms);
-    rsd_->AddSample(elapsed_ms);
   }
   last_sample_time_ms_ = now;
 }
@@ -599,7 +489,6 @@
   next_process_time_ = now + kProcessIntervalMs;
   ++num_process_times_;
 
-  rsd_->Process(now);
   capture_queue_delay_->CalculateDelayChange(diff_ms);
 
   if (num_process_times_ <= options_.min_process_count) {
@@ -644,7 +533,6 @@
   LOG(LS_VERBOSE) << " Frame stats: capture avg: " << capture_deltas_.Mean()
                   << " capture stddev " << capture_deltas_.StdDev()
                   << " encode usage " << usage_->Value()
-                  << " encode rsd " << rsd_->Value()
                   << " overuse detections " << num_overuse_detections_
                   << " rampup delay " << rampup_delay;
   return 0;
@@ -656,13 +544,7 @@
     overusing = capture_deltas_.StdDev() >=
         options_.high_capture_jitter_threshold_ms;
   } else if (options_.enable_encode_usage_method) {
-    bool usage_overuse =
-        usage_->Value() >= options_.high_encode_usage_threshold_percent;
-    bool rsd_overuse = false;
-    if (options_.high_encode_time_rsd_threshold > 0) {
-      rsd_overuse = (rsd_->Value() >= options_.high_encode_time_rsd_threshold);
-    }
-    overusing = usage_overuse || rsd_overuse;
+    overusing = usage_->Value() >= options_.high_encode_usage_threshold_percent;
   }
 
   if (overusing) {
@@ -683,13 +565,7 @@
     underusing = capture_deltas_.StdDev() <
         options_.low_capture_jitter_threshold_ms;
   } else if (options_.enable_encode_usage_method) {
-    bool usage_underuse =
-        usage_->Value() < options_.low_encode_usage_threshold_percent;
-    bool rsd_underuse = true;
-    if (options_.low_encode_time_rsd_threshold > 0) {
-      rsd_underuse = (rsd_->Value() < options_.low_encode_time_rsd_threshold);
-    }
-    underusing = usage_underuse && rsd_underuse;
+    underusing = usage_->Value() < options_.low_encode_usage_threshold_percent;
   }
   return underusing;
 }
diff --git a/webrtc/video_engine/overuse_frame_detector.h b/webrtc/video_engine/overuse_frame_detector.h
index 421e9de..f90a4f8 100644
--- a/webrtc/video_engine/overuse_frame_detector.h
+++ b/webrtc/video_engine/overuse_frame_detector.h
@@ -103,7 +103,6 @@
 
  private:
   class EncodeTimeAvg;
-  class SendProcessingRsd;
   class SendProcessingUsage;
   class CaptureQueueDelay;
   class FrameQueue;
@@ -146,8 +145,6 @@
 
   int64_t last_encode_sample_ms_;
   scoped_ptr<EncodeTimeAvg> encode_time_;
-
-  scoped_ptr<SendProcessingRsd> rsd_;
   scoped_ptr<SendProcessingUsage> usage_;
   scoped_ptr<FrameQueue> frame_queue_;
   int64_t last_sample_time_ms_;
diff --git a/webrtc/video_engine/overuse_frame_detector_unittest.cc b/webrtc/video_engine/overuse_frame_detector_unittest.cc
index 553c351..e236169 100644
--- a/webrtc/video_engine/overuse_frame_detector_unittest.cc
+++ b/webrtc/video_engine/overuse_frame_detector_unittest.cc
@@ -71,12 +71,6 @@
              options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5;
   }
 
-  int InitialRsd() {
-    return std::max(
-        ((options_.low_encode_time_rsd_threshold +
-          options_.high_encode_time_rsd_threshold) / 2.0f) + 0.5f, 0.0f);
-  }
-
   void InsertFramesWithInterval(
       size_t num_frames, int interval_ms, int width, int height) {
     while (num_frames-- > 0) {
@@ -120,18 +114,6 @@
     }
   }
 
-  void TriggerOveruseWithRsd(int num_times) {
-    const int kDelayMs1 = 10;
-    const int kDelayMs2 = 25;
-    for (int i = 0; i < num_times; ++i) {
-      InsertAndSendFramesWithInterval(
-          200, kFrameInterval33ms, kWidth, kHeight, kDelayMs1);
-      InsertAndSendFramesWithInterval(
-          10, kFrameInterval33ms, kWidth, kHeight, kDelayMs2);
-      overuse_detector_->Process();
-    }
-  }
-
   void TriggerUnderuseWithProcessingUsage() {
     const int kDelayMs1 = 5;
     const int kDelayMs2 = 6;
@@ -160,12 +142,6 @@
     return metrics.encode_usage_percent;
   }
 
-  int Rsd() {
-    CpuOveruseMetrics metrics;
-    overuse_detector_->GetCpuOveruseMetrics(&metrics);
-    return metrics.encode_rsd;
-  }
-
   CpuOveruseOptions options_;
   scoped_ptr<SimulatedClock> clock_;
   scoped_ptr<MockCpuOveruseObserver> observer_;
@@ -571,73 +547,4 @@
   TriggerUnderuseWithProcessingUsage();
 }
 
-TEST_F(OveruseFrameDetectorTest, RsdResetAfterChangingThreshold) {
-  EXPECT_EQ(InitialRsd(), Rsd());
-  options_.high_encode_time_rsd_threshold = 100;
-  overuse_detector_->SetOptions(options_);
-  EXPECT_EQ(InitialRsd(), Rsd());
-  options_.low_encode_time_rsd_threshold = 20;
-  overuse_detector_->SetOptions(options_);
-  EXPECT_EQ(InitialRsd(), Rsd());
-}
-
-// enable_encode_usage_method = true;
-// low/high_encode_time_rsd_threshold >= 0
-// UsagePercent() > high_encode_usage_threshold_percent ||
-// Rsd() > high_encode_time_rsd_threshold => overuse.
-// UsagePercent() < low_encode_usage_threshold_percent &&
-// Rsd() < low_encode_time_rsd_threshold => underuse.
-TEST_F(OveruseFrameDetectorTest, TriggerOveruseWithRsd) {
-  options_.enable_capture_jitter_method = false;
-  options_.enable_encode_usage_method = true;
-  options_.high_encode_time_rsd_threshold = 80;
-  overuse_detector_->SetOptions(options_);
-  // rsd > high, usage < high => overuse
-  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
-  TriggerOveruseWithRsd(options_.high_threshold_consecutive_count);
-  EXPECT_LT(UsagePercent(), options_.high_encode_usage_threshold_percent);
-}
-
-TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithRsd) {
-  options_.enable_capture_jitter_method = false;
-  options_.enable_encode_usage_method = true;
-  options_.low_encode_time_rsd_threshold = 25;
-  options_.high_encode_time_rsd_threshold = 80;
-  overuse_detector_->SetOptions(options_);
-  // rsd > high, usage < high => overuse
-  EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
-  TriggerOveruseWithRsd(options_.high_threshold_consecutive_count);
-  EXPECT_LT(UsagePercent(), options_.high_encode_usage_threshold_percent);
-  // rsd < low, usage < low => underuse
-  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
-  TriggerUnderuseWithProcessingUsage();
-}
-
-TEST_F(OveruseFrameDetectorTest, NoUnderuseWithRsd_UsageGtLowThreshold) {
-  options_.enable_capture_jitter_method = false;
-  options_.enable_encode_usage_method = true;
-  options_.low_encode_usage_threshold_percent = 1;
-  options_.low_encode_time_rsd_threshold = 25;
-  options_.high_encode_time_rsd_threshold = 90;
-  overuse_detector_->SetOptions(options_);
-  // rsd < low, usage > low => no underuse
-  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0);
-  TriggerUnderuseWithProcessingUsage();
-  EXPECT_LT(Rsd(), options_.low_encode_time_rsd_threshold);
-  EXPECT_GT(UsagePercent(), options_.low_encode_usage_threshold_percent);
-}
-
-TEST_F(OveruseFrameDetectorTest, NoUnderuseWithRsd_RsdGtLowThreshold) {
-  options_.enable_capture_jitter_method = false;
-  options_.enable_encode_usage_method = true;
-  options_.low_encode_usage_threshold_percent = 20;
-  options_.low_encode_time_rsd_threshold = 1;
-  options_.high_encode_time_rsd_threshold = 90;
-  overuse_detector_->SetOptions(options_);
-  // rsd > low, usage < low => no underuse
-  EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0);
-  TriggerUnderuseWithProcessingUsage();
-  EXPECT_GT(Rsd(), options_.low_encode_time_rsd_threshold);
-  EXPECT_LT(UsagePercent(), options_.low_encode_usage_threshold_percent);
-}
 }  // namespace webrtc