#ifndef UI_BASE_PREDICTION_LINEAR_RESAMPLING_H_
#define UI_BASE_PREDICTION_LINEAR_RESAMPLING_H_
#include <deque>
#include "base/component_export.h"
#include "base/time/time.h"
#include "ui/base/prediction/input_predictor.h"
namespace ui {
class COMPONENT_EXPORT(UI_BASE_PREDICTION) LinearResampling
: public InputPredictor {
public:
explicit LinearResampling();
LinearResampling(const LinearResampling&) = delete;
LinearResampling& operator=(const LinearResampling&) = delete;
~LinearResampling() override;
const char* GetName() const override;
void Reset() override;
void Update(const InputData& new_input) override;
bool HasPrediction() const override;
std::unique_ptr<InputData> GeneratePrediction(
base::TimeTicks frame_time,
base::TimeDelta frame_interval) override;
base::TimeDelta TimeInterval() const override;
base::TimeDelta ResampleLatency(
base::TimeDelta frame_interval) const override;
private:
class LatencyCalculator {
public:
base::TimeDelta GetResampleLatencyInternal(base::TimeDelta frame_interval);
private:
base::TimeDelta CalculateLatency();
base::TimeDelta resample_latency_;
base::TimeDelta frame_interval_;
};
static constexpr size_t kNumEventsForResampling = 2;
std::deque<InputData> events_queue_;
base::TimeDelta events_dt_;
mutable LatencyCalculator latency_calculator_;
};
}
#endif