aboutsummaryrefslogtreecommitdiff
path: root/video/overuse_frame_detector.cc
diff options
context:
space:
mode:
authorNiels Möller <nisse@webrtc.org>2018-01-31 16:09:31 +0100
committerCommit Bot <commit-bot@chromium.org>2018-02-13 15:45:03 +0000
commit73f29cbcc104063b7297f785bf9bab417e72fbfb (patch)
tree02904cda4eeefb53ae1d9cda982f1709a2094ff5 /video/overuse_frame_detector.cc
parent2d06e366e86be59961335c150fa99abf96e2750e (diff)
downloadwebrtc-73f29cbcc104063b7297f785bf9bab417e72fbfb.tar.gz
Move creation of OveruseFrameDetector to VideoSendStream.
Intended to make it easier to wire up cpu-adaptation experiments. To setup the circular references between OveruseFrameDetector and VideoStreamEncoder, let the AdaptationObserverInterface pointer be an argument to StartCheckForOveruse. Bug: webrtc:8504 Change-Id: Ifcf7655ec65e637819d77f507552cb22a6aa5f0f Reviewed-on: https://webrtc-review.googlesource.com/33340 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22006}
Diffstat (limited to 'video/overuse_frame_detector.cc')
-rw-r--r--video/overuse_frame_detector.cc27
1 files changed, 15 insertions, 12 deletions
diff --git a/video/overuse_frame_detector.cc b/video/overuse_frame_detector.cc
index 35828fc43a..80d7025a82 100644
--- a/video/overuse_frame_detector.cc
+++ b/video/overuse_frame_detector.cc
@@ -478,8 +478,9 @@ OveruseFrameDetector::CreateProcessingUsage(
class OveruseFrameDetector::CheckOveruseTask : public rtc::QueuedTask {
public:
- explicit CheckOveruseTask(OveruseFrameDetector* overuse_detector)
- : overuse_detector_(overuse_detector) {
+ CheckOveruseTask(OveruseFrameDetector* overuse_detector,
+ AdaptationObserverInterface* observer)
+ : overuse_detector_(overuse_detector), observer_(observer) {
rtc::TaskQueue::Current()->PostDelayedTask(
std::unique_ptr<rtc::QueuedTask>(this), kTimeToFirstCheckForOveruseMs);
}
@@ -494,7 +495,7 @@ class OveruseFrameDetector::CheckOveruseTask : public rtc::QueuedTask {
RTC_CHECK(task_checker_.CalledSequentially());
if (!overuse_detector_)
return true; // This will make the task queue delete this task.
- overuse_detector_->CheckForOveruse();
+ overuse_detector_->CheckForOveruse(observer_);
rtc::TaskQueue::Current()->PostDelayedTask(
std::unique_ptr<rtc::QueuedTask>(this), kCheckForOveruseIntervalMs);
@@ -504,15 +505,15 @@ class OveruseFrameDetector::CheckOveruseTask : public rtc::QueuedTask {
}
rtc::SequencedTaskChecker task_checker_;
OveruseFrameDetector* overuse_detector_;
+ // Observer getting overuse reports.
+ AdaptationObserverInterface* observer_;
};
OveruseFrameDetector::OveruseFrameDetector(
const CpuOveruseOptions& options,
- AdaptationObserverInterface* observer,
CpuOveruseMetricsObserver* metrics_observer)
: check_overuse_task_(nullptr),
options_(options),
- observer_(observer),
metrics_observer_(metrics_observer),
num_process_times_(0),
// TODO(nisse): Use rtc::Optional
@@ -533,10 +534,12 @@ OveruseFrameDetector::~OveruseFrameDetector() {
RTC_DCHECK(!check_overuse_task_) << "StopCheckForOverUse must be called.";
}
-void OveruseFrameDetector::StartCheckForOveruse() {
+void OveruseFrameDetector::StartCheckForOveruse(
+ AdaptationObserverInterface* overuse_observer) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
RTC_DCHECK(!check_overuse_task_);
- check_overuse_task_ = new CheckOveruseTask(this);
+ RTC_DCHECK(overuse_observer != nullptr);
+ check_overuse_task_ = new CheckOveruseTask(this, overuse_observer);
}
void OveruseFrameDetector::StopCheckForOveruse() {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
@@ -616,8 +619,10 @@ void OveruseFrameDetector::FrameSent(uint32_t timestamp,
}
}
-void OveruseFrameDetector::CheckForOveruse() {
+void OveruseFrameDetector::CheckForOveruse(
+ AdaptationObserverInterface* observer) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
+ RTC_DCHECK(observer);
++num_process_times_;
if (num_process_times_ <= options_.min_process_count || !metrics_)
return;
@@ -647,14 +652,12 @@ void OveruseFrameDetector::CheckForOveruse() {
checks_above_threshold_ = 0;
++num_overuse_detections_;
- if (observer_)
- observer_->AdaptDown(kScaleReasonCpu);
+ observer->AdaptDown(kScaleReasonCpu);
} else if (IsUnderusing(*metrics_, now_ms)) {
last_rampup_time_ms_ = now_ms;
in_quick_rampup_ = true;
- if (observer_)
- observer_->AdaptUp(kScaleReasonCpu);
+ observer->AdaptUp(kScaleReasonCpu);
}
int rampup_delay =