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 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 int64_t diff_ms = timing.capture_ms - last_processed_capture_time_ms_; | 290 int64_t diff_ms = timing.capture_ms - last_processed_capture_time_ms_; |
291 usage_->AddSample(encode_duration_ms, diff_ms); | 291 usage_->AddSample(encode_duration_ms, diff_ms); |
292 } | 292 } |
293 last_processed_capture_time_ms_ = timing.capture_ms; | 293 last_processed_capture_time_ms_ = timing.capture_ms; |
294 EncodedFrameTimeMeasured(encode_duration_ms); | 294 EncodedFrameTimeMeasured(encode_duration_ms); |
295 } | 295 } |
296 frame_timing_.pop_front(); | 296 frame_timing_.pop_front(); |
297 } | 297 } |
298 } | 298 } |
299 | 299 |
300 void OveruseFrameDetector::Process() { | 300 int32_t OveruseFrameDetector::Process() { |
301 RTC_DCHECK(processing_thread_.CalledOnValidThread()); | 301 RTC_DCHECK(processing_thread_.CalledOnValidThread()); |
302 | 302 |
303 int64_t now = clock_->TimeInMilliseconds(); | 303 int64_t now = clock_->TimeInMilliseconds(); |
304 | 304 |
305 // Used to protect against Process() being called too often. | 305 // Used to protect against Process() being called too often. |
306 if (now < next_process_time_ms_) | 306 if (now < next_process_time_ms_) |
307 return; | 307 return 0; |
308 | 308 |
309 next_process_time_ms_ = now + kProcessIntervalMs; | 309 next_process_time_ms_ = now + kProcessIntervalMs; |
310 | 310 |
311 CpuOveruseMetrics current_metrics; | 311 CpuOveruseMetrics current_metrics; |
312 { | 312 { |
313 rtc::CritScope cs(&crit_); | 313 rtc::CritScope cs(&crit_); |
314 ++num_process_times_; | 314 ++num_process_times_; |
315 if (num_process_times_ <= options_.min_process_count || !metrics_) | 315 if (num_process_times_ <= options_.min_process_count || !metrics_) |
316 return; | 316 return 0; |
317 | 317 |
318 current_metrics = *metrics_; | 318 current_metrics = *metrics_; |
319 } | 319 } |
320 | 320 |
321 if (IsOverusing(current_metrics)) { | 321 if (IsOverusing(current_metrics)) { |
322 // If the last thing we did was going up, and now have to back down, we need | 322 // If the last thing we did was going up, and now have to back down, we need |
323 // to check if this peak was short. If so we should back off to avoid going | 323 // to check if this peak was short. If so we should back off to avoid going |
324 // back and forth between this load, the system doesn't seem to handle it. | 324 // back and forth between this load, the system doesn't seem to handle it. |
325 bool check_for_backoff = last_rampup_time_ms_ > last_overuse_time_ms_; | 325 bool check_for_backoff = last_rampup_time_ms_ > last_overuse_time_ms_; |
326 if (check_for_backoff) { | 326 if (check_for_backoff) { |
(...skipping 24 matching lines...) Expand all Loading... |
351 observer_->NormalUsage(); | 351 observer_->NormalUsage(); |
352 } | 352 } |
353 | 353 |
354 int rampup_delay = | 354 int rampup_delay = |
355 in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_; | 355 in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_; |
356 | 356 |
357 LOG(LS_VERBOSE) << " Frame stats: " | 357 LOG(LS_VERBOSE) << " Frame stats: " |
358 << " encode usage " << current_metrics.encode_usage_percent | 358 << " encode usage " << current_metrics.encode_usage_percent |
359 << " overuse detections " << num_overuse_detections_ | 359 << " overuse detections " << num_overuse_detections_ |
360 << " rampup delay " << rampup_delay; | 360 << " rampup delay " << rampup_delay; |
| 361 |
| 362 return 0; |
361 } | 363 } |
362 | 364 |
363 bool OveruseFrameDetector::IsOverusing(const CpuOveruseMetrics& metrics) { | 365 bool OveruseFrameDetector::IsOverusing(const CpuOveruseMetrics& metrics) { |
364 if (metrics.encode_usage_percent >= | 366 if (metrics.encode_usage_percent >= |
365 options_.high_encode_usage_threshold_percent) { | 367 options_.high_encode_usage_threshold_percent) { |
366 ++checks_above_threshold_; | 368 ++checks_above_threshold_; |
367 } else { | 369 } else { |
368 checks_above_threshold_ = 0; | 370 checks_above_threshold_ = 0; |
369 } | 371 } |
370 return checks_above_threshold_ >= options_.high_threshold_consecutive_count; | 372 return checks_above_threshold_ >= options_.high_threshold_consecutive_count; |
371 } | 373 } |
372 | 374 |
373 bool OveruseFrameDetector::IsUnderusing(const CpuOveruseMetrics& metrics, | 375 bool OveruseFrameDetector::IsUnderusing(const CpuOveruseMetrics& metrics, |
374 int64_t time_now) { | 376 int64_t time_now) { |
375 int delay = in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_; | 377 int delay = in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_; |
376 if (time_now < last_rampup_time_ms_ + delay) | 378 if (time_now < last_rampup_time_ms_ + delay) |
377 return false; | 379 return false; |
378 | 380 |
379 return metrics.encode_usage_percent < | 381 return metrics.encode_usage_percent < |
380 options_.low_encode_usage_threshold_percent; | 382 options_.low_encode_usage_threshold_percent; |
381 } | 383 } |
382 } // namespace webrtc | 384 } // namespace webrtc |
OLD | NEW |