[M108 Migration][VD] Avoid pending frame counter becoming negative
[platform/framework/web/chromium-efl.git] / cc / metrics / event_latency_tracker.h
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.
4
5 #ifndef CC_METRICS_EVENT_LATENCY_TRACKER_H_
6 #define CC_METRICS_EVENT_LATENCY_TRACKER_H_
7
8 #include <vector>
9
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"
14
15 namespace cc {
16
17 // Used by `CompositorFrameReporter` to report event latency information back to
18 // `LayerTreeHostImpl` and eventually to UI compositor.
19 class CC_EXPORT EventLatencyTracker {
20  public:
21   struct CC_EXPORT LatencyData {
22     LatencyData(EventMetrics::EventType event_type,
23                 base::TimeDelta total_latency);
24     ~LatencyData();
25
26     LatencyData(const LatencyData&) = delete;
27     LatencyData& operator=(const LatencyData&) = delete;
28
29     LatencyData(LatencyData&&);
30     LatencyData& operator=(LatencyData&&);
31
32     EventMetrics::EventType event_type;
33     base::TimeDelta total_latency;
34
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>
39         input_type;
40   };
41
42   EventLatencyTracker();
43   virtual ~EventLatencyTracker();
44
45   EventLatencyTracker(const EventLatencyTracker&) = delete;
46   EventLatencyTracker& operator=(const EventLatencyTracker&) = delete;
47
48   // Called every time a frame has latency metrics to report for events.
49   virtual void ReportEventLatency(std::vector<LatencyData> latencies) = 0;
50 };
51
52 }  // namespace cc
53
54 #endif  // CC_METRICS_EVENT_LATENCY_TRACKER_H_