#ifndef UI_BASE_PREDICTION_INPUT_PREDICTOR_H_
#define UI_BASE_PREDICTION_INPUT_PREDICTOR_H_
#include <memory>
#include "base/component_export.h"
#include "base/time/time.h"
#include "ui/gfx/geometry/point_f.h"
namespace ui {
class COMPONENT_EXPORT(UI_BASE_PREDICTION) InputPredictor {
public:
virtual ~InputPredictor() = default;
struct InputData {
gfx::PointF pos;
base::TimeTicks time_stamp;
InputData() {
pos = gfx::PointF();
time_stamp = base::TimeTicks();
}
InputData(const gfx::PointF& event_pos, const base::TimeTicks& event_time) {
pos = event_pos;
time_stamp = event_time;
}
};
virtual const char* GetName() const = 0;
virtual void Reset() = 0;
virtual void Update(const InputData& new_input) = 0;
virtual bool HasPrediction() const = 0;
virtual std::unique_ptr<InputData> GeneratePrediction(
base::TimeTicks predict_time,
base::TimeDelta frame_interval = base::Seconds(0)) = 0;
const base::TimeDelta MaxResampleTime() const { return kMaxResampleTime; }
const base::TimeDelta MaxPredictionTime() const { return kMaxPredictionTime; }
virtual base::TimeDelta TimeInterval() const = 0;
protected:
static constexpr base::TimeDelta kMaxTimeDelta = base::Milliseconds(20);
static constexpr base::TimeDelta kTimeInterval = base::Milliseconds(8);
static constexpr base::TimeDelta kMinTimeInterval = base::Milliseconds(2.5);
static constexpr base::TimeDelta kMaxResampleTime = base::Milliseconds(20);
static constexpr base::TimeDelta kMaxPredictionTime = base::Milliseconds(25);
};
}
#endif