| Index: remoting/protocol/webrtc_video_stream.cc
|
| diff --git a/remoting/protocol/webrtc_video_stream.cc b/remoting/protocol/webrtc_video_stream.cc
|
| index 04a8aba6b30cb541a83deab26aab870a923826af..8c2478bf7b1fd0ce525d646143071d111bd8f423 100644
|
| --- a/remoting/protocol/webrtc_video_stream.cc
|
| +++ b/remoting/protocol/webrtc_video_stream.cc
|
| @@ -26,7 +26,7 @@
|
| const char kStreamLabel[] = "screen_stream";
|
| const char kVideoLabel[] = "screen_video";
|
|
|
| -struct WebrtcVideoStream::FrameStats {
|
| +struct WebrtcVideoStream::FrameTimestamps {
|
| // The following fields is not null only for one frame after each incoming
|
| // input event.
|
| InputEventTimestamps input_event_timestamps;
|
| @@ -36,13 +36,11 @@
|
| base::TimeDelta capture_delay;
|
| base::TimeTicks encode_started_time;
|
| base::TimeTicks encode_ended_time;
|
| -
|
| - uint32_t capturer_id = 0;
|
| };
|
|
|
| -struct WebrtcVideoStream::EncodedFrameWithStats {
|
| +struct WebrtcVideoStream::EncodedFrameWithTimestamps {
|
| std::unique_ptr<WebrtcVideoEncoder::EncodedFrame> frame;
|
| - std::unique_ptr<FrameStats> stats;
|
| + std::unique_ptr<FrameTimestamps> timestamps;
|
| };
|
|
|
| WebrtcVideoStream::WebrtcVideoStream()
|
| @@ -141,8 +139,8 @@
|
| std::unique_ptr<webrtc::DesktopFrame> frame) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - captured_frame_stats_->capture_ended_time = base::TimeTicks::Now();
|
| - captured_frame_stats_->capture_delay =
|
| + captured_frame_timestamps_->capture_ended_time = base::TimeTicks::Now();
|
| + captured_frame_timestamps_->capture_delay =
|
| base::TimeDelta::FromMilliseconds(frame ? frame->capture_time_ms() : 0);
|
|
|
| WebrtcVideoEncoder::FrameParams frame_params;
|
| @@ -168,7 +166,7 @@
|
| encode_task_runner_.get(), FROM_HERE,
|
| base::Bind(&WebrtcVideoStream::EncodeFrame, encoder_.get(),
|
| base::Passed(std::move(frame)), frame_params,
|
| - base::Passed(std::move(captured_frame_stats_))),
|
| + base::Passed(std::move(captured_frame_timestamps_))),
|
| base::Bind(&WebrtcVideoStream::OnFrameEncoded,
|
| weak_factory_.GetWeakPtr()));
|
| }
|
| @@ -186,30 +184,29 @@
|
| void WebrtcVideoStream::CaptureNextFrame() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - captured_frame_stats_.reset(new FrameStats());
|
| - captured_frame_stats_->capture_started_time = base::TimeTicks::Now();
|
| - captured_frame_stats_->input_event_timestamps =
|
| + captured_frame_timestamps_.reset(new FrameTimestamps());
|
| + captured_frame_timestamps_->capture_started_time = base::TimeTicks::Now();
|
| + captured_frame_timestamps_->input_event_timestamps =
|
| event_timestamps_source_->TakeLastEventTimestamps();
|
|
|
| capturer_->CaptureFrame();
|
| }
|
|
|
| // static
|
| -WebrtcVideoStream::EncodedFrameWithStats WebrtcVideoStream::EncodeFrame(
|
| +WebrtcVideoStream::EncodedFrameWithTimestamps WebrtcVideoStream::EncodeFrame(
|
| WebrtcVideoEncoder* encoder,
|
| std::unique_ptr<webrtc::DesktopFrame> frame,
|
| WebrtcVideoEncoder::FrameParams params,
|
| - std::unique_ptr<WebrtcVideoStream::FrameStats> stats) {
|
| - EncodedFrameWithStats result;
|
| - result.stats = std::move(stats);
|
| - result.stats->encode_started_time = base::TimeTicks::Now();
|
| + std::unique_ptr<WebrtcVideoStream::FrameTimestamps> timestamps) {
|
| + EncodedFrameWithTimestamps result;
|
| + result.timestamps = std::move(timestamps);
|
| + result.timestamps->encode_started_time = base::TimeTicks::Now();
|
| result.frame = encoder->Encode(frame.get(), params);
|
| - result.stats->encode_ended_time = base::TimeTicks::Now();
|
| - result.stats->capturer_id = frame->capturer_id();
|
| + result.timestamps->encode_ended_time = base::TimeTicks::Now();
|
| return result;
|
| }
|
|
|
| -void WebrtcVideoStream::OnFrameEncoded(EncodedFrameWithStats frame) {
|
| +void WebrtcVideoStream::OnFrameEncoded(EncodedFrameWithTimestamps frame) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| HostFrameStats stats;
|
| @@ -221,7 +218,7 @@
|
|
|
| webrtc::EncodedImageCallback::Result result =
|
| webrtc_transport_->video_encoder_factory()->SendEncodedFrame(
|
| - *frame.frame, frame.stats->capture_started_time);
|
| + *frame.frame, frame.timestamps->capture_started_time);
|
| if (result.error != webrtc::EncodedImageCallback::Result::OK) {
|
| // TODO(sergeyu): Stop the stream.
|
| LOG(ERROR) << "Failed to send video frame.";
|
| @@ -232,28 +229,26 @@
|
| if (video_stats_dispatcher_.is_connected()) {
|
| stats.frame_size = frame.frame ? frame.frame->data.size() : 0;
|
|
|
| - if (!frame.stats->input_event_timestamps.is_null()) {
|
| + if (!frame.timestamps->input_event_timestamps.is_null()) {
|
| stats.capture_pending_delay =
|
| - frame.stats->capture_started_time -
|
| - frame.stats->input_event_timestamps.host_timestamp;
|
| + frame.timestamps->capture_started_time -
|
| + frame.timestamps->input_event_timestamps.host_timestamp;
|
| stats.latest_event_timestamp =
|
| - frame.stats->input_event_timestamps.client_timestamp;
|
| + frame.timestamps->input_event_timestamps.client_timestamp;
|
| }
|
|
|
| - stats.capture_delay = frame.stats->capture_delay;
|
| + stats.capture_delay = frame.timestamps->capture_delay;
|
|
|
| // Total overhead time for IPC and threading when capturing frames.
|
| - stats.capture_overhead_delay = (frame.stats->capture_ended_time -
|
| - frame.stats->capture_started_time) -
|
| + stats.capture_overhead_delay = (frame.timestamps->capture_ended_time -
|
| + frame.timestamps->capture_started_time) -
|
| stats.capture_delay;
|
|
|
| - stats.encode_pending_delay = frame.stats->encode_started_time -
|
| - frame.stats->capture_ended_time;
|
| -
|
| - stats.encode_delay = frame.stats->encode_ended_time -
|
| - frame.stats->encode_started_time;
|
| -
|
| - stats.capturer_id = frame.stats->capturer_id;
|
| + stats.encode_pending_delay = frame.timestamps->encode_started_time -
|
| + frame.timestamps->capture_ended_time;
|
| +
|
| + stats.encode_delay = frame.timestamps->encode_ended_time -
|
| + frame.timestamps->encode_started_time;
|
|
|
| video_stats_dispatcher_.OnVideoFrameStats(result.frame_id, stats);
|
| }
|
|
|