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

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

Issue 2304363002: Let ViEEncoder express resolution requests as Sinkwants (Closed)
Patch Set: Fix broken test RunOnTqNormalUsage. Created 4 years, 2 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 int overuse_; 51 int overuse_;
52 int normaluse_; 52 int normaluse_;
53 }; 53 };
54 54
55 class OveruseFrameDetectorUnderTest : public OveruseFrameDetector { 55 class OveruseFrameDetectorUnderTest : public OveruseFrameDetector {
56 public: 56 public:
57 OveruseFrameDetectorUnderTest(Clock* clock, 57 OveruseFrameDetectorUnderTest(Clock* clock,
58 const CpuOveruseOptions& options, 58 const CpuOveruseOptions& options,
59 CpuOveruseObserver* overuse_observer, 59 CpuOveruseObserver* overuse_observer,
60 EncodedFrameObserver* encoder_timing,
61 CpuOveruseMetricsObserver* metrics_observer) 60 CpuOveruseMetricsObserver* metrics_observer)
62 : OveruseFrameDetector(clock, 61 : OveruseFrameDetector(clock,
63 options, 62 options,
64 overuse_observer, 63 overuse_observer,
65 encoder_timing,
66 metrics_observer) {} 64 metrics_observer) {}
67 ~OveruseFrameDetectorUnderTest() {} 65 ~OveruseFrameDetectorUnderTest() {}
68 66
69 using OveruseFrameDetector::CheckForOveruse; 67 using OveruseFrameDetector::CheckForOveruse;
70 }; 68 };
71 69
72 class OveruseFrameDetectorTest : public ::testing::Test, 70 class OveruseFrameDetectorTest : public ::testing::Test,
73 public CpuOveruseMetricsObserver { 71 public CpuOveruseMetricsObserver {
74 protected: 72 protected:
75 void SetUp() override { 73 void SetUp() override {
76 clock_.reset(new SimulatedClock(1234)); 74 clock_.reset(new SimulatedClock(1234));
77 observer_.reset(new MockCpuOveruseObserver()); 75 observer_.reset(new MockCpuOveruseObserver());
78 options_.min_process_count = 0; 76 options_.min_process_count = 0;
79 ReinitializeOveruseDetector(); 77 ReinitializeOveruseDetector();
80 } 78 }
81 79
82 void ReinitializeOveruseDetector() { 80 void ReinitializeOveruseDetector() {
83 overuse_detector_.reset(new OveruseFrameDetectorUnderTest( 81 overuse_detector_.reset(new OveruseFrameDetectorUnderTest(
84 clock_.get(), options_, observer_.get(), nullptr, this)); 82 clock_.get(), options_, observer_.get(), this));
85 } 83 }
86 84
87 void OnEncodedFrameTimeMeasured(int encode_time_ms, 85 void OnEncodedFrameTimeMeasured(int encode_time_ms,
88 const CpuOveruseMetrics& metrics) override { 86 const CpuOveruseMetrics& metrics) override {
89 metrics_ = metrics; 87 metrics_ = metrics;
90 } 88 }
91 89
92 int InitialUsage() { 90 int InitialUsage() {
93 return ((options_.low_encode_usage_threshold_percent + 91 return ((options_.low_encode_usage_threshold_percent +
94 options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5; 92 options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 TEST_F(OveruseFrameDetectorTest, OveruseAndRecover) { 157 TEST_F(OveruseFrameDetectorTest, OveruseAndRecover) {
160 // usage > high => overuse 158 // usage > high => overuse
161 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); 159 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1);
162 TriggerOveruse(options_.high_threshold_consecutive_count); 160 TriggerOveruse(options_.high_threshold_consecutive_count);
163 // usage < low => underuse 161 // usage < low => underuse
164 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); 162 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
165 TriggerUnderuse(); 163 TriggerUnderuse();
166 } 164 }
167 165
168 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithNoObserver) { 166 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithNoObserver) {
169 overuse_detector_.reset(new OveruseFrameDetectorUnderTest( 167 overuse_detector_.reset(
170 clock_.get(), options_, nullptr, nullptr, this)); 168 new OveruseFrameDetectorUnderTest(clock_.get(), options_, nullptr, this));
171 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); 169 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0);
172 TriggerOveruse(options_.high_threshold_consecutive_count); 170 TriggerOveruse(options_.high_threshold_consecutive_count);
173 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); 171 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0);
174 TriggerUnderuse(); 172 TriggerUnderuse();
175 } 173 }
176 174
177 TEST_F(OveruseFrameDetectorTest, DoubleOveruseAndRecover) { 175 TEST_F(OveruseFrameDetectorTest, DoubleOveruseAndRecover) {
178 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(2); 176 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(2);
179 TriggerOveruse(options_.high_threshold_consecutive_count); 177 TriggerOveruse(options_.high_threshold_consecutive_count);
180 TriggerOveruse(options_.high_threshold_consecutive_count); 178 TriggerOveruse(options_.high_threshold_consecutive_count);
181 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); 179 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1));
182 TriggerUnderuse(); 180 TriggerUnderuse();
183 } 181 }
184 182
185 TEST_F(OveruseFrameDetectorTest, TriggerUnderuseWithMinProcessCount) { 183 TEST_F(OveruseFrameDetectorTest, TriggerUnderuseWithMinProcessCount) {
186 options_.min_process_count = 1; 184 options_.min_process_count = 1;
187 CpuOveruseObserverImpl overuse_observer; 185 CpuOveruseObserverImpl overuse_observer;
188 overuse_detector_.reset(new OveruseFrameDetectorUnderTest( 186 overuse_detector_.reset(new OveruseFrameDetectorUnderTest(
189 clock_.get(), options_, &overuse_observer, nullptr, this)); 187 clock_.get(), options_, &overuse_observer, this));
190 InsertAndSendFramesWithInterval( 188 InsertAndSendFramesWithInterval(
191 1200, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); 189 1200, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms);
192 overuse_detector_->CheckForOveruse(); 190 overuse_detector_->CheckForOveruse();
193 EXPECT_EQ(0, overuse_observer.normaluse_); 191 EXPECT_EQ(0, overuse_observer.normaluse_);
194 clock_->AdvanceTimeMilliseconds(kProcessIntervalMs); 192 clock_->AdvanceTimeMilliseconds(kProcessIntervalMs);
195 overuse_detector_->CheckForOveruse(); 193 overuse_detector_->CheckForOveruse();
196 EXPECT_EQ(1, overuse_observer.normaluse_); 194 EXPECT_EQ(1, overuse_observer.normaluse_);
197 } 195 }
198 196
199 TEST_F(OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage) { 197 TEST_F(OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 TEST_F(OveruseFrameDetectorTest, RunOnTqNormalUsage) { 321 TEST_F(OveruseFrameDetectorTest, RunOnTqNormalUsage) {
324 rtc::TaskQueue queue("OveruseFrameDetectorTestQueue"); 322 rtc::TaskQueue queue("OveruseFrameDetectorTestQueue");
325 323
326 rtc::Event event(false, false); 324 rtc::Event event(false, false);
327 queue.PostTask([this, &event] { 325 queue.PostTask([this, &event] {
328 overuse_detector_->StartCheckForOveruse(); 326 overuse_detector_->StartCheckForOveruse();
329 event.Set(); 327 event.Set();
330 }); 328 });
331 event.Wait(rtc::Event::kForever); 329 event.Wait(rtc::Event::kForever);
332 330
333 // Expect NormalUsage(). When called, stop the |overuse_detector_| and then 331 // Expect NormalUsage().
334 // set |event| to end the test.
335 EXPECT_CALL(*(observer_.get()), NormalUsage()) 332 EXPECT_CALL(*(observer_.get()), NormalUsage())
336 .WillOnce(Invoke([this, &event] { 333 .WillOnce(Invoke([this, &event] {
337 overuse_detector_->StopCheckForOveruse();
338 event.Set(); 334 event.Set();
339 })); 335 }));
340 336
341 queue.PostTask([this, &event] { 337 queue.PostTask([this, &event] {
342 const int kDelayMs1 = 5; 338 const int kDelayMs1 = 5;
343 const int kDelayMs2 = 6; 339 const int kDelayMs2 = 6;
344 InsertAndSendFramesWithInterval(1300, kFrameInterval33ms, kWidth, kHeight, 340 InsertAndSendFramesWithInterval(1300, kFrameInterval33ms, kWidth, kHeight,
345 kDelayMs1); 341 kDelayMs1);
346 InsertAndSendFramesWithInterval(1, kFrameInterval33ms, kWidth, kHeight, 342 InsertAndSendFramesWithInterval(1, kFrameInterval33ms, kWidth, kHeight,
347 kDelayMs2); 343 kDelayMs2);
348 }); 344 });
349 345
346 // Wait for NormalUsage().
347 EXPECT_TRUE(event.Wait(10000));
348
349 // Delete the detector on TQ.
350 queue.PostTask([this, &event] {
351 overuse_detector_.reset();
352 event.Set();
353 });
350 EXPECT_TRUE(event.Wait(10000)); 354 EXPECT_TRUE(event.Wait(10000));
351 } 355 }
352 356
353 } // namespace webrtc 357 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698