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

Unified Diff: webrtc/video_engine/overuse_frame_detector.cc

Issue 1228853004: Reduce locking in overuse frame detector now that (as of r9508) the observer_ and options_ can only (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video_engine/overuse_frame_detector.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video_engine/overuse_frame_detector.cc
diff --git a/webrtc/video_engine/overuse_frame_detector.cc b/webrtc/video_engine/overuse_frame_detector.cc
index 441b1062764dd37b24f05c8a9c972c00598d1862..fd0b15b9ef9a37b7ff7c3bf52ca936d6d5854d91 100644
--- a/webrtc/video_engine/overuse_frame_detector.cc
+++ b/webrtc/video_engine/overuse_frame_detector.cc
@@ -199,21 +199,21 @@ OveruseFrameDetector::OveruseFrameDetector(
observer_(observer),
metrics_observer_(metrics_observer),
clock_(clock),
- next_process_time_(clock_->TimeInMilliseconds()),
num_process_times_(0),
last_capture_time_(0),
+ num_pixels_(0),
+ next_process_time_(clock_->TimeInMilliseconds()),
last_overuse_time_(0),
checks_above_threshold_(0),
num_overuse_detections_(0),
last_rampup_time_(0),
in_quick_rampup_(false),
current_rampup_delay_ms_(kStandardRampUpDelayMs),
- num_pixels_(0),
last_encode_sample_ms_(0),
+ last_sample_time_ms_(0),
encode_time_(new EncodeTimeAvg()),
usage_(new SendProcessingUsage(options)),
- frame_queue_(new FrameQueue()),
- last_sample_time_ms_(0) {
+ frame_queue_(new FrameQueue()) {
RTC_DCHECK(metrics_observer != nullptr);
// Make sure stats are initially up-to-date. This simplifies unit testing
// since we don't have to trigger an update using one of the methods which
@@ -338,14 +338,17 @@ int32_t OveruseFrameDetector::Process() {
next_process_time_ = now + kProcessIntervalMs;
- rtc::CritScope cs(&crit_);
- ++num_process_times_;
+ CpuOveruseMetrics current_metrics;
+ {
+ rtc::CritScope cs(&crit_);
+ ++num_process_times_;
- if (num_process_times_ <= options_.min_process_count) {
- return 0;
+ current_metrics = metrics_;
+ if (num_process_times_ <= options_.min_process_count)
+ return 0;
}
- if (IsOverusing()) {
+ if (IsOverusing(current_metrics)) {
// If the last thing we did was going up, and now have to back down, we need
// to check if this peak was short. If so we should back off to avoid going
// back and forth between this load, the system doesn't seem to handle it.
@@ -370,7 +373,7 @@ int32_t OveruseFrameDetector::Process() {
if (observer_ != NULL)
observer_->OveruseDetected();
- } else if (IsUnderusing(now)) {
+ } else if (IsUnderusing(current_metrics, now)) {
last_rampup_time_ = now;
in_quick_rampup_ = true;
@@ -380,18 +383,21 @@ int32_t OveruseFrameDetector::Process() {
int rampup_delay =
in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_;
- LOG(LS_VERBOSE) << " Frame stats: encode usage: " << usage_->Value()
+
+ LOG(LS_VERBOSE) << " Frame stats: "
+ << " encode usage " << current_metrics.encode_usage_percent
<< " overuse detections " << num_overuse_detections_
<< " rampup delay " << rampup_delay;
return 0;
}
-bool OveruseFrameDetector::IsOverusing() {
+bool OveruseFrameDetector::IsOverusing(const CpuOveruseMetrics& metrics) {
bool overusing = false;
- if (options_.enable_encode_usage_method)
- overusing = usage_->Value() >= options_.high_encode_usage_threshold_percent;
-
+ if (options_.enable_encode_usage_method) {
+ overusing = metrics.encode_usage_percent >=
+ options_.high_encode_usage_threshold_percent;
+ }
if (overusing) {
++checks_above_threshold_;
} else {
@@ -400,15 +406,17 @@ bool OveruseFrameDetector::IsOverusing() {
return checks_above_threshold_ >= options_.high_threshold_consecutive_count;
}
-bool OveruseFrameDetector::IsUnderusing(int64_t time_now) {
+bool OveruseFrameDetector::IsUnderusing(const CpuOveruseMetrics& metrics,
+ int64_t time_now) {
int delay = in_quick_rampup_ ? kQuickRampUpDelayMs : current_rampup_delay_ms_;
if (time_now < last_rampup_time_ + delay)
return false;
bool underusing = false;
- if (options_.enable_encode_usage_method)
- underusing = usage_->Value() < options_.low_encode_usage_threshold_percent;
-
+ if (options_.enable_encode_usage_method) {
+ underusing = metrics.encode_usage_percent <
+ options_.low_encode_usage_threshold_percent;
+ }
return underusing;
}
} // namespace webrtc
« no previous file with comments | « webrtc/video_engine/overuse_frame_detector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698