Index: remoting/protocol/webrtc_frame_scheduler_simple.cc |
diff --git a/remoting/protocol/webrtc_frame_scheduler_simple.cc b/remoting/protocol/webrtc_frame_scheduler_simple.cc |
index 31494ae07840837f3c3d9399bdfdeb4694442a50..6e40578d0e6c5bef8e85d6a14b054bc10dbf63ad 100644 |
--- a/remoting/protocol/webrtc_frame_scheduler_simple.cc |
+++ b/remoting/protocol/webrtc_frame_scheduler_simple.cc |
@@ -56,15 +56,44 @@ int64_t GetRegionArea(const webrtc::DesktopRegion& region) { |
WebrtcFrameSchedulerSimple::WebrtcFrameSchedulerSimple() |
: pacing_bucket_(LeakyBucket::kUnlimitedDepth, 0), |
frame_processing_delay_us_(kStatsWindow), |
- updated_region_area_(kStatsWindow) {} |
+ updated_region_area_(kStatsWindow), |
+ weak_factory_(this) {} |
WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {} |
+void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ key_frame_request_ = true; |
+ if (!capture_timer_.IsRunning()) |
+ ScheduleNextFrame(base::TimeTicks::Now()); |
+} |
+ |
+void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss, |
+ base::TimeDelta rtt) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+} |
+ |
+void WebrtcFrameSchedulerSimple::OnTargetBitrateChanged(int bitrate_kbps) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ base::TimeTicks now = base::TimeTicks::Now(); |
+ pacing_bucket_.UpdateRate(bitrate_kbps * 1000 / 8, now); |
+ ScheduleNextFrame(now); |
+} |
+ |
+base::WeakPtr<NetworkStateObserver> |
+WebrtcFrameSchedulerSimple::GetNetworkStateObserver() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ return weak_factory_.GetWeakPtr(); |
+} |
+ |
void WebrtcFrameSchedulerSimple::Start(const base::Closure& capture_callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
capture_callback_ = capture_callback; |
ScheduleNextFrame(base::TimeTicks::Now()); |
} |
void WebrtcFrameSchedulerSimple::Pause(bool pause) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
paused_ = pause; |
if (paused_) { |
capture_timer_.Stop(); |
@@ -73,19 +102,11 @@ void WebrtcFrameSchedulerSimple::Pause(bool pause) { |
} |
} |
-void WebrtcFrameSchedulerSimple::SetKeyFrameRequest() { |
- key_frame_request_ = true; |
-} |
- |
-void WebrtcFrameSchedulerSimple::SetTargetBitrate(int bitrate_kbps) { |
- base::TimeTicks now = base::TimeTicks::Now(); |
- pacing_bucket_.UpdateRate(bitrate_kbps * 1000 / 8, now); |
- ScheduleNextFrame(now); |
-} |
- |
bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams( |
const webrtc::DesktopFrame& frame, |
WebrtcVideoEncoder::FrameParams* params_out) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
base::TimeTicks now = base::TimeTicks::Now(); |
if (frame.updated_region().is_empty() && !top_off_is_active_ && |
@@ -137,6 +158,8 @@ bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams( |
void WebrtcFrameSchedulerSimple::OnFrameEncoded( |
const WebrtcVideoEncoder::EncodedFrame& encoded_frame, |
const webrtc::EncodedImageCallback::Result& send_result) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
base::TimeTicks now = base::TimeTicks::Now(); |
pacing_bucket_.RefillOrSpill(encoded_frame.data.size(), now); |
@@ -154,6 +177,8 @@ void WebrtcFrameSchedulerSimple::OnFrameEncoded( |
} |
void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
// Don't capture frames when paused or target bitrate is 0 or there is |
// no capture callback set. |
if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null()) |
@@ -181,6 +206,8 @@ void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { |
} |
void WebrtcFrameSchedulerSimple::CaptureNextFrame() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
last_capture_started_time_ = base::TimeTicks::Now(); |
capture_callback_.Run(); |
} |