Index: content/renderer/input/main_thread_event_queue.h |
diff --git a/content/renderer/input/main_thread_event_queue.h b/content/renderer/input/main_thread_event_queue.h |
index 3e9ab9c94b8989aecb31b56643b4e8b9d92cc222..37598f2eebfff64b74e00a965c863e4aeeed0aad 100644 |
--- a/content/renderer/input/main_thread_event_queue.h |
+++ b/content/renderer/input/main_thread_event_queue.h |
@@ -30,17 +30,25 @@ class EventWithDispatchType : public ScopedWebInputEventWithLatencyInfo { |
WARN_UNUSED_RESULT; |
void CoalesceWith(const EventWithDispatchType& other); |
- const std::deque<uint32_t>& eventsToAck() const { return eventsToAck_; } |
+ const std::deque<uint32_t>& coalescedEventIds() const { |
+ return coalesced_event_ids_; |
+ } |
InputEventDispatchType dispatchType() const { return dispatch_type_; } |
+ base::TimeTicks creationTimestamp() const { return creation_timestamp_; } |
+ base::TimeTicks lastCoalescedTimestamp() const { |
+ return last_coalesced_timestamp_; |
+ } |
private: |
InputEventDispatchType dispatch_type_; |
- // |eventsToAck_| contains the unique touch event id to be acked. If |
- // the events are TouchEvents the value will be 0. More importantly for |
+ // |coalesced_event_ids_| contains the unique touch event ids to be acked. If |
+ // the events are not TouchEvents the values will be 0. More importantly for |
// those cases the deque ends up containing how many additional ACKs |
// need to be sent. |
- std::deque<uint32_t> eventsToAck_; |
+ std::deque<uint32_t> coalesced_event_ids_; |
+ base::TimeTicks creation_timestamp_; |
+ base::TimeTicks last_coalesced_timestamp_; |
}; |
class CONTENT_EXPORT MainThreadEventQueueClient { |
@@ -58,6 +66,7 @@ class CONTENT_EXPORT MainThreadEventQueueClient { |
blink::WebInputEvent::Type type, |
InputEventAckState ack_result, |
uint32_t touch_event_id) = 0; |
+ virtual void NeedsMainFrame(int routing_id) = 0; |
}; |
// MainThreadEventQueue implements a queue for events that need to be |
@@ -111,6 +120,7 @@ class CONTENT_EXPORT MainThreadEventQueue |
const ui::LatencyInfo& latency, |
InputEventDispatchType dispatch_type, |
InputEventAckState ack_result); |
+ void DispatchRafAlignedInput(); |
// Call once the main thread has handled an outstanding |type| event |
// in flight. |
@@ -124,7 +134,10 @@ class CONTENT_EXPORT MainThreadEventQueue |
~MainThreadEventQueue(); |
void QueueEvent(std::unique_ptr<EventWithDispatchType> event); |
void SendEventNotificationToMainThread(); |
- void PopEventOnMainThread(); |
+ void DispatchSingleEvent(); |
+ void DispatchInFlightEvent(); |
+ void PossiblyScheduleMainFrame(); |
+ |
void SendEventToMainThread(const blink::WebInputEvent* event, |
const ui::LatencyInfo& latency, |
InputEventDispatchType original_dispatch_type); |
@@ -132,13 +145,25 @@ class CONTENT_EXPORT MainThreadEventQueue |
friend class MainThreadEventQueueTest; |
int routing_id_; |
MainThreadEventQueueClient* client_; |
- WebInputEventQueue<EventWithDispatchType> events_; |
std::unique_ptr<EventWithDispatchType> in_flight_event_; |
bool is_flinging_; |
bool last_touch_start_forced_nonblocking_due_to_fling_; |
bool enable_fling_passive_listener_flag_; |
+ bool handle_raf_aligned_input_; |
+ |
+ // Contains data to be shared between main thread and compositor thread. |
+ struct SharedState { |
+ SharedState(); |
+ ~SharedState(); |
+ |
+ WebInputEventQueue<EventWithDispatchType> events_; |
+ bool sent_main_frame_request_; |
+ }; |
+ |
+ // Lock used to serailize |shared_state_|. |
tdresser
2016/08/25 14:38:41
serialize
dtapuska
2016/08/25 15:01:36
Done.
|
+ base::Lock shared_state_lock_; |
+ SharedState shared_state_; |
- base::Lock event_queue_lock_; |
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; |
blink::scheduler::RendererScheduler* renderer_scheduler_; |