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 14d87245d79d8102ccda91ac0c4476be1787c956..b84f9db3228b75c26dbe79162fe5c2916e9ba5de 100644 |
--- a/remoting/protocol/webrtc_frame_scheduler_simple.cc |
+++ b/remoting/protocol/webrtc_frame_scheduler_simple.cc |
@@ -6,6 +6,7 @@ |
#include <algorithm> |
+#include "remoting/protocol/frame_stats.h" |
#include "remoting/protocol/webrtc_dummy_video_encoder.h" |
#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
@@ -70,6 +71,8 @@ void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() { |
void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss, |
base::TimeDelta rtt) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ rtt_estimate_ = rtt; |
} |
void WebrtcFrameSchedulerSimple::OnTargetBitrateChanged(int bitrate_kbps) { |
@@ -155,12 +158,20 @@ bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams( |
void WebrtcFrameSchedulerSimple::OnFrameEncoded( |
const WebrtcVideoEncoder::EncodedFrame& encoded_frame, |
- const webrtc::EncodedImageCallback::Result& send_result) { |
+ const webrtc::EncodedImageCallback::Result& send_result, |
+ HostFrameStats* frame_stats) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(frame_pending_); |
frame_pending_ = false; |
base::TimeTicks now = base::TimeTicks::Now(); |
+ |
+ if (frame_stats) { |
+ // Calculate |send_pending_delay| before refilling |pacing_bucket_|. |
+ frame_stats->send_pending_delay = |
+ std::max(base::TimeDelta(), pacing_bucket_.GetEmptyTime() - now); |
+ } |
+ |
pacing_bucket_.RefillOrSpill(encoded_frame.data.size(), now); |
if (encoded_frame.data.empty()) { |
@@ -174,6 +185,11 @@ void WebrtcFrameSchedulerSimple::OnFrameEncoded( |
} |
ScheduleNextFrame(now); |
+ |
+ if (frame_stats) { |
+ frame_stats->rtt_estimate = rtt_estimate_; |
+ frame_stats->bandwidth_estimate_kbps = pacing_bucket_.rate() * 8 / 1000; |
+ } |
} |
void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { |