Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(477)

Side by Side Diff: chrome/browser/page_load_metrics/user_input_tracker_unittest.cc

Issue 2540183003: Add UserInputTracker, which keeps track of recent user input events. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
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 "chrome/browser/page_load_metrics/user_input_tracker.h"
6
7 #include "base/time/time.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/WebKit/public/platform/WebInputEvent.h"
10
11 namespace {
12
13 // UserInputTracker allows events to be at most 2 seconds old. Thus we use
14 // 2100ms to make sure the age is greater than 2 seconds.
15 const int kTooOldMilliseconds = 2100;
16
17 double ToMonotonicallyIncreasingSeconds(base::TimeTicks t) {
18 return t.ToInternalValue() /
19 static_cast<double>(base::Time::kMicrosecondsPerSecond);
20 }
21
22 class FakeInputEvent : public blink::WebInputEvent {
23 public:
24 FakeInputEvent() : WebInputEvent(sizeof(FakeInputEvent)) {
25 timeStampSeconds = ToMonotonicallyIncreasingSeconds(base::TimeTicks::Now());
26 type = blink::WebInputEvent::Char;
27 }
28
29 base::TimeTicks GetTimeStamp() {
30 return page_load_metrics::UserInputTracker::GetEventTime(*this);
31 }
32 };
33
34 } // namespace
35
36 class UserInputTrackerTest : public testing::Test {};
37
38 TEST_F(UserInputTrackerTest, Basic) {
39 page_load_metrics::UserInputTracker tracker;
40 ASSERT_EQ(base::TimeTicks(),
41 tracker.FindMostRecentUserInputEventBefore(base::TimeTicks()));
42 ASSERT_EQ(base::TimeTicks(),
43 tracker.FindMostRecentUserInputEventBefore(base::TimeTicks::Now()));
44 }
45
46 TEST_F(UserInputTrackerTest, SingleEvent) {
47 page_load_metrics::UserInputTracker tracker;
48 FakeInputEvent e;
49 tracker.OnInputEvent(e);
50
51 ASSERT_EQ(base::TimeTicks(),
52 tracker.FindMostRecentUserInputEventBefore(e.GetTimeStamp()));
53
54 base::TimeTicks after =
55 e.GetTimeStamp() + base::TimeDelta::FromMicroseconds(1);
56
57 ASSERT_EQ(e.GetTimeStamp(),
58 tracker.FindMostRecentUserInputEventBefore(after));
59
60 tracker.ConsumeUserInputEventsUpTo(e.GetTimeStamp());
61
62 ASSERT_EQ(base::TimeTicks(),
63 tracker.FindMostRecentUserInputEventBefore(after));
64 }
65
66 TEST_F(UserInputTrackerTest, MultipleEvents) {
67 page_load_metrics::UserInputTracker tracker;
68 FakeInputEvent e1;
69 FakeInputEvent e2;
70
71 // Make sure that the two events are monotonically increasing, and that both
72 // are in the past.
73 e1.timeStampSeconds = ToMonotonicallyIncreasingSeconds(
74 e2.GetTimeStamp() - base::TimeDelta::FromMicroseconds(1));
75 tracker.OnInputEvent(e1);
76 tracker.OnInputEvent(e2);
77
78 ASSERT_EQ(base::TimeTicks(),
79 tracker.FindMostRecentUserInputEventBefore(e1.GetTimeStamp()));
80 ASSERT_EQ(e1.GetTimeStamp(),
81 tracker.FindMostRecentUserInputEventBefore(e2.GetTimeStamp()));
82
83 base::TimeTicks after =
84 e2.GetTimeStamp() + base::TimeDelta::FromMicroseconds(1);
85 ASSERT_EQ(e2.GetTimeStamp(),
86 tracker.FindMostRecentUserInputEventBefore(after));
87
88 tracker.ConsumeUserInputEventsUpTo(e1.GetTimeStamp());
89 ASSERT_EQ(base::TimeTicks(),
90 tracker.FindMostRecentUserInputEventBefore(e1.GetTimeStamp()));
91 ASSERT_EQ(base::TimeTicks(),
92 tracker.FindMostRecentUserInputEventBefore(e2.GetTimeStamp()));
93 ASSERT_EQ(e2.GetTimeStamp(),
94 tracker.FindMostRecentUserInputEventBefore(after));
95
96 tracker.ConsumeUserInputEventsUpTo(e2.GetTimeStamp());
97 ASSERT_EQ(base::TimeTicks(),
98 tracker.FindMostRecentUserInputEventBefore(e1.GetTimeStamp()));
99 ASSERT_EQ(base::TimeTicks(),
100 tracker.FindMostRecentUserInputEventBefore(e2.GetTimeStamp()));
101 ASSERT_EQ(base::TimeTicks(),
102 tracker.FindMostRecentUserInputEventBefore(after));
103
104 tracker.OnInputEvent(e1);
105 tracker.OnInputEvent(e2);
106 ASSERT_EQ(e2.GetTimeStamp(),
107 tracker.FindMostRecentUserInputEventBefore(after));
108 tracker.ConsumeUserInputEventsUpTo(e2.GetTimeStamp());
109 ASSERT_EQ(base::TimeTicks(),
110 tracker.FindMostRecentUserInputEventBefore(after));
111 }
112
113 TEST_F(UserInputTrackerTest, ExcludeOldEvents) {
114 page_load_metrics::UserInputTracker tracker;
115 FakeInputEvent e1;
116 FakeInputEvent e2;
117 // make sure e1 is too old to be considered.
118 e1.timeStampSeconds = ToMonotonicallyIncreasingSeconds(
119 e2.GetTimeStamp() -
120 base::TimeDelta::FromMilliseconds(kTooOldMilliseconds));
121
122 tracker.OnInputEvent(e1);
123 tracker.OnInputEvent(e2);
124
125 ASSERT_EQ(base::TimeTicks(),
126 tracker.FindMostRecentUserInputEventBefore(
127 e1.GetTimeStamp() + base::TimeDelta::FromMilliseconds(1)));
128 ASSERT_EQ(base::TimeTicks(),
129 tracker.FindMostRecentUserInputEventBefore(
130 e2.GetTimeStamp() +
131 base::TimeDelta::FromMilliseconds(kTooOldMilliseconds)));
132 ASSERT_EQ(e2.GetTimeStamp(),
133 tracker.FindMostRecentUserInputEventBefore(
134 e2.GetTimeStamp() + base::TimeDelta::FromMilliseconds(1)));
135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698