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

Unified Diff: ui/base/events/event.cc

Issue 11591006: Track input latency with UMA stats (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added per event type histograms Created 7 years, 11 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
« no previous file with comments | « ui/base/events/event.h ('k') | ui/base/events/event_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/events/event.cc
diff --git a/ui/base/events/event.cc b/ui/base/events/event.cc
index e24c1761aba0f6a5c15b85d1114d5f961d1abecd..e999f3334375acdb3ea16b1a62e598476e693555 100644
--- a/ui/base/events/event.cc
+++ b/ui/base/events/event.cc
@@ -11,6 +11,8 @@
#include <cmath>
#include <cstring>
+#include "base/metrics/histogram.h"
+#include "base/stringprintf.h"
#include "ui/base/events/event_utils.h"
#include "ui/base/keycodes/keyboard_code_conversion.h"
#include "ui/gfx/point3_f.h"
@@ -53,47 +55,50 @@ gfx::Point CalibratePoint(const gfx::Point& point,
std::string EventTypeName(ui::EventType type) {
#define RETURN_IF_TYPE(t) if (type == ui::t) return #t
- RETURN_IF_TYPE(ET_UNKNOWN);
- RETURN_IF_TYPE(ET_MOUSE_PRESSED);
- RETURN_IF_TYPE(ET_MOUSE_DRAGGED);
- RETURN_IF_TYPE(ET_MOUSE_RELEASED);
- RETURN_IF_TYPE(ET_MOUSE_MOVED);
- RETURN_IF_TYPE(ET_MOUSE_ENTERED);
- RETURN_IF_TYPE(ET_MOUSE_EXITED);
- RETURN_IF_TYPE(ET_KEY_PRESSED);
- RETURN_IF_TYPE(ET_KEY_RELEASED);
- RETURN_IF_TYPE(ET_MOUSEWHEEL);
- RETURN_IF_TYPE(ET_MOUSE_CAPTURE_CHANGED);
- RETURN_IF_TYPE(ET_TOUCH_RELEASED);
- RETURN_IF_TYPE(ET_TOUCH_PRESSED);
- RETURN_IF_TYPE(ET_TOUCH_MOVED);
- RETURN_IF_TYPE(ET_TOUCH_STATIONARY);
- RETURN_IF_TYPE(ET_TOUCH_CANCELLED);
- RETURN_IF_TYPE(ET_DROP_TARGET_EVENT);
- RETURN_IF_TYPE(ET_TRANSLATED_KEY_PRESS);
- RETURN_IF_TYPE(ET_TRANSLATED_KEY_RELEASE);
-
- RETURN_IF_TYPE(ET_GESTURE_SCROLL_BEGIN);
- RETURN_IF_TYPE(ET_GESTURE_SCROLL_END);
- RETURN_IF_TYPE(ET_GESTURE_SCROLL_UPDATE);
- RETURN_IF_TYPE(ET_GESTURE_TAP);
- RETURN_IF_TYPE(ET_GESTURE_TAP_DOWN);
- RETURN_IF_TYPE(ET_GESTURE_TAP_CANCEL);
- RETURN_IF_TYPE(ET_GESTURE_BEGIN);
- RETURN_IF_TYPE(ET_GESTURE_END);
- RETURN_IF_TYPE(ET_GESTURE_DOUBLE_TAP);
- RETURN_IF_TYPE(ET_GESTURE_TWO_FINGER_TAP);
- RETURN_IF_TYPE(ET_GESTURE_PINCH_BEGIN);
- RETURN_IF_TYPE(ET_GESTURE_PINCH_END);
- RETURN_IF_TYPE(ET_GESTURE_PINCH_UPDATE);
- RETURN_IF_TYPE(ET_GESTURE_LONG_PRESS);
- RETURN_IF_TYPE(ET_GESTURE_LONG_TAP);
- RETURN_IF_TYPE(ET_GESTURE_MULTIFINGER_SWIPE);
-
- RETURN_IF_TYPE(ET_SCROLL);
- RETURN_IF_TYPE(ET_SCROLL_FLING_START);
- RETURN_IF_TYPE(ET_SCROLL_FLING_CANCEL);
-#undef RETURN_IF_TYPE
+#define CASE_TYPE(t) case ui::t: return #t
+ switch (type) {
+ CASE_TYPE(ET_UNKNOWN);
+ CASE_TYPE(ET_MOUSE_PRESSED);
+ CASE_TYPE(ET_MOUSE_DRAGGED);
+ CASE_TYPE(ET_MOUSE_RELEASED);
+ CASE_TYPE(ET_MOUSE_MOVED);
+ CASE_TYPE(ET_MOUSE_ENTERED);
+ CASE_TYPE(ET_MOUSE_EXITED);
+ CASE_TYPE(ET_KEY_PRESSED);
+ CASE_TYPE(ET_KEY_RELEASED);
+ CASE_TYPE(ET_MOUSEWHEEL);
+ CASE_TYPE(ET_MOUSE_CAPTURE_CHANGED);
+ CASE_TYPE(ET_TOUCH_RELEASED);
+ CASE_TYPE(ET_TOUCH_PRESSED);
+ CASE_TYPE(ET_TOUCH_MOVED);
+ CASE_TYPE(ET_TOUCH_STATIONARY);
+ CASE_TYPE(ET_TOUCH_CANCELLED);
+ CASE_TYPE(ET_DROP_TARGET_EVENT);
+ CASE_TYPE(ET_TRANSLATED_KEY_PRESS);
+ CASE_TYPE(ET_TRANSLATED_KEY_RELEASE);
+ CASE_TYPE(ET_GESTURE_SCROLL_BEGIN);
+ CASE_TYPE(ET_GESTURE_SCROLL_END);
+ CASE_TYPE(ET_GESTURE_SCROLL_UPDATE);
+ CASE_TYPE(ET_GESTURE_TAP);
+ CASE_TYPE(ET_GESTURE_TAP_DOWN);
+ CASE_TYPE(ET_GESTURE_TAP_CANCEL);
+ CASE_TYPE(ET_GESTURE_BEGIN);
+ CASE_TYPE(ET_GESTURE_END);
+ CASE_TYPE(ET_GESTURE_DOUBLE_TAP);
+ CASE_TYPE(ET_GESTURE_TWO_FINGER_TAP);
+ CASE_TYPE(ET_GESTURE_PINCH_BEGIN);
+ CASE_TYPE(ET_GESTURE_PINCH_END);
+ CASE_TYPE(ET_GESTURE_PINCH_UPDATE);
+ CASE_TYPE(ET_GESTURE_LONG_PRESS);
+ CASE_TYPE(ET_GESTURE_LONG_TAP);
+ CASE_TYPE(ET_GESTURE_MULTIFINGER_SWIPE);
+ CASE_TYPE(ET_SCROLL);
+ CASE_TYPE(ET_SCROLL_FLING_START);
+ CASE_TYPE(ET_SCROLL_FLING_CANCEL);
+ case ui::ET_LAST: NOTREACHED(); return std::string();
+ // Don't include default, so that we get an error when new type is added.
+ }
+#undef CASE_TYPE
NOTREACHED();
return std::string();
@@ -162,8 +167,21 @@ Event::Event(const base::NativeEvent& native_event,
target_(NULL),
phase_(EP_PREDISPATCH),
result_(ER_UNHANDLED) {
+ base::TimeDelta delta = ui::EventTimeForNow() - time_stamp_;
if (type_ < ET_LAST)
name_ = EventTypeName(type_);
+ UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser",
+ delta.InMicroseconds(), 0, 1000000, 100);
+ std::string name_for_event =
+ base::StringPrintf("Event.Latency.Browser.%s", name_.c_str());
+ 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(delta);
InitWithNativeEvent(native_event);
}
@@ -253,8 +271,11 @@ MouseEvent::MouseEvent(EventType type,
const gfx::Point& location,
const gfx::Point& root_location,
int flags)
- : LocatedEvent(type, location, root_location,
- base::Time::NowFromSystemTime() - base::Time(), flags),
+ : LocatedEvent(type,
+ location,
+ root_location,
+ ui::EventTimeForNow(),
+ flags),
changed_button_flags_(0) {
if (this->type() == ET_MOUSE_MOVED && IsAnyButton())
SetType(ET_MOUSE_DRAGGED);
@@ -455,7 +476,7 @@ KeyEvent::KeyEvent(EventType type,
KeyboardCode key_code,
int flags,
bool is_char)
- : Event(type, base::Time::NowFromSystemTime() - base::Time(), flags),
+ : Event(type, EventTimeForNow(), flags),
key_code_(key_code),
is_char_(is_char),
character_(GetCharacterFromKeyCode(key_code, flags)),
@@ -579,8 +600,11 @@ DropTargetEvent::DropTargetEvent(const OSExchangeData& data,
const gfx::Point& location,
const gfx::Point& root_location,
int source_operations)
- : LocatedEvent(ET_DROP_TARGET_EVENT, location, root_location,
- base::Time::NowFromSystemTime() - base::Time(), 0),
+ : LocatedEvent(ET_DROP_TARGET_EVENT,
+ location,
+ root_location,
+ ui::EventTimeForNow(),
+ 0),
data_(data),
source_operations_(source_operations) {
}
« no previous file with comments | « ui/base/events/event.h ('k') | ui/base/events/event_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698