// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_METRICS_EVENT_METRICS_H_ #define CC_METRICS_EVENT_METRICS_H_ #include #include #include "base/optional.h" #include "base/time/time.h" #include "cc/cc_export.h" #include "ui/events/types/event_type.h" #include "ui/events/types/scroll_input_type.h" namespace cc { // Data about an event used by CompositorFrameReporter in generating event // latency metrics. class CC_EXPORT EventMetrics { public: // Whitelisted event types. This list should be in the same order as values of // EventLatencyEventType enum from enums.xml file. enum class EventType { kMousePressed, kMouseReleased, kMouseWheel, // 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. kKeyPressed, kKeyReleased, kTouchPressed, kTouchReleased, kTouchMoved, kGestureScrollBegin, kGestureScrollUpdate, kGestureScrollEnd, kGestureDoubleTap, kGestureLongPress, kGestureLongTap, kGestureShowPress, kGestureTap, kGestureTapCancel, kGestureTapDown, kGestureTapUnconfirmed, kGestureTwoFingerTap, kMaxValue = kGestureTwoFingerTap, }; // Type of scroll events. This list should be in the same order as values of // EventLatencyScrollInputType enum from enums.xml file. enum class ScrollType { kAutoscroll, kScrollbar, kTouchscreen, kWheel, kMaxValue = kWheel, }; // Returns a new instance if |type| is a whitelisted event type. Otherwise, // returns nullptr. static std::unique_ptr Create( ui::EventType type, base::TimeTicks time_stamp, base::Optional scroll_input_type); EventMetrics(const EventMetrics&); EventMetrics& operator=(const EventMetrics&); EventType type() const { return type_; } // Returns a string representing event type. const char* GetTypeName() const; base::TimeTicks time_stamp() const { return time_stamp_; } const base::Optional& scroll_type() const { return scroll_type_; } // Returns a string representing input type for a scroll event. Should only be // called for scroll events. const char* GetScrollTypeName() const; // Used in tests to check expectations on EventMetrics objects. bool operator==(const EventMetrics& other) const; private: EventMetrics(EventType type, base::TimeTicks time_stamp, base::Optional scroll_type); EventType type_; base::TimeTicks time_stamp_; // Only available for scroll events and represents the type of input device // for the event. base::Optional scroll_type_; }; // Struct storing event metrics from both main and impl threads. struct CC_EXPORT EventMetricsSet { EventMetricsSet(); ~EventMetricsSet(); EventMetricsSet(std::vector main_thread_event_metrics, std::vector impl_thread_event_metrics); EventMetricsSet(EventMetricsSet&&); EventMetricsSet& operator=(EventMetricsSet&&); EventMetricsSet(const EventMetricsSet&) = delete; EventMetricsSet& operator=(const EventMetricsSet&) = delete; std::vector main_event_metrics; std::vector impl_event_metrics; }; } // namespace cc #endif // CC_METRICS_EVENT_METRICS_H_