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 c793bdd7efcc0a2b0fc580f5095e61eb3cba3f93..45923f8fcac78f59d6461de485d1f5a4c6c7b953 100644 |
--- a/content/renderer/input/main_thread_event_queue.h |
+++ b/content/renderer/input/main_thread_event_queue.h |
@@ -10,8 +10,8 @@ |
#include "content/common/content_export.h" |
#include "content/common/input/input_event_ack_state.h" |
#include "content/common/input/input_event_dispatch_type.h" |
-#include "content/common/input/web_input_event_queue.h" |
#include "content/public/common/content_features.h" |
+#include "content/renderer/input/main_thread_event_queue_task_list.h" |
#include "content/renderer/input/scoped_web_input_event_with_latency_info.h" |
#include "third_party/WebKit/public/platform/WebInputEvent.h" |
#include "third_party/WebKit/public/platform/scheduler/renderer/renderer_scheduler.h" |
@@ -20,50 +20,6 @@ |
namespace content { |
-class EventWithDispatchType : public ScopedWebInputEventWithLatencyInfo { |
- public: |
- EventWithDispatchType(ui::WebScopedInputEvent event, |
- const ui::LatencyInfo& latency, |
- InputEventDispatchType dispatch_type, |
- bool originally_cancelable); |
- ~EventWithDispatchType(); |
- void CoalesceWith(const EventWithDispatchType& other); |
- |
- const std::deque<uint32_t>& blockingCoalescedEventIds() const { |
- return blocking_coalesced_event_ids_; |
- } |
- InputEventDispatchType dispatchType() const { return dispatch_type_; } |
- base::TimeTicks creationTimestamp() const { return creation_timestamp_; } |
- base::TimeTicks lastCoalescedTimestamp() const { |
- return last_coalesced_timestamp_; |
- } |
- |
- size_t coalescedCount() const { |
- return non_blocking_coalesced_count_ + blocking_coalesced_event_ids_.size(); |
- } |
- |
- bool originallyCancelable() const { return originally_cancelable_; } |
- |
- private: |
- InputEventDispatchType dispatch_type_; |
- |
- // 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> blocking_coalesced_event_ids_; |
- // Contains the number of non-blocking events coalesced. |
- size_t non_blocking_coalesced_count_; |
- base::TimeTicks creation_timestamp_; |
- base::TimeTicks last_coalesced_timestamp_; |
- |
- // Whether the received event was originally cancelable or not. The compositor |
- // input handler can change the event based on presence of event handlers so |
- // this is the state at which the renderer received the event from the |
- // browser. |
- bool originally_cancelable_; |
-}; |
- |
class CONTENT_EXPORT MainThreadEventQueueClient { |
public: |
// Handle an |event| that was previously queued (possibly |
@@ -134,6 +90,7 @@ class CONTENT_EXPORT MainThreadEventQueue |
InputEventDispatchType dispatch_type, |
InputEventAckState ack_result); |
void DispatchRafAlignedInput(base::TimeTicks frame_time); |
+ void QueueClosure(const base::Closure& closure); |
// Call once the main thread has handled an outstanding |type| event |
// in flight. |
@@ -144,9 +101,9 @@ class CONTENT_EXPORT MainThreadEventQueue |
private: |
friend class base::RefCountedThreadSafe<MainThreadEventQueue>; |
~MainThreadEventQueue(); |
- void QueueEvent(std::unique_ptr<EventWithDispatchType> event); |
- void SendEventNotificationToMainThread(); |
- void DispatchSingleEvent(); |
+ void QueueEvent(std::unique_ptr<MainThreadEventQueueTask> event); |
+ void PostTaskToMainThread(); |
+ void DispatchEvents(); |
void DispatchInFlightEvent(); |
void PossiblyScheduleMainFrame(); |
@@ -154,14 +111,15 @@ class CONTENT_EXPORT MainThreadEventQueue |
const ui::LatencyInfo& latency, |
InputEventDispatchType original_dispatch_type); |
- bool IsRafAlignedInputDisabled(); |
- bool IsRafAlignedEvent(const blink::WebInputEvent& event); |
+ bool IsRafAlignedInputDisabled() const; |
+ bool IsRafAlignedEvent( |
+ const std::unique_ptr<MainThreadEventQueueTask>& item) const; |
friend class MainThreadEventQueueTest; |
friend class MainThreadEventQueueInitializationTest; |
int routing_id_; |
MainThreadEventQueueClient* client_; |
- std::unique_ptr<EventWithDispatchType> in_flight_event_; |
+ std::unique_ptr<MainThreadEventQueueTask> in_flight_event_; |
bool last_touch_start_forced_nonblocking_due_to_fling_; |
bool enable_fling_passive_listener_flag_; |
bool enable_non_blocking_due_to_main_thread_responsiveness_flag_; |
@@ -174,8 +132,11 @@ class CONTENT_EXPORT MainThreadEventQueue |
SharedState(); |
~SharedState(); |
- WebInputEventQueue<EventWithDispatchType> events_; |
+ MainThreadEventQueueTaskList events_; |
+ // A BeginMainFrame has been requested but not received yet. |
bool sent_main_frame_request_; |
+ // A PostTask to the main thread has been sent but not executed yet. |
+ bool sent_post_task_; |
base::TimeTicks last_async_touch_move_timestamp_; |
}; |