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

Unified Diff: remoting/protocol/webrtc_frame_scheduler_simple.cc

Issue 2431843002: Update WebrtcFrameScheduler to avoid concurrent captures. (Closed)
Patch Set: comments Created 4 years, 2 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
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 336276d6609e20169c69af3b4aa86f95ad614a83..14d87245d79d8102ccda91ac0c4476be1787c956 100644
--- a/remoting/protocol/webrtc_frame_scheduler_simple.cc
+++ b/remoting/protocol/webrtc_frame_scheduler_simple.cc
@@ -64,8 +64,7 @@ WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {}
void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() {
DCHECK(thread_checker_.CalledOnValidThread());
key_frame_request_ = true;
- if (!capture_timer_.IsRunning())
- ScheduleNextFrame(base::TimeTicks::Now());
+ ScheduleNextFrame(base::TimeTicks::Now());
}
void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss,
@@ -109,6 +108,7 @@ bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams(
if (frame.updated_region().is_empty() && !top_off_is_active_ &&
!key_frame_request_) {
+ frame_pending_ = false;
ScheduleNextFrame(now);
return false;
}
@@ -157,6 +157,8 @@ void WebrtcFrameSchedulerSimple::OnFrameEncoded(
const WebrtcVideoEncoder::EncodedFrame& encoded_frame,
const webrtc::EncodedImageCallback::Result& send_result) {
DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(frame_pending_);
+ frame_pending_ = false;
base::TimeTicks now = base::TimeTicks::Now();
pacing_bucket_.RefillOrSpill(encoded_frame.data.size(), now);
@@ -177,10 +179,10 @@ 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())
+ if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null() ||
+ frame_pending_) {
return;
+ }
// If this is not the first frame then capture next frame after the previous
// one has finished sending.
@@ -205,8 +207,9 @@ void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) {
void WebrtcFrameSchedulerSimple::CaptureNextFrame() {
DCHECK(thread_checker_.CalledOnValidThread());
-
+ DCHECK(!frame_pending_);
last_capture_started_time_ = base::TimeTicks::Now();
+ frame_pending_ = true;
capture_callback_.Run();
}
« no previous file with comments | « remoting/protocol/webrtc_frame_scheduler_simple.h ('k') | remoting/protocol/webrtc_frame_scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698