1 // 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.
5 #include "gin/time_clamper.h"
7 #include "base/time/time.h"
8 #include "build/build_config.h"
9 #include "testing/gtest/include/gtest/gtest.h"
13 TEST(TimeClamperTest, CurrentClockTimeMilliseconds) {
14 TimeClamper clamper(1);
15 EXPECT_EQ(0u, clamper.ClampToMillis(base::Time::UnixEpoch()));
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));
21 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
22 base::Microseconds(TimeClamper::kResolutionMicros - 1);
23 EXPECT_EQ(0u, clamper.ClampToMillis(time));
25 time = base::Time::UnixEpoch() + base::Milliseconds(1);
26 EXPECT_EQ(1u, clamper.ClampToMillis(time));
29 #if !BUILDFLAG(IS_ANDROID)
30 TEST(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));
39 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
40 base::Microseconds(TimeClamper::kResolutionMicros) +
41 base::Microseconds(1);
42 EXPECT_EQ(0u, clamper.ClampToMillis(time));
44 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
45 base::Microseconds(TimeClamper::kResolutionMicros) +
46 base::Microseconds(2);
47 EXPECT_EQ(1u, clamper.ClampToMillis(time));
50 TEST(TimeClamperTest, CurrentClockTimeMillisecondsThresholdNegative) {
51 // This test assumes a time clamp of 5. If the clamp changes the time values
52 // will need to 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));
60 time = base::Time::UnixEpoch() + base::Milliseconds(-1) +
61 base::Microseconds(TimeClamper::kResolutionMicros) -
62 base::Microseconds(1);
63 EXPECT_EQ(0u, clamper.ClampToMillis(time));
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));
71 TEST(TimeClamperTest, CurrentClockTimeMillisecondsHighResolution) {
72 TimeClamper clamper(1);
73 EXPECT_EQ(0, clamper.ClampToMillisHighResolution(base::Time::UnixEpoch()));
75 base::Time time = base::Time::UnixEpoch() + base::Microseconds(1);
76 EXPECT_EQ(0, clamper.ClampToMillisHighResolution(time));
78 time = base::Time::UnixEpoch() +
79 base::Microseconds(TimeClamper::kResolutionMicros);
80 EXPECT_EQ(0.005, clamper.ClampToMillisHighResolution(time));
82 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
83 base::Microseconds(TimeClamper::kResolutionMicros - 1);
84 EXPECT_EQ(0.995, clamper.ClampToMillisHighResolution(time));
86 time = base::Time::UnixEpoch() + base::Milliseconds(1) -
87 base::Microseconds(TimeClamper::kResolutionMicros - 3);
88 EXPECT_EQ(1, clamper.ClampToMillisHighResolution(time));
90 time = base::Time::UnixEpoch() + base::Milliseconds(1);
91 EXPECT_EQ(1, clamper.ClampToMillisHighResolution(time));
94 base::Time::UnixEpoch() + base::Milliseconds(1) + base::Microseconds(1);
95 EXPECT_EQ(1.005, clamper.ClampToMillisHighResolution(time));