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 be9a48967f1112c9d7354848c63b7fe10b31c614..d6f1ad4de1380d7165dc77f982ef13356806558f 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -101,6 +101,8 @@ bool ShouldCoalesceMouseWheelEvents(const WebMouseWheelEvent& last_event, |
last_event.momentumPhase == new_event.momentumPhase; |
} |
+int64 g_current_input_number; |
+ |
} // namespace |
@@ -155,7 +157,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; |
@@ -905,6 +913,8 @@ void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) { |
return; |
} |
+ IncrementInputNumber(); |
+ |
if (mouse_event.type == WebInputEvent::MouseDown && |
gesture_event_filter_->GetTapSuppressionController()-> |
ShouldDeferMouseDown(mouse_event)) |
@@ -926,6 +936,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 |
@@ -1090,12 +1101,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(); |
} |
@@ -1532,7 +1567,10 @@ void RenderWidgetHostImpl::OnSwapCompositorFrame( |
void RenderWidgetHostImpl::OnUpdateRect( |
const ViewHostMsg_UpdateRect_Params& params) { |
- TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::OnUpdateRect"); |
+ TRACE_EVENT2("renderer_host", "RenderWidgetHostImpl::OnUpdateRect", |
+ "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. |
@@ -1635,7 +1673,10 @@ void RenderWidgetHostImpl::OnUpdateIsDelayed() { |
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) { |
@@ -2300,6 +2341,15 @@ void RenderWidgetHostImpl::AcknowledgeBufferPresent( |
} |
} |
+void RenderWidgetHostImpl::NotifyFrameDisplayed( |
+ int route_id, int gpu_host_id, |
+ const cc::LatencyInfo& 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_)); |