diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/cc/metrics/event_metrics.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/cc/metrics/event_metrics.cc')
-rw-r--r-- | chromium/cc/metrics/event_metrics.cc | 168 |
1 files changed, 100 insertions, 68 deletions
diff --git a/chromium/cc/metrics/event_metrics.cc b/chromium/cc/metrics/event_metrics.cc index 326eaee70a1..951cdfc2ceb 100644 --- a/chromium/cc/metrics/event_metrics.cc +++ b/chromium/cc/metrics/event_metrics.cc @@ -4,98 +4,130 @@ #include "cc/metrics/event_metrics.h" +#include <utility> + #include "base/check.h" #include "base/memory/ptr_util.h" #include "base/notreached.h" #include "base/stl_util.h" namespace cc { +namespace { + +constexpr struct { + EventMetrics::EventType metrics_event_type; + ui::EventType ui_event_type; + const char* name; +} kWhitelistedEvents[] = { +#define EVENT_TYPE(name, ui_type) \ + { EventMetrics::EventType::k##name, ui_type, #name } + EVENT_TYPE(MousePressed, ui::ET_MOUSE_PRESSED), + EVENT_TYPE(MouseReleased, ui::ET_MOUSE_RELEASED), + EVENT_TYPE(MouseWheel, ui::ET_MOUSEWHEEL), + EVENT_TYPE(KeyPressed, ui::ET_KEY_PRESSED), + EVENT_TYPE(KeyReleased, ui::ET_KEY_RELEASED), + EVENT_TYPE(TouchPressed, ui::ET_TOUCH_PRESSED), + EVENT_TYPE(TouchReleased, ui::ET_TOUCH_RELEASED), + EVENT_TYPE(TouchMoved, ui::ET_TOUCH_MOVED), + EVENT_TYPE(GestureScrollBegin, ui::ET_GESTURE_SCROLL_BEGIN), + EVENT_TYPE(GestureScrollUpdate, ui::ET_GESTURE_SCROLL_UPDATE), + EVENT_TYPE(GestureScrollEnd, ui::ET_GESTURE_SCROLL_END), + EVENT_TYPE(GestureDoubleTap, ui::ET_GESTURE_DOUBLE_TAP), + EVENT_TYPE(GestureLongPress, ui::ET_GESTURE_LONG_PRESS), + EVENT_TYPE(GestureLongTap, ui::ET_GESTURE_LONG_TAP), + EVENT_TYPE(GestureShowPress, ui::ET_GESTURE_SHOW_PRESS), + EVENT_TYPE(GestureTap, ui::ET_GESTURE_TAP), + EVENT_TYPE(GestureTapCancel, ui::ET_GESTURE_TAP_CANCEL), + EVENT_TYPE(GestureTapDown, ui::ET_GESTURE_TAP_DOWN), + EVENT_TYPE(GestureTapUnconfirmed, ui::ET_GESTURE_TAP_UNCONFIRMED), + EVENT_TYPE(GestureTwoFingerTap, ui::ET_GESTURE_TWO_FINGER_TAP), +#undef EVENT_TYPE +}; +static_assert(base::size(kWhitelistedEvents) == + static_cast<int>(EventMetrics::EventType::kMaxValue) + 1, + "EventMetrics::EventType has changed."); + +constexpr struct { + EventMetrics::ScrollType metrics_scroll_type; + ui::ScrollInputType ui_scroll_type; + const char* name; +} kScrollTypes[] = { +#define SCROLL_TYPE(name, ui_type) \ + { EventMetrics::ScrollType::k##name, ui_type, #name } + SCROLL_TYPE(Autoscroll, ui::ScrollInputType::kAutoscroll), + SCROLL_TYPE(Scrollbar, ui::ScrollInputType::kScrollbar), + SCROLL_TYPE(Touchscreen, ui::ScrollInputType::kTouchscreen), + SCROLL_TYPE(Wheel, ui::ScrollInputType::kWheel), +#undef SCROLL_TYPE +}; +static_assert(base::size(kScrollTypes) == + static_cast<int>(EventMetrics::ScrollType::kMaxValue) + 1, + "EventMetrics::ScrollType has changed."); + +base::Optional<EventMetrics::EventType> ToWhitelistedEventType( + ui::EventType ui_event_type) { + for (size_t i = 0; i < base::size(kWhitelistedEvents); i++) { + if (ui_event_type == kWhitelistedEvents[i].ui_event_type) { + EventMetrics::EventType metrics_event_type = + static_cast<EventMetrics::EventType>(i); + DCHECK_EQ(metrics_event_type, kWhitelistedEvents[i].metrics_event_type); + return metrics_event_type; + } + } + return base::nullopt; +} + +base::Optional<EventMetrics::ScrollType> ToScrollType( + const base::Optional<ui::ScrollInputType>& scroll_input_type) { + if (!scroll_input_type) + return base::nullopt; + + for (size_t i = 0; i < base::size(kScrollTypes); i++) { + if (*scroll_input_type == kScrollTypes[i].ui_scroll_type) { + EventMetrics::ScrollType metrics_scroll_type = + static_cast<EventMetrics::ScrollType>(i); + DCHECK_EQ(metrics_scroll_type, kScrollTypes[i].metrics_scroll_type); + return metrics_scroll_type; + } + } + NOTREACHED(); + return base::nullopt; +} + +} // namespace std::unique_ptr<EventMetrics> EventMetrics::Create( ui::EventType type, base::TimeTicks time_stamp, base::Optional<ui::ScrollInputType> scroll_input_type) { - switch (type) { - case ui::ET_MOUSE_PRESSED: - case ui::ET_MOUSE_RELEASED: - case ui::ET_MOUSEWHEEL: - case ui::ET_KEY_PRESSED: - case ui::ET_KEY_RELEASED: - case ui::ET_TOUCH_PRESSED: - case ui::ET_TOUCH_RELEASED: - case ui::ET_TOUCH_MOVED: - case ui::ET_GESTURE_SCROLL_BEGIN: - case ui::ET_GESTURE_SCROLL_UPDATE: - case ui::ET_GESTURE_SCROLL_END: - return base::WrapUnique( - new EventMetrics(type, time_stamp, scroll_input_type)); - default: - return nullptr; - } + base::Optional<EventType> whitelisted_type = ToWhitelistedEventType(type); + if (!whitelisted_type) + return nullptr; + return base::WrapUnique(new EventMetrics(*whitelisted_type, time_stamp, + ToScrollType(scroll_input_type))); } -EventMetrics::EventMetrics( - ui::EventType type, - base::TimeTicks time_stamp, - base::Optional<ui::ScrollInputType> scroll_input_type) - : type_(type), - time_stamp_(time_stamp), - scroll_input_type_(scroll_input_type) {} +EventMetrics::EventMetrics(EventType type, + base::TimeTicks time_stamp, + base::Optional<ScrollType> scroll_type) + : type_(type), time_stamp_(time_stamp), scroll_type_(scroll_type) {} EventMetrics::EventMetrics(const EventMetrics&) = default; EventMetrics& EventMetrics::operator=(const EventMetrics&) = default; const char* EventMetrics::GetTypeName() const { - switch (type_) { - case ui::ET_MOUSE_PRESSED: - return "MousePressed"; - case ui::ET_MOUSE_RELEASED: - return "MouseReleased"; - case ui::ET_MOUSEWHEEL: - return "MouseWheel"; - case ui::ET_KEY_PRESSED: - // TODO(crbug/1071645): Currently, all ET_KEY_PRESSED events are reported - // under EventLatency.KeyPressed histogram. This includes both key-down - // and key-char events. Consider reporting them separately. - return "KeyPressed"; - case ui::ET_KEY_RELEASED: - return "KeyReleased"; - case ui::ET_TOUCH_PRESSED: - return "TouchPressed"; - case ui::ET_TOUCH_RELEASED: - return "TouchReleased"; - case ui::ET_TOUCH_MOVED: - return "TouchMoved"; - case ui::ET_GESTURE_SCROLL_BEGIN: - return "GestureScrollBegin"; - case ui::ET_GESTURE_SCROLL_UPDATE: - return "GestureScrollUpdate"; - case ui::ET_GESTURE_SCROLL_END: - return "GestureScrollEnd"; - default: - NOTREACHED(); - return nullptr; - } + return kWhitelistedEvents[static_cast<int>(type_)].name; } const char* EventMetrics::GetScrollTypeName() const { - DCHECK(scroll_input_type_) << "Event is not a scroll event"; - - switch (*scroll_input_type_) { - case ui::ScrollInputType::kTouchscreen: - return "Touchscreen"; - case ui::ScrollInputType::kWheel: - return "Wheel"; - case ui::ScrollInputType::kAutoscroll: - return "Autoscroll"; - case ui::ScrollInputType::kScrollbar: - return "Scrollbar"; - } + DCHECK(scroll_type_) << "Event is not a scroll event."; + + return kScrollTypes[static_cast<int>(*scroll_type_)].name; } bool EventMetrics::operator==(const EventMetrics& other) const { - return std::tie(type_, time_stamp_, scroll_input_type_) == - std::tie(other.type_, other.time_stamp_, other.scroll_input_type_); + return std::tie(type_, time_stamp_, scroll_type_) == + std::tie(other.type_, other.time_stamp_, other.scroll_type_); } // EventMetricsSet |