forked from TGX-Android/webrtc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquality_limitation_reason_tracker_unittest.cc
115 lines (101 loc) · 4.53 KB
/
quality_limitation_reason_tracker_unittest.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
* Copyright 2019 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "video/quality_limitation_reason_tracker.h"
#include "common_video/include/quality_limitation_reason.h"
#include "system_wrappers/include/clock.h"
#include "test/gtest.h"
namespace webrtc {
class QualityLimitationReasonTrackerTest : public ::testing::Test {
public:
QualityLimitationReasonTrackerTest()
: fake_clock_(1234), tracker_(&fake_clock_) {}
protected:
SimulatedClock fake_clock_;
QualityLimitationReasonTracker tracker_;
};
TEST_F(QualityLimitationReasonTrackerTest, DefaultValues) {
EXPECT_EQ(QualityLimitationReason::kNone, tracker_.current_reason());
auto durations_ms = tracker_.DurationsMs();
EXPECT_EQ(4u, durations_ms.size());
EXPECT_EQ(0, durations_ms.find(QualityLimitationReason::kNone)->second);
EXPECT_EQ(0, durations_ms.find(QualityLimitationReason::kCpu)->second);
EXPECT_EQ(0, durations_ms.find(QualityLimitationReason::kBandwidth)->second);
EXPECT_EQ(0, durations_ms.find(QualityLimitationReason::kOther)->second);
}
TEST_F(QualityLimitationReasonTrackerTest, NoneDurationIncreasesByDefault) {
int64_t initial_duration_ms =
tracker_.DurationsMs()[QualityLimitationReason::kNone];
fake_clock_.AdvanceTimeMilliseconds(9999);
EXPECT_EQ(initial_duration_ms + 9999,
tracker_.DurationsMs()[QualityLimitationReason::kNone]);
}
TEST_F(QualityLimitationReasonTrackerTest,
RememberDurationAfterSwitchingReason) {
tracker_.SetReason(QualityLimitationReason::kCpu);
int64_t initial_duration_ms =
tracker_.DurationsMs()[QualityLimitationReason::kCpu];
fake_clock_.AdvanceTimeMilliseconds(50);
tracker_.SetReason(QualityLimitationReason::kOther);
fake_clock_.AdvanceTimeMilliseconds(50);
EXPECT_EQ(initial_duration_ms + 50,
tracker_.DurationsMs()[QualityLimitationReason::kCpu]);
}
class QualityLimitationReasonTrackerTestWithParamReason
: public QualityLimitationReasonTrackerTest,
public ::testing::WithParamInterface<QualityLimitationReason> {
public:
QualityLimitationReasonTrackerTestWithParamReason()
: reason_(GetParam()),
different_reason_(reason_ != QualityLimitationReason::kCpu
? QualityLimitationReason::kCpu
: QualityLimitationReason::kOther) {}
protected:
QualityLimitationReason reason_;
QualityLimitationReason different_reason_;
};
TEST_P(QualityLimitationReasonTrackerTestWithParamReason,
DurationIncreasesOverTime) {
int64_t initial_duration_ms = tracker_.DurationsMs()[reason_];
tracker_.SetReason(reason_);
EXPECT_EQ(initial_duration_ms, tracker_.DurationsMs()[reason_]);
fake_clock_.AdvanceTimeMilliseconds(4321);
EXPECT_EQ(initial_duration_ms + 4321, tracker_.DurationsMs()[reason_]);
}
TEST_P(QualityLimitationReasonTrackerTestWithParamReason,
SwitchBetweenReasonsBackAndForth) {
int64_t initial_duration_ms = tracker_.DurationsMs()[reason_];
// Spend 100 ms in `different_reason_`.
tracker_.SetReason(different_reason_);
fake_clock_.AdvanceTimeMilliseconds(100);
EXPECT_EQ(initial_duration_ms, tracker_.DurationsMs()[reason_]);
// Spend 50 ms in `reason_`.
tracker_.SetReason(reason_);
fake_clock_.AdvanceTimeMilliseconds(50);
EXPECT_EQ(initial_duration_ms + 50, tracker_.DurationsMs()[reason_]);
// Spend another 1000 ms in `different_reason_`.
tracker_.SetReason(different_reason_);
fake_clock_.AdvanceTimeMilliseconds(1000);
EXPECT_EQ(initial_duration_ms + 50, tracker_.DurationsMs()[reason_]);
// Spend another 100 ms in `reason_`.
tracker_.SetReason(reason_);
fake_clock_.AdvanceTimeMilliseconds(100);
EXPECT_EQ(initial_duration_ms + 150, tracker_.DurationsMs()[reason_]);
// Change reason one last time without advancing time.
tracker_.SetReason(different_reason_);
EXPECT_EQ(initial_duration_ms + 150, tracker_.DurationsMs()[reason_]);
}
INSTANTIATE_TEST_SUITE_P(
All,
QualityLimitationReasonTrackerTestWithParamReason,
::testing::Values(QualityLimitationReason::kNone, // "/0"
QualityLimitationReason::kCpu, // "/1"
QualityLimitationReason::kBandwidth, // "/2"
QualityLimitationReason::kOther)); // "/3"
} // namespace webrtc