Add max limit of number for overuses. When limit is reached always apply the rampup delay. BUG=1577 R=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/13719004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6451 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video_engine/overuse_frame_detector.cc b/webrtc/video_engine/overuse_frame_detector.cc index ac9519f..764c258 100644 --- a/webrtc/video_engine/overuse_frame_detector.cc +++ b/webrtc/video_engine/overuse_frame_detector.cc
@@ -42,8 +42,8 @@ // Expontential back-off factor, to prevent annoying up-down behaviour. const double kRampUpBackoffFactor = 2.0; -// The initial average encode time (set to a fairly small value). -const float kInitialAvgEncodeTimeMs = 5.0f; +// Max number of overuses detected before always applying the rampup delay. +const int kMaxOverusesBeforeApplyRampupDelay = 7; // The maximum exponent to use in VCMExpFilter. const float kSampleDiffMs = 33.0f; @@ -115,6 +115,7 @@ public: EncodeTimeAvg() : kWeightFactor(0.5f), + kInitialAvgEncodeTimeMs(5.0f), filtered_encode_time_ms_(new VCMExpFilter(kWeightFactor)) { filtered_encode_time_ms_->Apply(1.0f, kInitialAvgEncodeTimeMs); } @@ -132,6 +133,7 @@ private: const float kWeightFactor; + const float kInitialAvgEncodeTimeMs; scoped_ptr<VCMExpFilter> filtered_encode_time_ms_; }; @@ -378,6 +380,7 @@ last_capture_time_(0), last_overuse_time_(0), checks_above_threshold_(0), + num_overuse_detections_(0), last_rampup_time_(0), in_quick_rampup_(false), current_rampup_delay_ms_(kStandardRampUpDelayMs), @@ -514,7 +517,8 @@ // back and forth between this load, the system doesn't seem to handle it. bool check_for_backoff = last_rampup_time_ > last_overuse_time_; if (check_for_backoff) { - if (now - last_rampup_time_ < kStandardRampUpDelayMs) { + if (now - last_rampup_time_ < kStandardRampUpDelayMs || + num_overuse_detections_ > kMaxOverusesBeforeApplyRampupDelay) { // Going up was not ok for very long, back off. current_rampup_delay_ms_ *= kRampUpBackoffFactor; if (current_rampup_delay_ms_ > kMaxRampUpDelayMs) @@ -528,6 +532,7 @@ last_overuse_time_ = now; in_quick_rampup_ = false; checks_above_threshold_ = 0; + ++num_overuse_detections_; if (observer_ != NULL) observer_->OveruseDetected(); @@ -541,11 +546,12 @@ int rampup_delay = in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_; - LOG(LS_INFO) << " Frame stats: capture avg: " << capture_deltas_.Mean() - << " capture stddev " << capture_deltas_.StdDev() - << " encode usage " << encode_usage_->Value() - << " encode rsd " << encode_rsd_->Value() - << " rampup delay " << rampup_delay; + LOG(LS_VERBOSE) << " Frame stats: capture avg: " << capture_deltas_.Mean() + << " capture stddev " << capture_deltas_.StdDev() + << " encode usage " << encode_usage_->Value() + << " encode rsd " << encode_rsd_->Value() + << " overuse detections " << num_overuse_detections_ + << " rampup delay " << rampup_delay; return 0; }
diff --git a/webrtc/video_engine/overuse_frame_detector.h b/webrtc/video_engine/overuse_frame_detector.h index ef6d6ab..efd23dc 100644 --- a/webrtc/video_engine/overuse_frame_detector.h +++ b/webrtc/video_engine/overuse_frame_detector.h
@@ -124,6 +124,7 @@ int64_t last_overuse_time_; int checks_above_threshold_; + int num_overuse_detections_; int64_t last_rampup_time_; bool in_quick_rampup_;