blob: 24b33888e1ce125011b5015507c46e88e5d8bcee [file] [log] [blame]
// Copyright 2021 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 COMPONENTS_VIZ_SERVICE_DISPLAY_DELEGATED_INK_TRAIL_DATA_H_
#define COMPONENTS_VIZ_SERVICE_DISPLAY_DELEGATED_INK_TRAIL_DATA_H_
#include <map>
#include <memory>
#include <vector>
#include "base/time/time.h"
#include "components/viz/common/delegated_ink_prediction_configuration.h"
#include "components/viz/service/viz_service_export.h"
#include "ui/base/prediction/prediction_metrics_handler.h"
#include "ui/gfx/geometry/point_f.h"
namespace gfx {
class DelegatedInkMetadata;
class DelegatedInkPoint;
} // namespace gfx
namespace ui {
class InputPredictor;
} // namespace ui
namespace viz {
// The maximum number of delegated ink points that will be stored at a time.
// When this is hit, the oldest one will be removed each time a new one is
// added.
constexpr int kMaximumDelegatedInkPointsStored = 10;
class VIZ_SERVICE_EXPORT DelegatedInkTrailData {
public:
DelegatedInkTrailData();
~DelegatedInkTrailData();
void AddPoint(const gfx::DelegatedInkPoint& point);
void PredictPoints(std::vector<gfx::DelegatedInkPoint>* ink_points_to_draw,
gfx::DelegatedInkMetadata* metadata);
void Reset();
bool ContainsMatchingPoint(gfx::DelegatedInkMetadata* metadata) const;
void ErasePointsOlderThanMetadata(gfx::DelegatedInkMetadata* metadata);
void UpdateMetrics(gfx::DelegatedInkMetadata* metadata);
const std::map<base::TimeTicks, gfx::PointF>& GetPoints() const {
return points_;
}
private:
// Helper struct for holding the predictor and matching metrics handler. This
// only needs to exist during ongoing prediction experimentation. Once the
// experimentation is complete, only a single predictor and single metrics
// handler will be needed.
struct PredictionHandler {
public:
PredictionHandler();
~PredictionHandler();
// Kalman predictors that are used for predicting points.
std::unique_ptr<ui::InputPredictor> predictor;
// Handlers for calculating useful metrics for evaluating predicted points
// and populating the histograms with those metrics.
std::unique_ptr<ui::PredictionMetricsHandler> metrics_handler;
};
// Array of the predictors and matching metrics handlers for doing prediction
// experimentation.
PredictionHandler prediction_handlers_[kNumberOfPredictionConfigs];
// The points that arrived from the browser process and will be used to draw
// the delegated ink trail.
std::map<base::TimeTicks, gfx::PointF> points_;
// The pointer id associated with these points.
int32_t pointer_id_;
};
} // namespace viz
#endif // COMPONENTS_VIZ_SERVICE_DISPLAY_DELEGATED_INK_TRAIL_DATA_H_