summaryrefslogtreecommitdiff
path: root/chromium/media/capture/content/smooth_event_sampler.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/capture/content/smooth_event_sampler.h')
-rw-r--r--chromium/media/capture/content/smooth_event_sampler.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/chromium/media/capture/content/smooth_event_sampler.h b/chromium/media/capture/content/smooth_event_sampler.h
new file mode 100644
index 00000000000..c250eb486e1
--- /dev/null
+++ b/chromium/media/capture/content/smooth_event_sampler.h
@@ -0,0 +1,60 @@
+// 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_SMOOTH_EVENT_SAMPLER_H_
+#define MEDIA_CAPTURE_SMOOTH_EVENT_SAMPLER_H_
+
+#include "base/time/time.h"
+#include "media/base/media_export.h"
+
+namespace media {
+
+// Filters a sequence of events to achieve a target frequency.
+class MEDIA_EXPORT SmoothEventSampler {
+ public:
+ SmoothEventSampler(base::TimeDelta min_capture_period,
+ int redundant_capture_goal);
+
+ // Get/Set minimum capture period. When setting a new value, the state of the
+ // sampler is retained so that sampling will continue smoothly.
+ base::TimeDelta min_capture_period() const { return min_capture_period_; }
+ void SetMinCapturePeriod(base::TimeDelta p);
+
+ // Add a new event to the event history, and consider whether it ought to be
+ // sampled. The event is not recorded as a sample until RecordSample() is
+ // called.
+ void ConsiderPresentationEvent(base::TimeTicks event_time);
+
+ // Returns true if the last event considered should be sampled.
+ bool ShouldSample() const;
+
+ // Operates on the last event added by ConsiderPresentationEvent(), marking
+ // it as sampled. After this point we are current in the stream of events, as
+ // we have sampled the most recent event.
+ void RecordSample();
+
+ // Returns true if, at time |event_time|, sampling should occur because too
+ // much time will have passed relative to the last event and/or sample.
+ bool IsOverdueForSamplingAt(base::TimeTicks event_time) const;
+
+ // Returns true if ConsiderPresentationEvent() has been called since the last
+ // call to RecordSample().
+ bool HasUnrecordedEvent() const;
+
+ private:
+ base::TimeDelta min_capture_period_;
+ const int redundant_capture_goal_;
+ base::TimeDelta token_bucket_capacity_;
+
+ base::TimeTicks current_event_;
+ base::TimeTicks last_sample_;
+ int overdue_sample_count_;
+ base::TimeDelta token_bucket_;
+
+ DISALLOW_COPY_AND_ASSIGN(SmoothEventSampler);
+};
+
+} // namespace media
+
+#endif // MEDIA_CAPTURE_SMOOTH_EVENT_SAMPLER_H_