blob: 12df713f46597b6da5eeb407b598cd35833c6326 [file] [log] [blame]
// Copyright 2018 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 UI_EVENTS_BLINK_SCROLL_PREDICTOR_H_
#define UI_EVENTS_BLINK_SCROLL_PREDICTOR_H_
#include <vector>
#include "ui/events/base_event_utils.h"
#include "ui/events/blink/event_with_callback.h"
#include "ui/events/blink/prediction/input_predictor.h"
namespace ui {
namespace test {
class ScrollPredictorTest;
}
// This class handles resampling GestureScrollUpdate events on InputHandlerProxy
// at |BeginFrame| signal, before events been dispatched. The predictor use
// original events to update the prediction and align the aggregated event
// timestamp and delta_x/y to the VSync time.
class ScrollPredictor {
public:
ScrollPredictor();
~ScrollPredictor();
// Resampling gesture scroll events. Each prediction starts with a GSB.
// On each GSU, updates the prediction with events in original events list,
// and apply the prediction to the GSU event.
void HandleEvent(const EventWithCallback::OriginalEventList& original_events,
base::TimeTicks frame_time,
blink::WebInputEvent* event);
private:
friend class test::InputHandlerProxyEventQueueTest;
friend class test::ScrollPredictorTest;
// Update the prediction with GestureScrollUpdate deltaX and deltaY
void UpdatePrediction(const WebScopedInputEvent& event);
// Apply resampled deltaX/deltaY to gesture events
void ResampleEvent(base::TimeTicks frame_time, blink::WebInputEvent* event);
std::unique_ptr<InputPredictor> predictor_;
// Total scroll delta, used for prediction. Reset when GestureScrollBegin
gfx::PointF current_accumulated_delta_;
// Accumulated delta from last vsync, use to calculate delta_x and delta_y for
// the aggregated event.
gfx::PointF last_accumulated_delta_;
DISALLOW_COPY_AND_ASSIGN(ScrollPredictor);
};
} // namespace ui
#endif // UI_EVENTS_BLINK_SCROLL_PREDICTOR_H_