Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index 86cdf09bc564086106e41662f8f982f9cf0ee3f7..d76d288e6c2d05c4b5211a542f1cefe45a8dbed2 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -99,6 +99,8 @@ bool ShouldCoalesceMouseWheelEvents(const WebMouseWheelEvent& last_event, |
last_event.momentumPhase == new_event.momentumPhase; |
} |
+int64 g_current_input_number; |
+ |
} // namespace |
@@ -153,7 +155,9 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate, |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), |
tick_active_smooth_scroll_gestures_task_posted_(false), |
touch_event_queue_(new TouchEventQueue(this)), |
- gesture_event_filter_(new GestureEventFilter(this)) { |
+ gesture_event_filter_(new GestureEventFilter(this)), |
+ incremented_input_number_(false), |
+ current_input_number_(0) { |
CHECK(delegate_); |
if (routing_id_ == MSG_ROUTING_NONE) { |
routing_id_ = process_->GetNextRoutingID(); |
@@ -441,6 +445,9 @@ void RenderWidgetHostImpl::WasShown() { |
} else { |
needs_repainting = false; |
} |
+ |
+ SendStartFrame(); |
+ |
Send(new ViewMsg_WasShown(routing_id_, needs_repainting)); |
process_->WidgetRestored(); |
@@ -496,6 +503,7 @@ void RenderWidgetHostImpl::WasResized() { |
if (!new_size.IsEmpty() && size_changed) |
resize_ack_pending_ = true; |
+ SendStartFrame(); |
if (!Send(new ViewMsg_Resize(routing_id_, new_size, |
GetRootWindowResizerRect(), is_fullscreen_))) { |
resize_ack_pending_ = false; |
@@ -904,6 +912,8 @@ void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) { |
return; |
} |
+ IncrementInputNumber(); |
+ |
if (mouse_event.type == WebInputEvent::MouseDown && |
gesture_event_filter_->GetTapSuppressionController()-> |
ShouldDeferMouseDown(mouse_event)) |
@@ -925,6 +935,7 @@ void RenderWidgetHostImpl::ForwardWheelEvent( |
if (ignore_input_events_ || process_->IgnoreInputEvents()) |
return; |
+ IncrementInputNumber(); |
// If there's already a mouse wheel event waiting to be sent to the renderer, |
// add the new deltas to that event. Not doing so (e.g., by dropping the old |
// event, as for mouse moves) results in very slow scrolling on the Mac (on |
@@ -1089,12 +1100,36 @@ void RenderWidgetHostImpl::ForwardKeyboardEvent( |
} |
} |
+void RenderWidgetHostImpl::IncrementInputNumber() { |
+ if (incremented_input_number_) |
+ return; |
+ g_current_input_number++; |
+ current_input_number_ = g_current_input_number; |
+ incremented_input_number_ = true; |
+ TRACE_EVENT_ASYNC_BEGIN1("frame", "Input processing", this, |
+ "input_number", current_input_number_); |
+} |
+ |
+void RenderWidgetHostImpl::SendStartFrame() { |
+ IncrementInputNumber(); |
+ TRACE_EVENT_ASYNC_END1("frame", "Input processing", this, |
+ "input_number", current_input_number_); |
+ Send(new ViewMsg_StartFrame(routing_id_, current_input_number_)); |
+ incremented_input_number_ = false; |
+} |
+ |
void RenderWidgetHostImpl::SendInputEvent(const WebInputEvent& input_event, |
int event_size, |
bool is_keyboard_shortcut) { |
+ IncrementInputNumber(); |
+ incremented_input_number_ = false; |
+ |
+ TRACE_EVENT_ASYNC_END1("frame", "Input processing", this, |
+ "input_number", current_input_number_); |
+ |
input_event_start_time_ = TimeTicks::Now(); |
Send(new ViewMsg_HandleInputEvent( |
- routing_id_, &input_event, is_keyboard_shortcut)); |
+ routing_id_, current_input_number_, &input_event, is_keyboard_shortcut)); |
increment_in_flight_event_count(); |
} |
@@ -1527,7 +1562,10 @@ void RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwapped( |
void RenderWidgetHostImpl::OnMsgUpdateRect( |
const ViewHostMsg_UpdateRect_Params& params) { |
- TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::OnMsgUpdateRect"); |
+ TRACE_EVENT2("renderer_host", "RenderWidgetHostImpl::OnMsgUpdateRect", |
+ "input_number", params.latency_info.inputNumber, |
+ "render_thread_frame_number", |
+ params.latency_info.rendererMainFrameNumber); |
TimeTicks paint_start = TimeTicks::Now(); |
// Update our knowledge of the RenderWidget's size. |
@@ -1630,7 +1668,10 @@ void RenderWidgetHostImpl::OnMsgUpdateIsDelayed() { |
void RenderWidgetHostImpl::DidUpdateBackingStore( |
const ViewHostMsg_UpdateRect_Params& params, |
const TimeTicks& paint_start) { |
- TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::DidUpdateBackingStore"); |
+ TRACE_EVENT2("renderer_host", "RenderWidgetHostImpl::DidUpdateBackingStore", |
+ "input_number", params.latency_info.inputNumber, |
+ "render_thread_frame_number", |
+ params.latency_info.rendererMainFrameNumber); |
TimeTicks update_start = TimeTicks::Now(); |
if (params.needs_ack) { |
@@ -2294,6 +2335,15 @@ void RenderWidgetHostImpl::AcknowledgeBufferPresent( |
sync_point)); |
} |
+void RenderWidgetHostImpl::NotifyFrameDisplayed( |
+ int route_id, int gpu_host_id, |
+ const WebKit::WebLatencyInfoImpl& latency_info) { |
+ GpuProcessHostUIShim* ui_shim = GpuProcessHostUIShim::FromID(gpu_host_id); |
+ if (ui_shim) |
+ ui_shim->Send(new AcceleratedSurfaceMsg_FrameDisplayed(route_id, |
+ latency_info)); |
+} |
+ |
void RenderWidgetHostImpl::AcknowledgeSwapBuffersToRenderer() { |
if (!is_threaded_compositing_enabled_) |
Send(new ViewMsg_SwapBuffers_ACK(routing_id_)); |