blob: b0f617cb1b45f5bf96e5b9f0c2520e5346b9d9b4 [file] [log] [blame]
// Copyright 2019 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.
#include "ui/events/blink/prediction/predictor_factory.h"
#include "ui/events/blink/blink_features.h"
#include "ui/events/blink/prediction/empty_predictor.h"
#include "ui/events/blink/prediction/kalman_predictor.h"
#include "ui/events/blink/prediction/least_squares_predictor.h"
#include "ui/events/blink/prediction/linear_predictor.h"
namespace ui {
namespace input_prediction {
const char kScrollPredictorNameLsq[] = "lsq";
const char kScrollPredictorNameKalman[] = "kalman";
const char kScrollPredictorNameKalmanTimeFiltered[] = "kalman_time_filtered";
const char kScrollPredictorNameLinearFirst[] = "linear_first";
const char kScrollPredictorNameLinearSecond[] = "linear_second";
const char kScrollPredictorNameEmpty[] = "empty";
} // namespace input_prediction
namespace {
using input_prediction::PredictorType;
}
PredictorType PredictorFactory::GetPredictorTypeFromName(
const std::string& predictor_name) {
if (predictor_name == input_prediction::kScrollPredictorNameLsq)
return PredictorType::kScrollPredictorTypeLsq;
else if (predictor_name == input_prediction::kScrollPredictorNameKalman)
return PredictorType::kScrollPredictorTypeKalman;
else if (predictor_name ==
input_prediction::kScrollPredictorNameKalmanTimeFiltered)
return PredictorType::kScrollPredictorTypeKalmanTimeFiltered;
else if (predictor_name == input_prediction::kScrollPredictorNameLinearFirst)
return PredictorType::kScrollPredictorTypeLinearFirst;
else if (predictor_name == input_prediction::kScrollPredictorNameLinearSecond)
return PredictorType::kScrollPredictorTypeLinearSecond;
else
return PredictorType::kScrollPredictorTypeEmpty;
}
std::unique_ptr<InputPredictor> PredictorFactory::GetPredictor(
PredictorType predictor_type) {
if (predictor_type == PredictorType::kScrollPredictorTypeLsq)
return std::make_unique<LeastSquaresPredictor>();
else if (predictor_type == PredictorType::kScrollPredictorTypeKalman)
return std::make_unique<KalmanPredictor>(false /* enable_time_filtering */);
else if (predictor_type ==
PredictorType::kScrollPredictorTypeKalmanTimeFiltered)
return std::make_unique<KalmanPredictor>(true /* enable_time_filtering */);
else if (predictor_type == PredictorType::kScrollPredictorTypeLinearFirst)
return std::make_unique<LinearPredictor>(
LinearPredictor::EquationOrder::kFirstOrder);
else if (predictor_type == PredictorType::kScrollPredictorTypeLinearSecond)
return std::make_unique<LinearPredictor>(
LinearPredictor::EquationOrder::kSecondOrder);
else
return std::make_unique<EmptyPredictor>();
}
} // namespace ui