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

Side by Side Diff: webrtc/video/call_stats_unittest.cc

Issue 1507903005: Revert of Merge webrtc/video_engine/ into webrtc/video/ (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Resolved merge conflict Created 5 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
« no previous file with comments | « webrtc/video/call_stats.cc ('k') | webrtc/video/encoder_state_feedback.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
16 #include "webrtc/system_wrappers/include/tick_util.h"
17 #include "webrtc/video/call_stats.h"
18
19 using ::testing::_;
20 using ::testing::AnyNumber;
21 using ::testing::Return;
22
23 namespace webrtc {
24
25 class MockStatsObserver : public CallStatsObserver {
26 public:
27 MockStatsObserver() {}
28 virtual ~MockStatsObserver() {}
29
30 MOCK_METHOD2(OnRttUpdate, void(int64_t, int64_t));
31 };
32
33 class CallStatsTest : public ::testing::Test {
34 protected:
35 virtual void SetUp() {
36 TickTime::UseFakeClock(12345);
37 call_stats_.reset(new CallStats());
38 }
39 rtc::scoped_ptr<CallStats> call_stats_;
40 };
41
42 TEST_F(CallStatsTest, AddAndTriggerCallback) {
43 MockStatsObserver stats_observer;
44 RtcpRttStats* rtcp_rtt_stats = call_stats_->rtcp_rtt_stats();
45 call_stats_->RegisterStatsObserver(&stats_observer);
46 TickTime::AdvanceFakeClock(1000);
47 EXPECT_EQ(0, rtcp_rtt_stats->LastProcessedRtt());
48
49 const int64_t kRtt = 25;
50 rtcp_rtt_stats->OnRttUpdate(kRtt);
51 EXPECT_CALL(stats_observer, OnRttUpdate(kRtt, kRtt)).Times(1);
52 call_stats_->Process();
53 EXPECT_EQ(kRtt, rtcp_rtt_stats->LastProcessedRtt());
54
55 const int64_t kRttTimeOutMs = 1500 + 10;
56 TickTime::AdvanceFakeClock(kRttTimeOutMs);
57 EXPECT_CALL(stats_observer, OnRttUpdate(_, _)).Times(0);
58 call_stats_->Process();
59 EXPECT_EQ(0, rtcp_rtt_stats->LastProcessedRtt());
60
61 call_stats_->DeregisterStatsObserver(&stats_observer);
62 }
63
64 TEST_F(CallStatsTest, ProcessTime) {
65 MockStatsObserver stats_observer;
66 call_stats_->RegisterStatsObserver(&stats_observer);
67 RtcpRttStats* rtcp_rtt_stats = call_stats_->rtcp_rtt_stats();
68 rtcp_rtt_stats->OnRttUpdate(100);
69
70 // Time isn't updated yet.
71 EXPECT_CALL(stats_observer, OnRttUpdate(_, _)).Times(0);
72 call_stats_->Process();
73
74 // Advance clock and verify we get an update.
75 TickTime::AdvanceFakeClock(1000);
76 EXPECT_CALL(stats_observer, OnRttUpdate(_, _)).Times(1);
77 call_stats_->Process();
78
79 // Advance clock just too little to get an update.
80 TickTime::AdvanceFakeClock(999);
81 rtcp_rtt_stats->OnRttUpdate(100);
82 EXPECT_CALL(stats_observer, OnRttUpdate(_, _)).Times(0);
83 call_stats_->Process();
84
85 // Advance enough to trigger a new update.
86 TickTime::AdvanceFakeClock(1);
87 EXPECT_CALL(stats_observer, OnRttUpdate(_, _)).Times(1);
88 call_stats_->Process();
89
90 call_stats_->DeregisterStatsObserver(&stats_observer);
91 }
92
93 // Verify all observers get correct estimates and observers can be added and
94 // removed.
95 TEST_F(CallStatsTest, MultipleObservers) {
96 MockStatsObserver stats_observer_1;
97 call_stats_->RegisterStatsObserver(&stats_observer_1);
98 // Add the second observer twice, there should still be only one report to the
99 // observer.
100 MockStatsObserver stats_observer_2;
101 call_stats_->RegisterStatsObserver(&stats_observer_2);
102 call_stats_->RegisterStatsObserver(&stats_observer_2);
103
104 RtcpRttStats* rtcp_rtt_stats = call_stats_->rtcp_rtt_stats();
105 const int64_t kRtt = 100;
106 rtcp_rtt_stats->OnRttUpdate(kRtt);
107
108 // Verify both observers are updated.
109 TickTime::AdvanceFakeClock(1000);
110 EXPECT_CALL(stats_observer_1, OnRttUpdate(kRtt, kRtt)).Times(1);
111 EXPECT_CALL(stats_observer_2, OnRttUpdate(kRtt, kRtt)).Times(1);
112 call_stats_->Process();
113
114 // Deregister the second observer and verify update is only sent to the first
115 // observer.
116 call_stats_->DeregisterStatsObserver(&stats_observer_2);
117 rtcp_rtt_stats->OnRttUpdate(kRtt);
118 TickTime::AdvanceFakeClock(1000);
119 EXPECT_CALL(stats_observer_1, OnRttUpdate(kRtt, kRtt)).Times(1);
120 EXPECT_CALL(stats_observer_2, OnRttUpdate(kRtt, kRtt)).Times(0);
121 call_stats_->Process();
122
123 // Deregister the first observer.
124 call_stats_->DeregisterStatsObserver(&stats_observer_1);
125 rtcp_rtt_stats->OnRttUpdate(kRtt);
126 TickTime::AdvanceFakeClock(1000);
127 EXPECT_CALL(stats_observer_1, OnRttUpdate(kRtt, kRtt)).Times(0);
128 EXPECT_CALL(stats_observer_2, OnRttUpdate(kRtt, kRtt)).Times(0);
129 call_stats_->Process();
130 }
131
132 // Verify increasing and decreasing rtt triggers callbacks with correct values.
133 TEST_F(CallStatsTest, ChangeRtt) {
134 MockStatsObserver stats_observer;
135 call_stats_->RegisterStatsObserver(&stats_observer);
136 RtcpRttStats* rtcp_rtt_stats = call_stats_->rtcp_rtt_stats();
137
138 // Advance clock to be ready for an update.
139 TickTime::AdvanceFakeClock(1000);
140
141 // Set a first value and verify the callback is triggered.
142 const int64_t kFirstRtt = 100;
143 rtcp_rtt_stats->OnRttUpdate(kFirstRtt);
144 EXPECT_CALL(stats_observer, OnRttUpdate(kFirstRtt, kFirstRtt)).Times(1);
145 call_stats_->Process();
146
147 // Increase rtt and verify the new value is reported.
148 TickTime::AdvanceFakeClock(1000);
149 const int64_t kHighRtt = kFirstRtt + 20;
150 const int64_t kAvgRtt1 = 103;
151 rtcp_rtt_stats->OnRttUpdate(kHighRtt);
152 EXPECT_CALL(stats_observer, OnRttUpdate(kAvgRtt1, kHighRtt)).Times(1);
153 call_stats_->Process();
154
155 // Increase time enough for a new update, but not too much to make the
156 // rtt invalid. Report a lower rtt and verify the old/high value still is sent
157 // in the callback.
158 TickTime::AdvanceFakeClock(1000);
159 const int64_t kLowRtt = kFirstRtt - 20;
160 const int64_t kAvgRtt2 = 102;
161 rtcp_rtt_stats->OnRttUpdate(kLowRtt);
162 EXPECT_CALL(stats_observer, OnRttUpdate(kAvgRtt2, kHighRtt)).Times(1);
163 call_stats_->Process();
164
165 // Advance time to make the high report invalid, the lower rtt should now be
166 // in the callback.
167 TickTime::AdvanceFakeClock(1000);
168 const int64_t kAvgRtt3 = 95;
169 EXPECT_CALL(stats_observer, OnRttUpdate(kAvgRtt3, kLowRtt)).Times(1);
170 call_stats_->Process();
171
172 call_stats_->DeregisterStatsObserver(&stats_observer);
173 }
174
175 TEST_F(CallStatsTest, LastProcessedRtt) {
176 MockStatsObserver stats_observer;
177 call_stats_->RegisterStatsObserver(&stats_observer);
178 RtcpRttStats* rtcp_rtt_stats = call_stats_->rtcp_rtt_stats();
179 TickTime::AdvanceFakeClock(1000);
180
181 // Set a first values and verify that LastProcessedRtt initially returns the
182 // average rtt.
183 const int64_t kRttLow = 10;
184 const int64_t kRttHigh = 30;
185 const int64_t kAvgRtt = 20;
186 rtcp_rtt_stats->OnRttUpdate(kRttLow);
187 rtcp_rtt_stats->OnRttUpdate(kRttHigh);
188 EXPECT_CALL(stats_observer, OnRttUpdate(kAvgRtt, kRttHigh)).Times(1);
189 call_stats_->Process();
190 EXPECT_EQ(kAvgRtt, rtcp_rtt_stats->LastProcessedRtt());
191
192 // Update values and verify LastProcessedRtt.
193 TickTime::AdvanceFakeClock(1000);
194 rtcp_rtt_stats->OnRttUpdate(kRttLow);
195 rtcp_rtt_stats->OnRttUpdate(kRttHigh);
196 EXPECT_CALL(stats_observer, OnRttUpdate(kAvgRtt, kRttHigh)).Times(1);
197 call_stats_->Process();
198 EXPECT_EQ(kAvgRtt, rtcp_rtt_stats->LastProcessedRtt());
199
200 call_stats_->DeregisterStatsObserver(&stats_observer);
201 }
202
203 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/call_stats.cc ('k') | webrtc/video/encoder_state_feedback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698