Chromium Code Reviews| Index: ui/events/event.cc |
| diff --git a/ui/events/event.cc b/ui/events/event.cc |
| index 6d2df8d8f7224bcee06a4ef01f79a8fc49f083bd..5d55468a12d2561ff7291d0d1d89f5bce0d7c453 100644 |
| --- a/ui/events/event.cc |
| +++ b/ui/events/event.cc |
| @@ -139,6 +139,72 @@ std::string EventTypeName(ui::EventType type) { |
| return std::string(); |
| } |
| +ui::SourceEventType EventTypeToLatencySourceEventType(ui::EventType type) { |
| + switch (type) { |
| + case ui::ET_UNKNOWN: |
| + // SourceEventType for PointerEvents/GestureEvents can be either TOUCH or |
| + // WHEEL. The proper value is assigned in the Constructors. |
|
sky
2016/09/15 17:56:34
nit: 'C' -> 'c'.
sahel
2016/09/15 18:58:07
Done.
|
| + case ui::ET_POINTER_DOWN: |
| + case ui::ET_POINTER_MOVED: |
| + case ui::ET_POINTER_UP: |
| + case ui::ET_POINTER_CANCELLED: |
| + case ui::ET_POINTER_ENTERED: |
| + case ui::ET_POINTER_EXITED: |
| + case ui::ET_POINTER_CAPTURE_CHANGED: |
| + case ui::ET_GESTURE_SCROLL_BEGIN: |
| + case ui::ET_GESTURE_SCROLL_END: |
| + case ui::ET_GESTURE_SCROLL_UPDATE: |
| + case ui::ET_GESTURE_TAP: |
| + case ui::ET_GESTURE_TAP_DOWN: |
| + case ui::ET_GESTURE_TAP_CANCEL: |
| + case ui::ET_GESTURE_TAP_UNCONFIRMED: |
| + case ui::ET_GESTURE_DOUBLE_TAP: |
| + case ui::ET_GESTURE_BEGIN: |
| + case ui::ET_GESTURE_END: |
| + case ui::ET_GESTURE_TWO_FINGER_TAP: |
| + case ui::ET_GESTURE_PINCH_BEGIN: |
| + case ui::ET_GESTURE_PINCH_END: |
| + case ui::ET_GESTURE_PINCH_UPDATE: |
| + case ui::ET_GESTURE_LONG_PRESS: |
| + case ui::ET_GESTURE_LONG_TAP: |
| + case ui::ET_GESTURE_SWIPE: |
| + case ui::ET_GESTURE_SHOW_PRESS: |
| + // Flings can be GestureEvents too. |
| + case ui::ET_SCROLL_FLING_START: |
| + case ui::ET_SCROLL_FLING_CANCEL: |
| + return ui::SourceEventType::UNKNOWN; |
| + |
| + case ui::ET_MOUSE_PRESSED: |
| + case ui::ET_MOUSE_DRAGGED: |
| + case ui::ET_MOUSE_RELEASED: |
| + case ui::ET_MOUSE_MOVED: |
| + case ui::ET_MOUSE_ENTERED: |
| + case ui::ET_MOUSE_EXITED: |
| + case ui::ET_KEY_PRESSED: |
| + case ui::ET_KEY_RELEASED: |
| + case ui::ET_MOUSE_CAPTURE_CHANGED: |
| + case ui::ET_DROP_TARGET_EVENT: |
| + case ui::ET_CANCEL_MODE: |
| + case ui::ET_UMA_DATA: |
| + return ui::SourceEventType::OTHER; |
| + |
| + case ui::ET_TOUCH_RELEASED: |
| + case ui::ET_TOUCH_PRESSED: |
| + case ui::ET_TOUCH_MOVED: |
| + case ui::ET_TOUCH_CANCELLED: |
| + return ui::SourceEventType::TOUCH; |
| + |
| + case ui::ET_MOUSEWHEEL: |
| + case ui::ET_POINTER_WHEEL_CHANGED: |
| + case ui::ET_SCROLL: |
| + return ui::SourceEventType::WHEEL; |
| + |
| + default: |
|
sky
2016/09/15 17:56:34
If you have this and we add a new type it'll be mi
sahel
2016/09/15 18:58:07
Done.
|
| + NOTREACHED(); |
| + return ui::SourceEventType::UNKNOWN; |
| + } |
| +} |
| + |
| bool IsX11SendEventTrue(const base::NativeEvent& event) { |
| #if defined(USE_X11) |
| return event && event->xany.send_event; |
| @@ -333,8 +399,10 @@ Event::Event(EventType type, base::TimeTicks time_stamp, int flags) |
| phase_(EP_PREDISPATCH), |
| result_(ER_UNHANDLED), |
| source_device_id_(ED_UNKNOWN_DEVICE) { |
| - if (type_ < ET_LAST) |
| + if (type_ < ET_LAST) { |
| + latency()->set_source_event_type(EventTypeToLatencySourceEventType(type)); |
| name_ = EventTypeName(type_); |
| + } |
| } |
| Event::Event(const base::NativeEvent& native_event, |
| @@ -351,8 +419,10 @@ Event::Event(const base::NativeEvent& native_event, |
| result_(ER_UNHANDLED), |
| source_device_id_(ED_UNKNOWN_DEVICE) { |
| base::TimeDelta delta = EventTimeForNow() - time_stamp_; |
| - if (type_ < ET_LAST) |
| + if (type_ < ET_LAST) { |
| + latency()->set_source_event_type(EventTypeToLatencySourceEventType(type)); |
| name_ = EventTypeName(type_); |
| + } |
| base::HistogramBase::Sample delta_sample = |
| static_cast<base::HistogramBase::Sample>(delta.InMicroseconds()); |
| UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser", delta_sample, 1, 1000000, |
| @@ -403,8 +473,10 @@ void Event::SetType(EventType type) { |
| if (type_ < ET_LAST) |
| name_ = std::string(); |
| type_ = type; |
| - if (type_ < ET_LAST) |
| + if (type_ < ET_LAST) { |
| name_ = EventTypeName(type_); |
| + latency()->set_source_event_type(EventTypeToLatencySourceEventType(type)); |
| + } |
|
sky
2016/09/15 17:56:34
Shouldn't you handle the else case here? What if t
sahel
2016/09/15 18:58:07
The default value is UNKNOWN, and it would take ca
|
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -886,7 +958,14 @@ PointerEvent::PointerEvent(const PointerEvent& pointer_event) |
| : LocatedEvent(pointer_event), |
| pointer_id_(pointer_event.pointer_id()), |
| changed_button_flags_(pointer_event.changed_button_flags()), |
| - details_(pointer_event.pointer_details()) {} |
| + details_(pointer_event.pointer_details()) { |
| + if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) |
| + latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| + else if (pointer_event.type() == ET_POINTER_WHEEL_CHANGED) |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| + else |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| +} |
| PointerEvent::PointerEvent(const MouseEvent& mouse_event) |
| : LocatedEvent(mouse_event), |
| @@ -897,29 +976,35 @@ PointerEvent::PointerEvent(const MouseEvent& mouse_event) |
| switch (mouse_event.type()) { |
| case ET_MOUSE_PRESSED: |
| SetType(ET_POINTER_DOWN); |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| break; |
| case ET_MOUSE_DRAGGED: |
| case ET_MOUSE_MOVED: |
| SetType(ET_POINTER_MOVED); |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| break; |
| case ET_MOUSE_ENTERED: |
| SetType(ET_POINTER_ENTERED); |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| break; |
| case ET_MOUSE_EXITED: |
| SetType(ET_POINTER_EXITED); |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| break; |
| case ET_MOUSE_RELEASED: |
| SetType(ET_POINTER_UP); |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| break; |
| case ET_MOUSEWHEEL: |
| SetType(ET_POINTER_WHEEL_CHANGED); |
| details_ = PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, |
| mouse_event.AsMouseWheelEvent()->offset()); |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| break; |
| case ET_MOUSE_CAPTURE_CHANGED: |
| @@ -957,6 +1042,7 @@ PointerEvent::PointerEvent(const TouchEvent& touch_event) |
| default: |
| NOTREACHED(); |
| } |
| + latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| } |
| PointerEvent::PointerEvent(EventType type, |
| @@ -974,7 +1060,14 @@ PointerEvent::PointerEvent(EventType type, |
| flags), |
| pointer_id_(pointer_id), |
| changed_button_flags_(changed_button_flags), |
| - details_(pointer_details) {} |
| + details_(pointer_details) { |
| + if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) |
| + latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| + else if (type == ET_POINTER_WHEEL_CHANGED) |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| + else |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| +} |
| const int PointerEvent::kMousePointerId = std::numeric_limits<int32_t>::max(); |
| @@ -1097,6 +1190,7 @@ KeyEvent& KeyEvent::operator=(const KeyEvent& rhs) { |
| key_ = rhs.key_; |
| is_char_ = rhs.is_char_; |
| } |
| + latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| return *this; |
| } |
| @@ -1273,6 +1367,10 @@ ScrollEvent::ScrollEvent(const base::NativeEvent& native_event) |
| NOTREACHED() << "Unexpected event type " << type() |
| << " when constructing a ScrollEvent."; |
| } |
| + if (IsScrollEvent()) |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| + else |
| + latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| } |
| ScrollEvent::ScrollEvent(EventType type, |
| @@ -1291,6 +1389,7 @@ ScrollEvent::ScrollEvent(EventType type, |
| y_offset_ordinal_(y_offset_ordinal), |
| finger_count_(finger_count) { |
| CHECK(IsScrollEvent()); |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| } |
| void ScrollEvent::Scale(const float factor) { |
| @@ -1315,7 +1414,14 @@ GestureEvent::GestureEvent(float x, |
| time_stamp, |
| flags | EF_FROM_TOUCH), |
| details_(details), |
| - unique_touch_event_id_(unique_touch_event_id) {} |
| + unique_touch_event_id_(unique_touch_event_id) { |
| + if ((flags | EF_FROM_TOUCH) || |
| + (details.device_type() == ui::GestureDeviceType::DEVICE_TOUCHSCREEN)) { |
| + latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| + } else if (details.device_type() == ui::GestureDeviceType::DEVICE_TOUCHPAD) { |
| + latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| + } |
| +} |
| GestureEvent::~GestureEvent() { |
| } |