| Index: remoting/host/video_scheduler.cc
|
| diff --git a/remoting/host/video_scheduler.cc b/remoting/host/video_scheduler.cc
|
| index fab4136e918fa2b86d0db8cd0fa141b13b1bf659..24181c393a3085d6aaf405526656a024748a3e95 100644
|
| --- a/remoting/host/video_scheduler.cc
|
| +++ b/remoting/host/video_scheduler.cc
|
| @@ -36,6 +36,13 @@ static const int kMaxPendingFrames = 2;
|
| // RTO used in PseudoTCP, which is 250ms.
|
| static const int kKeepAlivePacketIntervalMs = 200;
|
|
|
| +static bool g_enable_timestamps = false;
|
| +
|
| +// static
|
| +void VideoScheduler::EnableTimestampsForTests() {
|
| + g_enable_timestamps = true;
|
| +}
|
| +
|
| VideoScheduler::VideoScheduler(
|
| scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner,
|
| @@ -86,7 +93,8 @@ void VideoScheduler::OnCaptureCompleted(webrtc::DesktopFrame* frame) {
|
| // that we don't start capturing frame n+2 before frame n is freed.
|
| encode_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&VideoScheduler::EncodeFrame, this,
|
| - base::Passed(&owned_frame), sequence_number_));
|
| + base::Passed(&owned_frame), sequence_number_,
|
| + base::TimeTicks::Now()));
|
|
|
| // If a frame was skipped, try to capture it again.
|
| if (did_skip_frame_) {
|
| @@ -337,7 +345,8 @@ void VideoScheduler::SendCursorShape(
|
|
|
| void VideoScheduler::EncodeFrame(
|
| scoped_ptr<webrtc::DesktopFrame> frame,
|
| - int64 sequence_number) {
|
| + int64 sequence_number,
|
| + base::TimeTicks timestamp) {
|
| DCHECK(encode_task_runner_->BelongsToCurrentThread());
|
|
|
| // Drop the frame if there were no changes.
|
| @@ -351,6 +360,10 @@ void VideoScheduler::EncodeFrame(
|
| scoped_ptr<VideoPacket> packet = encoder_->Encode(*frame);
|
| packet->set_client_sequence_number(sequence_number);
|
|
|
| + if (g_enable_timestamps) {
|
| + packet->set_timestamp(timestamp.ToInternalValue());
|
| + }
|
| +
|
| // Destroy the frame before sending |packet| because SendVideoPacket() may
|
| // trigger another frame to be captured, and the screen capturer expects the
|
| // old frame to be freed by then.
|
|
|