Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(967)

Unified Diff: media/capture/content/feedback_signal_accumulator.h

Issue 2149793003: Move media/capture/content/feedback_signal_accumulator{.h,_unittest.cc} to media/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/capture/capture.gyp ('k') | media/capture/content/feedback_signal_accumulator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « media/capture/capture.gyp ('k') | media/capture/content/feedback_signal_accumulator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698