xref: /aosp_15_r20/external/webrtc/api/neteq/tick_timer_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #include "api/neteq/tick_timer.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include <memory>
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker #include "test/gmock.h"
16*d9f75844SAndroid Build Coastguard Worker #include "test/gtest.h"
17*d9f75844SAndroid Build Coastguard Worker 
18*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
19*d9f75844SAndroid Build Coastguard Worker 
20*d9f75844SAndroid Build Coastguard Worker // Verify that the default value for ms_per_tick is 10.
TEST(TickTimer,DefaultMsPerTick)21*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, DefaultMsPerTick) {
22*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
23*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(10, tt.ms_per_tick());
24*d9f75844SAndroid Build Coastguard Worker }
25*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,CustomMsPerTick)26*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, CustomMsPerTick) {
27*d9f75844SAndroid Build Coastguard Worker   TickTimer tt(17);
28*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(17, tt.ms_per_tick());
29*d9f75844SAndroid Build Coastguard Worker }
30*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,Increment)31*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, Increment) {
32*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
33*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, tt.ticks());
34*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
35*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1u, tt.ticks());
36*d9f75844SAndroid Build Coastguard Worker 
37*d9f75844SAndroid Build Coastguard Worker   for (int i = 0; i < 17; ++i) {
38*d9f75844SAndroid Build Coastguard Worker     tt.Increment();
39*d9f75844SAndroid Build Coastguard Worker   }
40*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(18u, tt.ticks());
41*d9f75844SAndroid Build Coastguard Worker 
42*d9f75844SAndroid Build Coastguard Worker   tt.Increment(17);
43*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(35u, tt.ticks());
44*d9f75844SAndroid Build Coastguard Worker }
45*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,WrapAround)46*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, WrapAround) {
47*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
48*d9f75844SAndroid Build Coastguard Worker   tt.Increment(UINT64_MAX);
49*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(UINT64_MAX, tt.ticks());
50*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
51*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, tt.ticks());
52*d9f75844SAndroid Build Coastguard Worker }
53*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,Stopwatch)54*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, Stopwatch) {
55*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
56*d9f75844SAndroid Build Coastguard Worker   // Increment it a "random" number of steps.
57*d9f75844SAndroid Build Coastguard Worker   tt.Increment(17);
58*d9f75844SAndroid Build Coastguard Worker 
59*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<TickTimer::Stopwatch> sw = tt.GetNewStopwatch();
60*d9f75844SAndroid Build Coastguard Worker   ASSERT_TRUE(sw);
61*d9f75844SAndroid Build Coastguard Worker 
62*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, sw->ElapsedTicks());  // Starts at zero.
63*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, sw->ElapsedMs());
64*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
65*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1u, sw->ElapsedTicks());  // Increases with the TickTimer.
66*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(10u, sw->ElapsedMs());
67*d9f75844SAndroid Build Coastguard Worker }
68*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,StopwatchWrapAround)69*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, StopwatchWrapAround) {
70*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
71*d9f75844SAndroid Build Coastguard Worker   tt.Increment(UINT64_MAX);
72*d9f75844SAndroid Build Coastguard Worker 
73*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<TickTimer::Stopwatch> sw = tt.GetNewStopwatch();
74*d9f75844SAndroid Build Coastguard Worker   ASSERT_TRUE(sw);
75*d9f75844SAndroid Build Coastguard Worker 
76*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
77*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, tt.ticks());
78*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1u, sw->ElapsedTicks());
79*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(10u, sw->ElapsedMs());
80*d9f75844SAndroid Build Coastguard Worker 
81*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
82*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1u, tt.ticks());
83*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(2u, sw->ElapsedTicks());
84*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(20u, sw->ElapsedMs());
85*d9f75844SAndroid Build Coastguard Worker }
86*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,StopwatchMsOverflow)87*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, StopwatchMsOverflow) {
88*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
89*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<TickTimer::Stopwatch> sw = tt.GetNewStopwatch();
90*d9f75844SAndroid Build Coastguard Worker   ASSERT_TRUE(sw);
91*d9f75844SAndroid Build Coastguard Worker 
92*d9f75844SAndroid Build Coastguard Worker   tt.Increment(UINT64_MAX / 10);
93*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(UINT64_MAX, sw->ElapsedMs());
94*d9f75844SAndroid Build Coastguard Worker 
95*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
96*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(UINT64_MAX, sw->ElapsedMs());
97*d9f75844SAndroid Build Coastguard Worker 
98*d9f75844SAndroid Build Coastguard Worker   tt.Increment(UINT64_MAX - tt.ticks());
99*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(UINT64_MAX, tt.ticks());
100*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(UINT64_MAX, sw->ElapsedMs());
101*d9f75844SAndroid Build Coastguard Worker }
102*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,StopwatchWithCustomTicktime)103*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, StopwatchWithCustomTicktime) {
104*d9f75844SAndroid Build Coastguard Worker   const int kMsPerTick = 17;
105*d9f75844SAndroid Build Coastguard Worker   TickTimer tt(kMsPerTick);
106*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<TickTimer::Stopwatch> sw = tt.GetNewStopwatch();
107*d9f75844SAndroid Build Coastguard Worker   ASSERT_TRUE(sw);
108*d9f75844SAndroid Build Coastguard Worker 
109*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0u, sw->ElapsedMs());
110*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
111*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(static_cast<uint64_t>(kMsPerTick), sw->ElapsedMs());
112*d9f75844SAndroid Build Coastguard Worker }
113*d9f75844SAndroid Build Coastguard Worker 
TEST(TickTimer,Countdown)114*d9f75844SAndroid Build Coastguard Worker TEST(TickTimer, Countdown) {
115*d9f75844SAndroid Build Coastguard Worker   TickTimer tt;
116*d9f75844SAndroid Build Coastguard Worker   // Increment it a "random" number of steps.
117*d9f75844SAndroid Build Coastguard Worker   tt.Increment(4711);
118*d9f75844SAndroid Build Coastguard Worker 
119*d9f75844SAndroid Build Coastguard Worker   std::unique_ptr<TickTimer::Countdown> cd = tt.GetNewCountdown(17);
120*d9f75844SAndroid Build Coastguard Worker   ASSERT_TRUE(cd);
121*d9f75844SAndroid Build Coastguard Worker 
122*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(cd->Finished());
123*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
124*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(cd->Finished());
125*d9f75844SAndroid Build Coastguard Worker 
126*d9f75844SAndroid Build Coastguard Worker   tt.Increment(16);  // Total increment is now 17.
127*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(cd->Finished());
128*d9f75844SAndroid Build Coastguard Worker 
129*d9f75844SAndroid Build Coastguard Worker   // Further increments do not change the state.
130*d9f75844SAndroid Build Coastguard Worker   tt.Increment();
131*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(cd->Finished());
132*d9f75844SAndroid Build Coastguard Worker   tt.Increment(1234);
133*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(cd->Finished());
134*d9f75844SAndroid Build Coastguard Worker }
135*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
136