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

Unified Diff: webrtc/video/overuse_frame_detector.cc

Issue 2633673002: Refactor OveruseFrameDetector to use timing in us units (Closed)
Patch Set: Rebased. Created 3 years, 11 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/overuse_frame_detector.h ('k') | webrtc/video/overuse_frame_detector_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/overuse_frame_detector.cc
diff --git a/webrtc/video/overuse_frame_detector.cc b/webrtc/video/overuse_frame_detector.cc
index f83b0f5ff205a6e61f8dc3c2e7f30aa62b22776b..b2cd7337cae77d3130cb46c6826540f88c9c6c8a 100644
--- a/webrtc/video/overuse_frame_detector.cc
+++ b/webrtc/video/overuse_frame_detector.cc
@@ -22,7 +22,6 @@
#include "webrtc/base/logging.h"
#include "webrtc/base/numerics/exp_filter.h"
#include "webrtc/common_video/include/frame_callback.h"
-#include "webrtc/system_wrappers/include/clock.h"
#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
#include <mach/mach.h>
@@ -203,7 +202,6 @@ class OveruseFrameDetector::CheckOveruseTask : public rtc::QueuedTask {
};
OveruseFrameDetector::OveruseFrameDetector(
- Clock* clock,
const CpuOveruseOptions& options,
ScalingObserverInterface* observer,
EncodedFrameObserver* encoder_timing,
@@ -213,10 +211,10 @@ OveruseFrameDetector::OveruseFrameDetector(
observer_(observer),
encoder_timing_(encoder_timing),
metrics_observer_(metrics_observer),
- clock_(clock),
num_process_times_(0),
- last_capture_time_ms_(-1),
- last_processed_capture_time_ms_(-1),
+ // TODO(nisse): Use rtc::Optional
+ last_capture_time_us_(-1),
+ last_processed_capture_time_us_(-1),
num_pixels_(0),
last_overuse_time_ms_(-1),
checks_above_threshold_(0),
@@ -260,11 +258,12 @@ bool OveruseFrameDetector::FrameSizeChanged(int num_pixels) const {
return false;
}
-bool OveruseFrameDetector::FrameTimeoutDetected(int64_t now) const {
+bool OveruseFrameDetector::FrameTimeoutDetected(int64_t now_us) const {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
- if (last_capture_time_ms_ == -1)
+ if (last_capture_time_us_ == -1)
return false;
- return (now - last_capture_time_ms_) > options_.frame_timeout_interval_ms;
+ return (now_us - last_capture_time_us_) >
+ options_.frame_timeout_interval_ms * rtc::kNumMicrosecsPerMillisec;
}
void OveruseFrameDetector::ResetAll(int num_pixels) {
@@ -272,32 +271,33 @@ void OveruseFrameDetector::ResetAll(int num_pixels) {
num_pixels_ = num_pixels;
usage_->Reset();
frame_timing_.clear();
- last_capture_time_ms_ = -1;
- last_processed_capture_time_ms_ = -1;
+ last_capture_time_us_ = -1;
+ last_processed_capture_time_us_ = -1;
num_process_times_ = 0;
metrics_ = rtc::Optional<CpuOveruseMetrics>();
}
void OveruseFrameDetector::FrameCaptured(const VideoFrame& frame,
- int64_t time_when_first_seen_ms) {
+ int64_t time_when_first_seen_us) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
if (FrameSizeChanged(frame.width() * frame.height()) ||
- FrameTimeoutDetected(time_when_first_seen_ms)) {
+ FrameTimeoutDetected(time_when_first_seen_us)) {
ResetAll(frame.width() * frame.height());
}
- if (last_capture_time_ms_ != -1)
- usage_->AddCaptureSample(time_when_first_seen_ms - last_capture_time_ms_);
+ if (last_capture_time_us_ != -1)
+ usage_->AddCaptureSample(
+ 1e-3 * (time_when_first_seen_us - last_capture_time_us_));
- last_capture_time_ms_ = time_when_first_seen_ms;
+ last_capture_time_us_ = time_when_first_seen_us;
- frame_timing_.push_back(FrameTiming(frame.ntp_time_ms(), frame.timestamp(),
- time_when_first_seen_ms));
+ frame_timing_.push_back(FrameTiming(frame.timestamp_us(), frame.timestamp(),
+ time_when_first_seen_us));
}
void OveruseFrameDetector::FrameSent(uint32_t timestamp,
- int64_t time_sent_in_ms) {
+ int64_t time_sent_in_us) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
// Delay before reporting actual encoding time, used to have the ability to
// detect total encoding time when encoding more than one layer. Encoding is
@@ -307,7 +307,7 @@ void OveruseFrameDetector::FrameSent(uint32_t timestamp,
static const int64_t kEncodingTimeMeasureWindowMs = 1000;
for (auto& it : frame_timing_) {
if (it.timestamp == timestamp) {
- it.last_send_ms = time_sent_in_ms;
+ it.last_send_us = time_sent_in_us;
break;
}
}
@@ -319,21 +319,26 @@ void OveruseFrameDetector::FrameSent(uint32_t timestamp,
// https://crbug.com/350106
while (!frame_timing_.empty()) {
FrameTiming timing = frame_timing_.front();
- if (time_sent_in_ms - timing.capture_ms < kEncodingTimeMeasureWindowMs)
+ if (time_sent_in_us - timing.capture_us <
+ kEncodingTimeMeasureWindowMs * rtc::kNumMicrosecsPerMillisec)
break;
- if (timing.last_send_ms != -1) {
- int encode_duration_ms =
- static_cast<int>(timing.last_send_ms - timing.capture_ms);
+ if (timing.last_send_us != -1) {
+ int encode_duration_us =
+ static_cast<int>(timing.last_send_us - timing.capture_us);
if (encoder_timing_) {
- encoder_timing_->OnEncodeTiming(timing.capture_ntp_ms,
- encode_duration_ms);
+ // TODO(nisse): Update encoder_timing_ to also use us units.
+ encoder_timing_->OnEncodeTiming(timing.capture_time_us /
+ rtc::kNumMicrosecsPerMillisec,
+ encode_duration_us /
+ rtc::kNumMicrosecsPerMillisec);
}
- if (last_processed_capture_time_ms_ != -1) {
- int64_t diff_ms = timing.capture_ms - last_processed_capture_time_ms_;
- usage_->AddSample(encode_duration_ms, diff_ms);
+ if (last_processed_capture_time_us_ != -1) {
+ int64_t diff_us = timing.capture_us - last_processed_capture_time_us_;
+ usage_->AddSample(1e-3 * encode_duration_us, 1e-3 * diff_us);
}
- last_processed_capture_time_ms_ = timing.capture_ms;
- EncodedFrameTimeMeasured(encode_duration_ms);
+ last_processed_capture_time_us_ = timing.capture_us;
+ EncodedFrameTimeMeasured(encode_duration_us /
+ rtc::kNumMicrosecsPerMillisec);
}
frame_timing_.pop_front();
}
@@ -345,7 +350,7 @@ void OveruseFrameDetector::CheckForOveruse() {
if (num_process_times_ <= options_.min_process_count || !metrics_)
return;
- int64_t now = clock_->TimeInMilliseconds();
+ int64_t now_ms = rtc::TimeMillis();
if (IsOverusing(*metrics_)) {
// If the last thing we did was going up, and now have to back down, we need
@@ -353,7 +358,7 @@ void OveruseFrameDetector::CheckForOveruse() {
// back and forth between this load, the system doesn't seem to handle it.
bool check_for_backoff = last_rampup_time_ms_ > last_overuse_time_ms_;
if (check_for_backoff) {
- if (now - last_rampup_time_ms_ < kStandardRampUpDelayMs ||
+ if (now_ms - last_rampup_time_ms_ < kStandardRampUpDelayMs ||
num_overuse_detections_ > kMaxOverusesBeforeApplyRampupDelay) {
// Going up was not ok for very long, back off.
current_rampup_delay_ms_ *= kRampUpBackoffFactor;
@@ -365,15 +370,15 @@ void OveruseFrameDetector::CheckForOveruse() {
}
}
- last_overuse_time_ms_ = now;
+ last_overuse_time_ms_ = now_ms;
in_quick_rampup_ = false;
checks_above_threshold_ = 0;
++num_overuse_detections_;
if (observer_)
observer_->ScaleDown(kScaleReasonCpu);
- } else if (IsUnderusing(*metrics_, now)) {
- last_rampup_time_ms_ = now;
+ } else if (IsUnderusing(*metrics_, now_ms)) {
+ last_rampup_time_ms_ = now_ms;
in_quick_rampup_ = true;
if (observer_)
« no previous file with comments | « webrtc/video/overuse_frame_detector.h ('k') | webrtc/video/overuse_frame_detector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698