Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 6e38df8a0b6014a1ff1af08e59e25169cdc0b91d..ff0cc11f13f6f501e3e816fee1b725fa9cf6dd18 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -73,6 +73,48 @@ using WebKit::WebTouchEvent; |
using WebKit::WebVector; |
using WebKit::WebWidget; |
+namespace { |
+const char* GetEventName(WebInputEvent::Type type) { |
+#define CASE_TYPE(t) case WebInputEvent::t: return #t |
+ switch(type) { |
+ CASE_TYPE(Undefined); |
+ CASE_TYPE(MouseDown); |
+ CASE_TYPE(MouseUp); |
+ CASE_TYPE(MouseMove); |
+ CASE_TYPE(MouseEnter); |
+ CASE_TYPE(MouseLeave); |
+ CASE_TYPE(ContextMenu); |
+ CASE_TYPE(MouseWheel); |
+ CASE_TYPE(RawKeyDown); |
+ CASE_TYPE(KeyDown); |
+ CASE_TYPE(KeyUp); |
+ CASE_TYPE(Char); |
+ CASE_TYPE(GestureScrollBegin); |
+ CASE_TYPE(GestureScrollEnd); |
+ CASE_TYPE(GestureScrollUpdate); |
+ CASE_TYPE(GestureFlingStart); |
+ CASE_TYPE(GestureFlingCancel); |
+ CASE_TYPE(GestureTap); |
+ CASE_TYPE(GestureTapDown); |
+ CASE_TYPE(GestureTapCancel); |
+ CASE_TYPE(GestureDoubleTap); |
+ CASE_TYPE(GestureTwoFingerTap); |
+ CASE_TYPE(GestureLongPress); |
+ CASE_TYPE(GestureLongTap); |
+ CASE_TYPE(GesturePinchBegin); |
+ CASE_TYPE(GesturePinchEnd); |
+ CASE_TYPE(GesturePinchUpdate); |
+ CASE_TYPE(TouchStart); |
+ CASE_TYPE(TouchMove); |
+ CASE_TYPE(TouchEnd); |
+ CASE_TYPE(TouchCancel); |
+ // Don't include default, so that we get an error when new type is added. |
+ } |
+#undef CASE_TYPE |
+ NOTREACHED(); |
+ return "Undefined"; |
+} |
+} |
namespace content { |
RenderWidget::RenderWidget(WebKit::WebPopupType popup_type, |
@@ -555,6 +597,25 @@ void RenderWidget::OnHandleInputEvent(const WebKit::WebInputEvent* input_event, |
return; |
} |
+ base::TimeDelta now = base::TimeDelta::FromInternalValue( |
+ base::TimeTicks::Now().ToInternalValue()); |
+ |
+ int64 delta = static_cast<int64>( |
+ (now.InSecondsF() - input_event->timeStampSeconds) * |
+ base::Time::kMicrosecondsPerSecond); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Renderer", delta, 0, 1000000, 100); |
+ std::string name_for_event = |
+ base::StringPrintf("Event.Latency.Renderer.%s", |
+ GetEventName(input_event->type)); |
+ base::Histogram* counter_for_type = |
+ base::Histogram::FactoryTimeGet( |
+ name_for_event, |
+ base::TimeDelta::FromMilliseconds(0), |
+ base::TimeDelta::FromMilliseconds(1000000), |
+ 100, |
+ base::Histogram::kUmaTargetedHistogramFlag); |
+ counter_for_type->AddTime(base::TimeDelta::FromMicroseconds(delta)); |
+ |
bool prevent_default = false; |
if (WebInputEvent::isMouseEventType(input_event->type)) { |
const WebMouseEvent& mouse_event = |