Chromium Code Reviews| Index: remoting/client/software_video_renderer.cc |
| diff --git a/remoting/client/software_video_renderer.cc b/remoting/client/software_video_renderer.cc |
| index 0bb2f03b5615a70bf5ac89a94fe0d7eb46172981..88e0baba2806bc46af95289838b8b585ba655ec3 100644 |
| --- a/remoting/client/software_video_renderer.cc |
| +++ b/remoting/client/software_video_renderer.cc |
| @@ -20,6 +20,8 @@ |
| #include "remoting/codec/video_decoder_vpx.h" |
| #include "remoting/proto/video.pb.h" |
| #include "remoting/protocol/frame_consumer.h" |
| +#include "remoting/protocol/frame_stats.h" |
| +#include "remoting/protocol/performance_tracker.h" |
| #include "remoting/protocol/session_config.h" |
| #include "third_party/libyuv/include/libyuv/convert_argb.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
| @@ -123,12 +125,14 @@ void SoftwareVideoRenderer::ProcessVideoPacket( |
| base::ScopedClosureRunner done_runner(done); |
| - if (perf_tracker_) |
| - perf_tracker_->RecordVideoPacketStats(*packet); |
| + std::unique_ptr<protocol::FrameStats> frame_stats(new protocol::FrameStats( |
| + protocol::FrameStats::GetForVideoPacket(*packet))); |
| // If the video packet is empty then drop it. Empty packets are used to |
| // maintain activity on the network. |
|
Jamie
2016/06/24 23:53:21
We are no longer just dropping the packet. Add a c
Sergey Ulanov
2016/06/25 05:34:03
Done.
|
| if (!packet->has_data() || packet->data().size() == 0) { |
| + if (perf_tracker_) |
| + perf_tracker_->RecordVideoFrameStats(*frame_stats); |
| return; |
| } |
| @@ -155,23 +159,22 @@ void SoftwareVideoRenderer::ProcessVideoPacket( |
| consumer_->AllocateFrame(source_size_); |
| frame->set_dpi(source_dpi_); |
| - int32_t frame_id = packet->frame_id(); |
| base::PostTaskAndReplyWithResult( |
| decode_task_runner_.get(), FROM_HERE, |
| base::Bind(&DoDecodeFrame, decoder_.get(), base::Passed(&packet), |
| base::Passed(&frame)), |
| base::Bind(&SoftwareVideoRenderer::RenderFrame, |
| - weak_factory_.GetWeakPtr(), frame_id, done_runner.Release())); |
| + weak_factory_.GetWeakPtr(), base::Passed(&frame_stats), |
| + done_runner.Release())); |
| } |
| void SoftwareVideoRenderer::RenderFrame( |
| - int32_t frame_id, |
| + std::unique_ptr<protocol::FrameStats> stats, |
| const base::Closure& done, |
| std::unique_ptr<webrtc::DesktopFrame> frame) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - if (perf_tracker_) |
| - perf_tracker_->OnFrameDecoded(frame_id); |
| + stats->time_decoded = base::TimeTicks::Now(); |
| if (!frame) { |
| if (!done.is_null()) |
| @@ -179,17 +182,20 @@ void SoftwareVideoRenderer::RenderFrame( |
| return; |
| } |
| - consumer_->DrawFrame(std::move(frame), |
| - base::Bind(&SoftwareVideoRenderer::OnFrameRendered, |
| - weak_factory_.GetWeakPtr(), frame_id, done)); |
| + consumer_->DrawFrame( |
| + std::move(frame), |
| + base::Bind(&SoftwareVideoRenderer::OnFrameRendered, |
| + weak_factory_.GetWeakPtr(), base::Passed(&stats), done)); |
| } |
| -void SoftwareVideoRenderer::OnFrameRendered(int32_t frame_id, |
| - const base::Closure& done) { |
| +void SoftwareVideoRenderer::OnFrameRendered( |
| + std::unique_ptr<protocol::FrameStats> stats, |
| + const base::Closure& done) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| + stats->time_rendered = base::TimeTicks::Now(); |
| if (perf_tracker_) |
| - perf_tracker_->OnFramePainted(frame_id); |
| + perf_tracker_->RecordVideoFrameStats(*stats); |
| if (!done.is_null()) |
| done.Run(); |