Index: media/capture/content/feedback_signal_accumulator.h |
diff --git a/media/capture/content/feedback_signal_accumulator.h b/media/capture/content/feedback_signal_accumulator.h |
deleted file mode 100644 |
index 33873f1940f6568ecdd9fc1426579113b7bdb543..0000000000000000000000000000000000000000 |
--- a/media/capture/content/feedback_signal_accumulator.h |
+++ /dev/null |
@@ -1,109 +0,0 @@ |
-// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef MEDIA_CAPTURE_CONTENT_FEEDBACK_SIGNAL_ACCUMULATOR_H_ |
-#define MEDIA_CAPTURE_CONTENT_FEEDBACK_SIGNAL_ACCUMULATOR_H_ |
- |
-#include "base/time/time.h" |
-#include "media/capture/capture_export.h" |
- |
-namespace media { |
- |
-// Utility class for maintaining an exponentially-decaying average of feedback |
-// signal values whose updates occur at undetermined, possibly irregular time |
-// intervals. |
-// |
-// Feedback signals can be made by multiple sources. Meaning, there can be |
-// several values provided for the same timestamp. In this case, the greatest |
-// value is retained and used to re-compute the average. Therefore, the values |
-// provided to this class' methods should be appropriately translated with this |
-// in mind. For example, an "fraction available" metric should be translated |
-// into a "fraction utilized" one. |
-// |
-// Usage note: Reset() must be called at least once before the first call to |
-// Update(). |
-// |
-// This template class supports data points that are timestamped using either |
-// |base::TimeDelta| or |base::TimeTicks|. |
-template <typename TimeType> |
-class FeedbackSignalAccumulator { |
- public: |
- // |half_life| is the amount of time that must pass between two data points to |
- // move the accumulated average value halfway in-between. Example: If |
- // |half_life| is one second, then calling Reset(0.0, t=0s) and then |
- // Update(1.0, t=1s) will result in an accumulated average value of 0.5. |
- explicit FeedbackSignalAccumulator(base::TimeDelta half_life) |
- : half_life_(half_life), average_(NAN) { |
- DCHECK(half_life_ > base::TimeDelta()); |
- } |
- |
- // Erase all memory of historical values, re-starting with the given |
- // |starting_value|. |
- void Reset(double starting_value, TimeType timestamp) { |
- average_ = update_value_ = prior_average_ = starting_value; |
- reset_time_ = update_time_ = prior_update_time_ = timestamp; |
- } |
- |
- TimeType reset_time() const { return reset_time_; } |
- |
- // Apply the given |value|, which was observed at the given |timestamp|, to |
- // the accumulated average. If the timestamp is in chronological order, the |
- // update succeeds and this method returns true. Otherwise the update has no |
- // effect and false is returned. If there are two or more updates at the same |
- // |timestamp|, only the one with the greatest value will be accounted for |
- // (see class comments for elaboration). |
- bool Update(double value, TimeType timestamp) { |
- DCHECK(!std::isnan(average_)) << "Reset() must be called once."; |
- |
- if (timestamp < update_time_) { |
- return false; // Not in chronological order. |
- } else if (timestamp == update_time_) { |
- if (timestamp == reset_time_) { |
- // Edge case: Multiple updates at reset timestamp. |
- average_ = update_value_ = prior_average_ = |
- std::max(value, update_value_); |
- return true; |
- } |
- if (value <= update_value_) |
- return true; |
- update_value_ = value; |
- } else { |
- prior_average_ = average_; |
- prior_update_time_ = update_time_; |
- update_value_ = value; |
- update_time_ = timestamp; |
- } |
- |
- const double elapsed_us = static_cast<double>( |
- (update_time_ - prior_update_time_).InMicroseconds()); |
- const double weight = |
- elapsed_us / (elapsed_us + half_life_.InMicroseconds()); |
- average_ = weight * update_value_ + (1.0 - weight) * prior_average_; |
- DCHECK(std::isfinite(average_)); |
- |
- return true; |
- } |
- |
- TimeType update_time() const { return update_time_; } |
- |
- // Returns the current accumulated average value. |
- double current() const { return average_; } |
- |
- private: |
- // In conjunction with the |update_time_| and |prior_update_time_|, this is |
- // used to compute the weight of the current update value versus the prior |
- // accumulated average. |
- const base::TimeDelta half_life_; |
- |
- TimeType reset_time_; // |timestamp| passed in last call to Reset(). |
- double average_; // Current accumulated average. |
- double update_value_; // Latest |value| accepted by Update(). |
- TimeType update_time_; // Latest |timestamp| accepted by Update(). |
- double prior_average_; // Accumulated average before last call to Update(). |
- TimeType prior_update_time_; // |timestamp| in prior call to Update(). |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_CAPTURE_CONTENT_FEEDBACK_SIGNAL_ACCUMULATOR_H_ |