1 // Copyright 2022 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_METRICS_EVENT_LATENCY_TRACKER_H_
6 #define CC_METRICS_EVENT_LATENCY_TRACKER_H_
10 #include "base/time/time.h"
11 #include "cc/cc_export.h"
12 #include "cc/metrics/event_metrics.h"
13 #include "third_party/abseil-cpp/absl/types/variant.h"
17 // Used by `CompositorFrameReporter` to report event latency information back to
18 // `LayerTreeHostImpl` and eventually to UI compositor.
19 class CC_EXPORT EventLatencyTracker {
21 struct CC_EXPORT LatencyData {
22 LatencyData(EventMetrics::EventType event_type,
23 base::TimeDelta total_latency);
26 LatencyData(const LatencyData&) = delete;
27 LatencyData& operator=(const LatencyData&) = delete;
29 LatencyData(LatencyData&&);
30 LatencyData& operator=(LatencyData&&);
32 EventMetrics::EventType event_type;
33 base::TimeDelta total_latency;
35 // Type of the input device if the event is a scroll or a pinch event.
36 absl::variant<absl::monostate,
37 ScrollEventMetrics::ScrollType,
38 PinchEventMetrics::PinchType>
42 EventLatencyTracker();
43 virtual ~EventLatencyTracker();
45 EventLatencyTracker(const EventLatencyTracker&) = delete;
46 EventLatencyTracker& operator=(const EventLatencyTracker&) = delete;
48 // Called every time a frame has latency metrics to report for events.
49 virtual void ReportEventLatency(std::vector<LatencyData> latencies) = 0;
54 #endif // CC_METRICS_EVENT_LATENCY_TRACKER_H_