diff options
author | Niels Möller <nisse@webrtc.org> | 2018-01-31 16:09:31 +0100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2018-02-13 15:45:03 +0000 |
commit | 73f29cbcc104063b7297f785bf9bab417e72fbfb (patch) | |
tree | 02904cda4eeefb53ae1d9cda982f1709a2094ff5 /video/overuse_frame_detector.cc | |
parent | 2d06e366e86be59961335c150fa99abf96e2750e (diff) | |
download | webrtc-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.cc | 27 |
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 = |