blob: 0b560bff2eff186ff319be9d66083eff853ed2e4 [file] [log] [blame]
Scott Violet787d1852023-02-18 15:29:321// Copyright 2023 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 "gin/time_clamper.h"
6
7#include "base/time/time.h"
8#include "build/build_config.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11namespace gin {
12
13TEST(TimeClamperTest, CurrentClockTimeMilliseconds) {
14 TimeClamper clamper(1);
15 EXPECT_EQ(0u, clamper.ClampToMillis(base::Time::UnixEpoch()));
16
17 // 1 us after unix epoch should round to 0.
18 base::Time time = base::Time::UnixEpoch() + base::Microseconds(1);
19 EXPECT_EQ(0u, clamper.ClampToMillis(time));
20
21 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
22 base::Microseconds(TimeClamper::kResolutionMicros - 1);
23 EXPECT_EQ(0u, clamper.ClampToMillis(time));
24
25 time = base::Time::UnixEpoch() + base::Milliseconds(1);
26 EXPECT_EQ(1u, clamper.ClampToMillis(time));
27}
28
29#if !BUILDFLAG(IS_ANDROID)
30TEST(TimeClamperTest, CurrentClockTimeMillisecondsThreshold) {
31 // This test assumes a time clamp of 5. If the clamp changes the time values
32 // will need to be adjusted.
33 ASSERT_EQ(5, TimeClamper::kResolutionMicros);
34 TimeClamper clamper(1);
35 base::Time time = base::Time::UnixEpoch() + base::Milliseconds(1) -
36 base::Microseconds(TimeClamper::kResolutionMicros);
37 EXPECT_EQ(0u, clamper.ClampToMillis(time));
38
39 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
40 base::Microseconds(TimeClamper::kResolutionMicros) +
41 base::Microseconds(1);
42 EXPECT_EQ(0u, clamper.ClampToMillis(time));
43
44 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
45 base::Microseconds(TimeClamper::kResolutionMicros) +
46 base::Microseconds(2);
47 EXPECT_EQ(1u, clamper.ClampToMillis(time));
48}
49
50TEST(TimeClamperTest, CurrentClockTimeMillisecondsThresholdNegative) {
51 // This test assumes a time clamp of 5. If the clamp changes the time values
52 // will need to be adjusted.
53 // be adjusted.
54 ASSERT_EQ(5, TimeClamper::kResolutionMicros);
55 TimeClamper clamper(1);
56 base::Time time = base::Time::UnixEpoch() + base::Milliseconds(-1) +
57 base::Microseconds(TimeClamper::kResolutionMicros);
58 EXPECT_EQ(0u, clamper.ClampToMillis(time));
59
60 time = base::Time::UnixEpoch() + base::Milliseconds(-1) +
61 base::Microseconds(TimeClamper::kResolutionMicros) -
62 base::Microseconds(1);
63 EXPECT_EQ(0u, clamper.ClampToMillis(time));
64
65 time = base::Time::UnixEpoch() + base::Milliseconds(-1) +
66 base::Microseconds(TimeClamper::kResolutionMicros) -
67 base::Microseconds(2);
68 EXPECT_EQ(static_cast<int64_t>(-1), clamper.ClampToMillis(time));
69}
70
71TEST(TimeClamperTest, CurrentClockTimeMillisecondsHighResolution) {
72 TimeClamper clamper(1);
73 EXPECT_EQ(0, clamper.ClampToMillisHighResolution(base::Time::UnixEpoch()));
74
75 base::Time time = base::Time::UnixEpoch() + base::Microseconds(1);
76 EXPECT_EQ(0, clamper.ClampToMillisHighResolution(time));
77
78 time = base::Time::UnixEpoch() +
79 base::Microseconds(TimeClamper::kResolutionMicros);
80 EXPECT_EQ(0.005, clamper.ClampToMillisHighResolution(time));
81
82 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
83 base::Microseconds(TimeClamper::kResolutionMicros - 1);
84 EXPECT_EQ(0.995, clamper.ClampToMillisHighResolution(time));
85
86 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
87 base::Microseconds(TimeClamper::kResolutionMicros - 3);
88 EXPECT_EQ(1, clamper.ClampToMillisHighResolution(time));
89
90 time = base::Time::UnixEpoch() + base::Milliseconds(1);
91 EXPECT_EQ(1, clamper.ClampToMillisHighResolution(time));
92
93 time =
94 base::Time::UnixEpoch() + base::Milliseconds(1) + base::Microseconds(1);
95 EXPECT_EQ(1.005, clamper.ClampToMillisHighResolution(time));
96}
97#endif
98
99} // namespace gin