Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1426)

Unified Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 11293121: Add latency measurement system (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: create cc::LatencyInfo Created 7 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_));
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698