Upload upstream chromium 108.0.5359.1
[platform/framework/web/chromium-efl.git] / cc / metrics / event_metrics_unittest.cc
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 #include "cc/metrics/event_metrics.h"
6
7 #include "base/test/simple_test_tick_clock.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace cc {
11 namespace {
12 class EventMetricsTest : public testing::Test {
13  private:
14   base::SimpleTestTickClock test_tick_clock_;
15
16  protected:
17   base::TimeTicks AdvanceNowByMs(int advance_ms) {
18     test_tick_clock_.Advance(base::Microseconds(advance_ms));
19     return test_tick_clock_.NowTicks();
20   }
21 };
22
23 TEST_F(EventMetricsTest, ScrollBeginCreateWithNullBeginRwhTime) {
24   // Arrange
25   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
26   base::TimeTicks arrived_in_browser_main_timestamp;
27   base::TimeTicks now = base::TimeTicks::Now();
28
29   // Act
30   std::unique_ptr<ScrollEventMetrics> scroll_event_metric =
31       ScrollEventMetrics::Create(
32           ui::ET_GESTURE_SCROLL_BEGIN, ui::ScrollInputType::kTouchscreen,
33           /*is_inertial=*/false, event_time, arrived_in_browser_main_timestamp);
34
35   // Assert
36   EXPECT_EQ(event_time, scroll_event_metric->GetDispatchStageTimestamp(
37                             EventMetrics::DispatchStage::kGenerated));
38   EXPECT_LE(now,
39             scroll_event_metric->GetDispatchStageTimestamp(
40                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
41   // not set
42   EXPECT_TRUE(scroll_event_metric
43                   ->GetDispatchStageTimestamp(
44                       EventMetrics::DispatchStage::kArrivedInBrowserMain)
45                   .is_null());
46   EXPECT_TRUE(scroll_event_metric
47                   ->GetDispatchStageTimestamp(
48                       EventMetrics::DispatchStage::kRendererCompositorStarted)
49                   .is_null());
50   EXPECT_TRUE(scroll_event_metric
51                   ->GetDispatchStageTimestamp(
52                       EventMetrics::DispatchStage::kRendererCompositorFinished)
53                   .is_null());
54   EXPECT_TRUE(scroll_event_metric
55                   ->GetDispatchStageTimestamp(
56                       EventMetrics::DispatchStage::kRendererMainStarted)
57                   .is_null());
58   EXPECT_TRUE(scroll_event_metric
59                   ->GetDispatchStageTimestamp(
60                       EventMetrics::DispatchStage::kRendererMainFinished)
61                   .is_null());
62 }
63
64 TEST_F(EventMetricsTest, ScrollBeginCreate) {
65   // Arrange
66   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
67   base::TimeTicks arrived_in_browser_main_timestamp =
68       base::TimeTicks::Now() - base::Microseconds(50);
69   base::TimeTicks now = base::TimeTicks::Now();
70
71   // Act
72   std::unique_ptr<ScrollEventMetrics> scroll_event_metric =
73       ScrollEventMetrics::Create(
74           ui::ET_GESTURE_SCROLL_BEGIN, ui::ScrollInputType::kTouchscreen,
75           /*is_inertial=*/false, event_time, arrived_in_browser_main_timestamp);
76
77   // Assert
78   EXPECT_EQ(event_time, scroll_event_metric->GetDispatchStageTimestamp(
79                             EventMetrics::DispatchStage::kGenerated));
80   EXPECT_EQ(arrived_in_browser_main_timestamp,
81             scroll_event_metric->GetDispatchStageTimestamp(
82                 EventMetrics::DispatchStage::kArrivedInBrowserMain));
83   EXPECT_LE(now,
84             scroll_event_metric->GetDispatchStageTimestamp(
85                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
86   // not set
87   EXPECT_TRUE(scroll_event_metric
88                   ->GetDispatchStageTimestamp(
89                       EventMetrics::DispatchStage::kRendererCompositorStarted)
90                   .is_null());
91   EXPECT_TRUE(scroll_event_metric
92                   ->GetDispatchStageTimestamp(
93                       EventMetrics::DispatchStage::kRendererCompositorFinished)
94                   .is_null());
95   EXPECT_TRUE(scroll_event_metric
96                   ->GetDispatchStageTimestamp(
97                       EventMetrics::DispatchStage::kRendererMainStarted)
98                   .is_null());
99   EXPECT_TRUE(scroll_event_metric
100                   ->GetDispatchStageTimestamp(
101                       EventMetrics::DispatchStage::kRendererMainFinished)
102                   .is_null());
103 }
104
105 TEST_F(EventMetricsTest, ScrollBeginCreateFromExisting) {
106   // Arrange
107   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
108   base::TimeTicks arrived_in_browser_main_timestamp =
109       base::TimeTicks::Now() - base::Microseconds(50);
110   std::unique_ptr<ScrollEventMetrics> scroll_metric =
111       ScrollEventMetrics::Create(
112           ui::ET_GESTURE_SCROLL_BEGIN, ui::ScrollInputType::kTouchscreen,
113           /*is_inertial=*/false, event_time, arrived_in_browser_main_timestamp);
114
115   // Act
116   std::unique_ptr<ScrollEventMetrics> copy_scroll_metric =
117       ScrollEventMetrics::CreateFromExisting(
118           ui::ET_GESTURE_SCROLL_BEGIN, ui::ScrollInputType::kTouchscreen,
119           /*is_inertial=*/false,
120           EventMetrics::DispatchStage::kRendererMainFinished,
121           scroll_metric.get());
122
123   // Assert
124   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
125                 EventMetrics::DispatchStage::kGenerated),
126             copy_scroll_metric->GetDispatchStageTimestamp(
127                 EventMetrics::DispatchStage::kGenerated));
128   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
129                 EventMetrics::DispatchStage::kArrivedInBrowserMain),
130             copy_scroll_metric->GetDispatchStageTimestamp(
131                 EventMetrics::DispatchStage::kArrivedInBrowserMain));
132
133   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
134                 EventMetrics::DispatchStage::kArrivedInRendererCompositor),
135             copy_scroll_metric->GetDispatchStageTimestamp(
136                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
137
138   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
139                 EventMetrics::DispatchStage::kRendererCompositorStarted),
140             copy_scroll_metric->GetDispatchStageTimestamp(
141                 EventMetrics::DispatchStage::kRendererCompositorStarted));
142
143   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
144                 EventMetrics::DispatchStage::kRendererCompositorFinished),
145             copy_scroll_metric->GetDispatchStageTimestamp(
146                 EventMetrics::DispatchStage::kRendererCompositorFinished));
147
148   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
149                 EventMetrics::DispatchStage::kRendererMainStarted),
150             copy_scroll_metric->GetDispatchStageTimestamp(
151                 EventMetrics::DispatchStage::kRendererMainStarted));
152
153   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
154                 EventMetrics::DispatchStage::kRendererMainFinished),
155             copy_scroll_metric->GetDispatchStageTimestamp(
156                 EventMetrics::DispatchStage::kRendererMainFinished));
157 }
158
159 TEST_F(EventMetricsTest, ScrollUpdateCreateWithNullBeginRwhTime) {
160   // Arrange
161   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
162   base::TimeTicks arrived_in_browser_main_timestamp;
163   base::TimeTicks now = base::TimeTicks::Now();
164
165   // Act
166   std::unique_ptr<ScrollUpdateEventMetrics> scroll_event_metric =
167       ScrollUpdateEventMetrics::Create(
168           ui::ET_GESTURE_SCROLL_UPDATE, ui::ScrollInputType::kTouchscreen,
169           /*is_inertial=*/false,
170           ScrollUpdateEventMetrics::ScrollUpdateType::kContinued, /*delta=*/0.4,
171           event_time, arrived_in_browser_main_timestamp);
172
173   // Assert
174   EXPECT_EQ(event_time, scroll_event_metric->GetDispatchStageTimestamp(
175                             EventMetrics::DispatchStage::kGenerated));
176   EXPECT_LE(now,
177             scroll_event_metric->GetDispatchStageTimestamp(
178                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
179   // not set
180   EXPECT_TRUE(scroll_event_metric
181                   ->GetDispatchStageTimestamp(
182                       EventMetrics::DispatchStage::kArrivedInBrowserMain)
183                   .is_null());
184   EXPECT_TRUE(scroll_event_metric
185                   ->GetDispatchStageTimestamp(
186                       EventMetrics::DispatchStage::kRendererCompositorStarted)
187                   .is_null());
188   EXPECT_TRUE(scroll_event_metric
189                   ->GetDispatchStageTimestamp(
190                       EventMetrics::DispatchStage::kRendererCompositorFinished)
191                   .is_null());
192   EXPECT_TRUE(scroll_event_metric
193                   ->GetDispatchStageTimestamp(
194                       EventMetrics::DispatchStage::kRendererMainStarted)
195                   .is_null());
196   EXPECT_TRUE(scroll_event_metric
197                   ->GetDispatchStageTimestamp(
198                       EventMetrics::DispatchStage::kRendererMainFinished)
199                   .is_null());
200 }
201
202 TEST_F(EventMetricsTest, ScrollUpdateCreate) {
203   // Arrange
204   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
205   base::TimeTicks arrived_in_browser_main_timestamp =
206       base::TimeTicks::Now() - base::Microseconds(50);
207   base::TimeTicks now = base::TimeTicks::Now();
208
209   // Act
210   std::unique_ptr<ScrollUpdateEventMetrics> scroll_event_metric =
211       ScrollUpdateEventMetrics::Create(
212           ui::ET_GESTURE_SCROLL_UPDATE, ui::ScrollInputType::kTouchscreen,
213           /*is_inertial=*/false,
214           ScrollUpdateEventMetrics::ScrollUpdateType::kContinued, /*delta=*/0.4,
215           event_time, arrived_in_browser_main_timestamp);
216
217   // Assert
218   EXPECT_EQ(event_time, scroll_event_metric->GetDispatchStageTimestamp(
219                             EventMetrics::DispatchStage::kGenerated));
220   EXPECT_EQ(arrived_in_browser_main_timestamp,
221             scroll_event_metric->GetDispatchStageTimestamp(
222                 EventMetrics::DispatchStage::kArrivedInBrowserMain));
223   EXPECT_LE(now,
224             scroll_event_metric->GetDispatchStageTimestamp(
225                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
226   // not set
227   EXPECT_TRUE(scroll_event_metric
228                   ->GetDispatchStageTimestamp(
229                       EventMetrics::DispatchStage::kRendererCompositorStarted)
230                   .is_null());
231   EXPECT_TRUE(scroll_event_metric
232                   ->GetDispatchStageTimestamp(
233                       EventMetrics::DispatchStage::kRendererCompositorFinished)
234                   .is_null());
235   EXPECT_TRUE(scroll_event_metric
236                   ->GetDispatchStageTimestamp(
237                       EventMetrics::DispatchStage::kRendererMainStarted)
238                   .is_null());
239   EXPECT_TRUE(scroll_event_metric
240                   ->GetDispatchStageTimestamp(
241                       EventMetrics::DispatchStage::kRendererMainFinished)
242                   .is_null());
243 }
244
245 TEST_F(EventMetricsTest, ScrollUpdateCreateFromExisting) {
246   // Arrange
247   base::TimeTicks event_time = base::TimeTicks::Now() - base::Microseconds(100);
248   base::TimeTicks arrived_in_browser_main_timestamp =
249       base::TimeTicks::Now() - base::Microseconds(50);
250   std::unique_ptr<ScrollUpdateEventMetrics> scroll_metric =
251       ScrollUpdateEventMetrics::Create(
252           ui::ET_GESTURE_SCROLL_UPDATE, ui::ScrollInputType::kTouchscreen,
253           /*is_inertial=*/false,
254           ScrollUpdateEventMetrics::ScrollUpdateType::kContinued, /*delta=*/0.4,
255           event_time, arrived_in_browser_main_timestamp);
256
257   // Act
258   std::unique_ptr<ScrollUpdateEventMetrics> copy_scroll_metric =
259       ScrollUpdateEventMetrics::CreateFromExisting(
260           ui::ET_GESTURE_SCROLL_UPDATE, ui::ScrollInputType::kTouchscreen,
261           /*is_inertial=*/false,
262           ScrollUpdateEventMetrics::ScrollUpdateType::kContinued, /*delta=*/0.4,
263           EventMetrics::DispatchStage::kRendererMainFinished,
264           scroll_metric.get());
265
266   // Assert
267   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
268                 EventMetrics::DispatchStage::kGenerated),
269             copy_scroll_metric->GetDispatchStageTimestamp(
270                 EventMetrics::DispatchStage::kGenerated));
271   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
272                 EventMetrics::DispatchStage::kArrivedInBrowserMain),
273             copy_scroll_metric->GetDispatchStageTimestamp(
274                 EventMetrics::DispatchStage::kArrivedInBrowserMain));
275
276   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
277                 EventMetrics::DispatchStage::kArrivedInRendererCompositor),
278             copy_scroll_metric->GetDispatchStageTimestamp(
279                 EventMetrics::DispatchStage::kArrivedInRendererCompositor));
280
281   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
282                 EventMetrics::DispatchStage::kRendererCompositorStarted),
283             copy_scroll_metric->GetDispatchStageTimestamp(
284                 EventMetrics::DispatchStage::kRendererCompositorStarted));
285
286   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
287                 EventMetrics::DispatchStage::kRendererCompositorFinished),
288             copy_scroll_metric->GetDispatchStageTimestamp(
289                 EventMetrics::DispatchStage::kRendererCompositorFinished));
290
291   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
292                 EventMetrics::DispatchStage::kRendererMainStarted),
293             copy_scroll_metric->GetDispatchStageTimestamp(
294                 EventMetrics::DispatchStage::kRendererMainStarted));
295
296   EXPECT_EQ(scroll_metric->GetDispatchStageTimestamp(
297                 EventMetrics::DispatchStage::kRendererMainFinished),
298             copy_scroll_metric->GetDispatchStageTimestamp(
299                 EventMetrics::DispatchStage::kRendererMainFinished));
300 }
301
302 }  // namespace
303 }  // namespace cc