Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 71 return ((options_.low_encode_usage_threshold_percent + | 71 return ((options_.low_encode_usage_threshold_percent + |
| 72 options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5; | 72 options_.high_encode_usage_threshold_percent) / 2.0f) + 0.5; |
| 73 } | 73 } |
| 74 | 74 |
| 75 void InsertAndSendFramesWithInterval( | 75 void InsertAndSendFramesWithInterval( |
| 76 int num_frames, int interval_ms, int width, int height, int delay_ms) { | 76 int num_frames, int interval_ms, int width, int height, int delay_ms) { |
| 77 while (num_frames-- > 0) { | 77 while (num_frames-- > 0) { |
| 78 int64_t capture_time_ms = clock_->TimeInMilliseconds(); | 78 int64_t capture_time_ms = clock_->TimeInMilliseconds(); |
| 79 overuse_detector_->FrameCaptured(width, height, capture_time_ms); | 79 overuse_detector_->FrameCaptured(width, height, capture_time_ms); |
| 80 clock_->AdvanceTimeMilliseconds(delay_ms); | 80 clock_->AdvanceTimeMilliseconds(delay_ms); |
| 81 overuse_detector_->FrameEncoded(delay_ms); | |
| 82 overuse_detector_->FrameSent(capture_time_ms); | 81 overuse_detector_->FrameSent(capture_time_ms); |
| 83 clock_->AdvanceTimeMilliseconds(interval_ms - delay_ms); | 82 clock_->AdvanceTimeMilliseconds(interval_ms - delay_ms); |
| 84 } | 83 } |
| 85 } | 84 } |
| 86 | 85 |
| 87 void TriggerOveruse(int num_times) { | 86 void TriggerOveruse(int num_times) { |
| 88 const int kDelayMs = 32; | 87 const int kDelayMs = 32; |
| 89 for (int i = 0; i < num_times; ++i) { | 88 for (int i = 0; i < num_times; ++i) { |
| 90 InsertAndSendFramesWithInterval( | 89 InsertAndSendFramesWithInterval( |
| 91 1000, kFrameInterval33ms, kWidth, kHeight, kDelayMs); | 90 1000, kFrameInterval33ms, kWidth, kHeight, kDelayMs); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 106 int UsagePercent() { return metrics_.encode_usage_percent; } | 105 int UsagePercent() { return metrics_.encode_usage_percent; } |
| 107 | 106 |
| 108 CpuOveruseOptions options_; | 107 CpuOveruseOptions options_; |
| 109 rtc::scoped_ptr<SimulatedClock> clock_; | 108 rtc::scoped_ptr<SimulatedClock> clock_; |
| 110 rtc::scoped_ptr<MockCpuOveruseObserver> observer_; | 109 rtc::scoped_ptr<MockCpuOveruseObserver> observer_; |
| 111 rtc::scoped_ptr<OveruseFrameDetector> overuse_detector_; | 110 rtc::scoped_ptr<OveruseFrameDetector> overuse_detector_; |
| 112 CpuOveruseMetrics metrics_; | 111 CpuOveruseMetrics metrics_; |
| 113 }; | 112 }; |
| 114 | 113 |
| 115 | 114 |
| 116 // enable_encode_usage_method = true; | |
| 117 // enable_extended_processing_usage = false; | |
| 118 // UsagePercent() > high_encode_usage_threshold_percent => overuse. | 115 // UsagePercent() > high_encode_usage_threshold_percent => overuse. |
| 119 // UsagePercent() < low_encode_usage_threshold_percent => underuse. | 116 // UsagePercent() < low_encode_usage_threshold_percent => underuse. |
| 120 TEST_F(OveruseFrameDetectorTest, TriggerOveruse) { | 117 TEST_F(OveruseFrameDetectorTest, TriggerOveruse) { |
| 121 options_.enable_extended_processing_usage = false; | |
| 122 ReinitializeOveruseDetector(); | |
| 123 // usage > high => overuse | 118 // usage > high => overuse |
| 124 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); | 119 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); |
| 125 TriggerOveruse(options_.high_threshold_consecutive_count); | 120 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 126 } | 121 } |
| 127 | 122 |
| 128 TEST_F(OveruseFrameDetectorTest, OveruseAndRecover) { | 123 TEST_F(OveruseFrameDetectorTest, OveruseAndRecover) { |
| 129 options_.enable_extended_processing_usage = false; | |
| 130 ReinitializeOveruseDetector(); | |
| 131 // usage > high => overuse | 124 // usage > high => overuse |
| 132 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); | 125 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); |
| 133 TriggerOveruse(options_.high_threshold_consecutive_count); | 126 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 134 // usage < low => underuse | 127 // usage < low => underuse |
| 135 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); | 128 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); |
| 136 TriggerUnderuse(); | 129 TriggerUnderuse(); |
| 137 } | 130 } |
| 138 | 131 |
| 139 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithNoObserver) { | 132 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithNoObserver) { |
| 140 options_.enable_extended_processing_usage = false; | |
| 141 overuse_detector_.reset( | 133 overuse_detector_.reset( |
| 142 new OveruseFrameDetector(clock_.get(), options_, nullptr, this)); | 134 new OveruseFrameDetector(clock_.get(), options_, nullptr, this)); |
| 143 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); | 135 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); |
| 144 TriggerOveruse(options_.high_threshold_consecutive_count); | 136 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 145 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); | 137 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); |
| 146 TriggerUnderuse(); | 138 TriggerUnderuse(); |
| 147 } | 139 } |
| 148 | 140 |
| 149 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithMethodDisabled) { | |
| 150 options_.enable_encode_usage_method = false; | |
| 151 options_.enable_extended_processing_usage = false; | |
| 152 ReinitializeOveruseDetector(); | |
| 153 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); | |
| 154 TriggerOveruse(options_.high_threshold_consecutive_count); | |
| 155 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); | |
| 156 TriggerUnderuse(); | |
| 157 } | |
| 158 | |
| 159 TEST_F(OveruseFrameDetectorTest, DoubleOveruseAndRecover) { | 141 TEST_F(OveruseFrameDetectorTest, DoubleOveruseAndRecover) { |
| 160 options_.enable_extended_processing_usage = false; | |
| 161 ReinitializeOveruseDetector(); | |
| 162 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(2); | 142 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(2); |
| 163 TriggerOveruse(options_.high_threshold_consecutive_count); | 143 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 164 TriggerOveruse(options_.high_threshold_consecutive_count); | 144 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 165 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); | 145 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); |
| 166 TriggerUnderuse(); | 146 TriggerUnderuse(); |
| 167 } | 147 } |
| 168 | 148 |
| 169 TEST_F(OveruseFrameDetectorTest, TriggerUnderuseWithMinProcessCount) { | 149 TEST_F(OveruseFrameDetectorTest, TriggerUnderuseWithMinProcessCount) { |
| 170 options_.enable_extended_processing_usage = false; | |
| 171 options_.min_process_count = 1; | 150 options_.min_process_count = 1; |
| 172 CpuOveruseObserverImpl overuse_observer; | 151 CpuOveruseObserverImpl overuse_observer; |
| 173 overuse_detector_.reset(new OveruseFrameDetector(clock_.get(), options_, | 152 overuse_detector_.reset(new OveruseFrameDetector(clock_.get(), options_, |
| 174 &overuse_observer, this)); | 153 &overuse_observer, this)); |
| 175 InsertAndSendFramesWithInterval( | 154 InsertAndSendFramesWithInterval( |
| 176 1200, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); | 155 1200, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); |
| 177 overuse_detector_->Process(); | 156 overuse_detector_->Process(); |
| 178 EXPECT_EQ(0, overuse_observer.normaluse_); | 157 EXPECT_EQ(0, overuse_observer.normaluse_); |
| 179 clock_->AdvanceTimeMilliseconds(kProcessIntervalMs); | 158 clock_->AdvanceTimeMilliseconds(kProcessIntervalMs); |
| 180 overuse_detector_->Process(); | 159 overuse_detector_->Process(); |
| 181 EXPECT_EQ(1, overuse_observer.normaluse_); | 160 EXPECT_EQ(1, overuse_observer.normaluse_); |
| 182 } | 161 } |
| 183 | 162 |
| 184 TEST_F(OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage) { | 163 TEST_F(OveruseFrameDetectorTest, ConstantOveruseGivesNoNormalUsage) { |
| 185 options_.enable_extended_processing_usage = false; | |
| 186 ReinitializeOveruseDetector(); | |
| 187 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); | 164 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); |
| 188 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(64); | 165 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(64); |
| 189 for (size_t i = 0; i < 64; ++i) { | 166 for (size_t i = 0; i < 64; ++i) { |
| 190 TriggerOveruse(options_.high_threshold_consecutive_count); | 167 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 191 } | 168 } |
| 192 } | 169 } |
| 193 | 170 |
| 194 TEST_F(OveruseFrameDetectorTest, ConsecutiveCountTriggersOveruse) { | 171 TEST_F(OveruseFrameDetectorTest, ConsecutiveCountTriggersOveruse) { |
| 195 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); | 172 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); |
| 196 options_.enable_extended_processing_usage = false; | |
| 197 options_.high_threshold_consecutive_count = 2; | 173 options_.high_threshold_consecutive_count = 2; |
| 198 ReinitializeOveruseDetector(); | 174 ReinitializeOveruseDetector(); |
| 199 TriggerOveruse(2); | 175 TriggerOveruse(2); |
| 200 } | 176 } |
| 201 | 177 |
| 202 TEST_F(OveruseFrameDetectorTest, IncorrectConsecutiveCountTriggersNoOveruse) { | 178 TEST_F(OveruseFrameDetectorTest, IncorrectConsecutiveCountTriggersNoOveruse) { |
| 203 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); | 179 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); |
| 204 options_.enable_extended_processing_usage = false; | |
| 205 options_.high_threshold_consecutive_count = 2; | 180 options_.high_threshold_consecutive_count = 2; |
| 206 ReinitializeOveruseDetector(); | 181 ReinitializeOveruseDetector(); |
| 207 TriggerOveruse(1); | 182 TriggerOveruse(1); |
| 208 } | 183 } |
| 209 | 184 |
| 210 TEST_F(OveruseFrameDetectorTest, ProcessingUsage) { | 185 TEST_F(OveruseFrameDetectorTest, ProcessingUsage) { |
| 211 InsertAndSendFramesWithInterval( | 186 InsertAndSendFramesWithInterval( |
| 212 1000, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); | 187 1000, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); |
| 213 EXPECT_EQ(kProcessTime5ms * 100 / kFrameInterval33ms, UsagePercent()); | 188 EXPECT_EQ(kProcessTime5ms * 100 / kFrameInterval33ms, UsagePercent()); |
| 214 } | 189 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 EXPECT_EQ(InitialUsage(), UsagePercent()); | 222 EXPECT_EQ(InitialUsage(), UsagePercent()); |
| 248 InsertAndSendFramesWithInterval( | 223 InsertAndSendFramesWithInterval( |
| 249 1, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); | 224 1, kFrameInterval33ms, kWidth, kHeight, kProcessTime5ms); |
| 250 EXPECT_NE(InitialUsage(), UsagePercent()); | 225 EXPECT_NE(InitialUsage(), UsagePercent()); |
| 251 } | 226 } |
| 252 | 227 |
| 253 TEST_F(OveruseFrameDetectorTest, InitialProcessingUsage) { | 228 TEST_F(OveruseFrameDetectorTest, InitialProcessingUsage) { |
| 254 EXPECT_EQ(InitialUsage(), UsagePercent()); | 229 EXPECT_EQ(InitialUsage(), UsagePercent()); |
| 255 } | 230 } |
| 256 | 231 |
| 257 TEST_F(OveruseFrameDetectorTest, FrameDelay_OneFrameDisabled) { | 232 TEST_F(OveruseFrameDetectorTest, FrameDelay_OneFrame) { |
| 258 options_.enable_extended_processing_usage = false; | |
| 259 ReinitializeOveruseDetector(); | |
| 260 const int kProcessingTimeMs = 100; | 233 const int kProcessingTimeMs = 100; |
| 261 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | 234 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); |
| 262 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 235 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 263 overuse_detector_->FrameSent(33); | |
| 264 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); | |
| 265 } | |
| 266 | |
| 267 TEST_F(OveruseFrameDetectorTest, FrameDelay_OneFrame) { | |
| 268 options_.enable_extended_processing_usage = true; | |
| 269 ReinitializeOveruseDetector(); | |
| 270 const int kProcessingTimeMs = 100; | |
| 271 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | |
| 272 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | |
| 273 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); | 236 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); |
| 274 overuse_detector_->FrameSent(33); | 237 overuse_detector_->FrameSent(33); |
| 275 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); | 238 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); |
| 276 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); | 239 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); |
| 277 } | 240 } |
| 278 | 241 |
| 279 TEST_F(OveruseFrameDetectorTest, FrameDelay_TwoFrames) { | 242 TEST_F(OveruseFrameDetectorTest, FrameDelay_TwoFrames) { |
| 280 options_.enable_extended_processing_usage = true; | |
| 281 ReinitializeOveruseDetector(); | |
| 282 const int kProcessingTimeMs1 = 100; | 243 const int kProcessingTimeMs1 = 100; |
| 283 const int kProcessingTimeMs2 = 50; | 244 const int kProcessingTimeMs2 = 50; |
| 284 const int kTimeBetweenFramesMs = 200; | 245 const int kTimeBetweenFramesMs = 200; |
| 285 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | 246 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); |
| 286 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs1); | 247 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs1); |
| 287 overuse_detector_->FrameSent(33); | 248 overuse_detector_->FrameSent(33); |
| 288 EXPECT_EQ(kProcessingTimeMs1, overuse_detector_->LastProcessingTimeMs()); | 249 EXPECT_EQ(kProcessingTimeMs1, overuse_detector_->LastProcessingTimeMs()); |
| 289 clock_->AdvanceTimeMilliseconds(kTimeBetweenFramesMs); | 250 clock_->AdvanceTimeMilliseconds(kTimeBetweenFramesMs); |
| 290 overuse_detector_->FrameCaptured(kWidth, kHeight, 66); | 251 overuse_detector_->FrameCaptured(kWidth, kHeight, 66); |
| 291 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs2); | 252 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs2); |
| 292 overuse_detector_->FrameSent(66); | 253 overuse_detector_->FrameSent(66); |
| 293 EXPECT_EQ(kProcessingTimeMs2, overuse_detector_->LastProcessingTimeMs()); | 254 EXPECT_EQ(kProcessingTimeMs2, overuse_detector_->LastProcessingTimeMs()); |
| 294 } | 255 } |
| 295 | 256 |
| 296 TEST_F(OveruseFrameDetectorTest, FrameDelay_MaxQueueSize) { | 257 TEST_F(OveruseFrameDetectorTest, FrameDelay_MaxQueueSize) { |
| 297 options_.enable_extended_processing_usage = true; | |
| 298 ReinitializeOveruseDetector(); | |
| 299 const int kMaxQueueSize = 91; | 258 const int kMaxQueueSize = 91; |
| 300 for (int i = 0; i < kMaxQueueSize * 2; ++i) { | 259 for (int i = 0; i < kMaxQueueSize * 2; ++i) { |
| 301 overuse_detector_->FrameCaptured(kWidth, kHeight, i); | 260 overuse_detector_->FrameCaptured(kWidth, kHeight, i); |
| 302 } | 261 } |
| 303 EXPECT_EQ(kMaxQueueSize, overuse_detector_->FramesInQueue()); | 262 EXPECT_EQ(kMaxQueueSize, overuse_detector_->FramesInQueue()); |
| 304 } | 263 } |
| 305 | 264 |
| 306 TEST_F(OveruseFrameDetectorTest, FrameDelay_NonProcessedFramesRemoved) { | 265 TEST_F(OveruseFrameDetectorTest, FrameDelay_NonProcessedFramesRemoved) { |
| 307 options_.enable_extended_processing_usage = true; | |
| 308 ReinitializeOveruseDetector(); | |
| 309 const int kProcessingTimeMs = 100; | 266 const int kProcessingTimeMs = 100; |
| 310 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | 267 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); |
| 311 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 268 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 312 overuse_detector_->FrameCaptured(kWidth, kHeight, 35); | 269 overuse_detector_->FrameCaptured(kWidth, kHeight, 35); |
| 313 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 270 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 314 overuse_detector_->FrameCaptured(kWidth, kHeight, 66); | 271 overuse_detector_->FrameCaptured(kWidth, kHeight, 66); |
| 315 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 272 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 316 overuse_detector_->FrameCaptured(kWidth, kHeight, 99); | 273 overuse_detector_->FrameCaptured(kWidth, kHeight, 99); |
| 317 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 274 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 318 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); | 275 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); |
| 319 EXPECT_EQ(4, overuse_detector_->FramesInQueue()); | 276 EXPECT_EQ(4, overuse_detector_->FramesInQueue()); |
| 320 overuse_detector_->FrameSent(66); | 277 overuse_detector_->FrameSent(66); |
| 321 // Frame 33, 35 removed, 66 processed, 99 not processed. | 278 // Frame 33, 35 removed, 66 processed, 99 not processed. |
| 322 EXPECT_EQ(2 * kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); | 279 EXPECT_EQ(2 * kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); |
| 323 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); | 280 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); |
| 324 overuse_detector_->FrameSent(99); | 281 overuse_detector_->FrameSent(99); |
| 325 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); | 282 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); |
| 326 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); | 283 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); |
| 327 } | 284 } |
| 328 | 285 |
| 329 TEST_F(OveruseFrameDetectorTest, FrameDelay_ResetClearsFrames) { | 286 TEST_F(OveruseFrameDetectorTest, FrameDelay_ResetClearsFrames) { |
| 330 options_.enable_extended_processing_usage = true; | |
| 331 ReinitializeOveruseDetector(); | |
| 332 const int kProcessingTimeMs = 100; | 287 const int kProcessingTimeMs = 100; |
| 333 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | 288 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); |
| 334 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); | 289 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); |
| 335 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 290 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 336 // Verify reset (resolution changed). | 291 // Verify reset (resolution changed). |
| 337 overuse_detector_->FrameCaptured(kWidth, kHeight + 1, 66); | 292 overuse_detector_->FrameCaptured(kWidth, kHeight + 1, 66); |
| 338 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); | 293 EXPECT_EQ(1, overuse_detector_->FramesInQueue()); |
| 339 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 294 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 340 overuse_detector_->FrameSent(66); | 295 overuse_detector_->FrameSent(66); |
| 341 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); | 296 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); |
| 342 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); | 297 EXPECT_EQ(0, overuse_detector_->FramesInQueue()); |
| 343 } | 298 } |
| 344 | 299 |
| 345 TEST_F(OveruseFrameDetectorTest, FrameDelay_NonMatchingSendFrameIgnored) { | 300 TEST_F(OveruseFrameDetectorTest, FrameDelay_NonMatchingSendFrameIgnored) { |
| 346 options_.enable_extended_processing_usage = true; | |
| 347 ReinitializeOveruseDetector(); | |
| 348 const int kProcessingTimeMs = 100; | 301 const int kProcessingTimeMs = 100; |
| 349 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); | 302 overuse_detector_->FrameCaptured(kWidth, kHeight, 33); |
| 350 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); | 303 clock_->AdvanceTimeMilliseconds(kProcessingTimeMs); |
| 351 overuse_detector_->FrameSent(34); | 304 overuse_detector_->FrameSent(34); |
| 352 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); | 305 EXPECT_EQ(-1, overuse_detector_->LastProcessingTimeMs()); |
| 353 overuse_detector_->FrameSent(33); | 306 overuse_detector_->FrameSent(33); |
| 354 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); | 307 EXPECT_EQ(kProcessingTimeMs, overuse_detector_->LastProcessingTimeMs()); |
| 355 } | 308 } |
| 356 | 309 |
| 357 // enable_encode_usage_method = true; | |
| 358 // enable_extended_processing_usage = true; | |
| 359 // UsagePercent() > high_encode_usage_threshold_percent => overuse. | 310 // UsagePercent() > high_encode_usage_threshold_percent => overuse. |
|
åsapersson
2016/01/07 15:02:46
These two methods could be removed now (tested abo
pbos-webrtc
2016/01/07 15:36:35
Done.
| |
| 360 // UsagePercent() < low_encode_usage_threshold_percent => underuse. | 311 // UsagePercent() < low_encode_usage_threshold_percent => underuse. |
| 361 TEST_F(OveruseFrameDetectorTest, TriggerOveruseWithExtendedProcessingUsage) { | 312 TEST_F(OveruseFrameDetectorTest, TriggerOveruseWithExtendedProcessingUsage) { |
| 362 options_.enable_extended_processing_usage = true; | |
| 363 ReinitializeOveruseDetector(); | |
| 364 // usage > high => overuse | 313 // usage > high => overuse |
| 365 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); | 314 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); |
| 366 TriggerOveruse(options_.high_threshold_consecutive_count); | 315 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 367 } | 316 } |
| 368 | 317 |
| 369 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithExtendedProcessingUsage) { | 318 TEST_F(OveruseFrameDetectorTest, OveruseAndRecoverWithExtendedProcessingUsage) { |
| 370 options_.enable_extended_processing_usage = true; | |
| 371 ReinitializeOveruseDetector(); | |
| 372 // usage > high => overuse | 319 // usage > high => overuse |
| 373 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); | 320 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(1); |
| 374 TriggerOveruse(options_.high_threshold_consecutive_count); | 321 TriggerOveruse(options_.high_threshold_consecutive_count); |
| 375 // usage < low => underuse | 322 // usage < low => underuse |
| 376 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); | 323 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(testing::AtLeast(1)); |
| 377 TriggerUnderuse(); | 324 TriggerUnderuse(); |
| 378 } | 325 } |
| 379 | 326 |
| 380 TEST_F(OveruseFrameDetectorTest, | |
| 381 OveruseAndRecoverWithExtendedProcessingUsageMethodDisabled) { | |
| 382 options_.enable_encode_usage_method = false; | |
| 383 options_.enable_extended_processing_usage = true; | |
| 384 ReinitializeOveruseDetector(); | |
| 385 // usage > high => overuse | |
| 386 EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(0); | |
| 387 TriggerOveruse(options_.high_threshold_consecutive_count); | |
| 388 // usage < low => underuse | |
| 389 EXPECT_CALL(*(observer_.get()), NormalUsage()).Times(0); | |
| 390 TriggerUnderuse(); | |
| 391 } | |
| 392 | |
| 393 } // namespace webrtc | 327 } // namespace webrtc |
| OLD | NEW |