// 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_SMOOTH_EVENT_SAMPLER_H_
#define MEDIA_CAPTURE_CONTENT_SMOOTH_EVENT_SAMPLER_H_

#include "base/macros.h"
#include "base/time/time.h"
#include "media/capture/capture_export.h"

namespace media {

// Filters a sequence of events to achieve a target frequency.
class CAPTURE_EXPORT SmoothEventSampler {
 public:
  explicit SmoothEventSampler(base::TimeDelta min_capture_period);

  // 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 ConsiderPresentationEvent() has been called since the last
  // call to RecordSample().
  bool HasUnrecordedEvent() const;

 private:
  base::TimeDelta min_capture_period_;
  base::TimeDelta token_bucket_capacity_;

  base::TimeTicks current_event_;
  base::TimeTicks last_sample_;
  base::TimeDelta token_bucket_;

  DISALLOW_COPY_AND_ASSIGN(SmoothEventSampler);
};

}  // namespace media

#endif  // MEDIA_CAPTURE_CONTENT_SMOOTH_EVENT_SAMPLER_H_
