diff options
author | hclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-05 20:12:49 +0000 |
---|---|---|
committer | hclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-05 20:12:49 +0000 |
commit | 27e7d3cd9507411ab96bf43d3e5dd6dada53e105 (patch) | |
tree | a5243cc3548f9bde4f887dd0dfc6bf049fed2cbf /remoting/client/chromoting_client.cc | |
parent | d20348675866d9a0369dc5a196d2a26399e402c9 (diff) | |
download | chromium_src-27e7d3cd9507411ab96bf43d3e5dd6dada53e105.zip chromium_src-27e7d3cd9507411ab96bf43d3e5dd6dada53e105.tar.gz chromium_src-27e7d3cd9507411ab96bf43d3e5dd6dada53e105.tar.bz2 |
Report decode and render latency for Chromoting
Uses RunningAverage to record these numbers, added JS interface for reporting.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/6767002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80515 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/client/chromoting_client.cc')
-rw-r--r-- | remoting/client/chromoting_client.cc | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/remoting/client/chromoting_client.cc b/remoting/client/chromoting_client.cc index bf1ad39..cdfd4ab 100644 --- a/remoting/client/chromoting_client.cc +++ b/remoting/client/chromoting_client.cc @@ -154,8 +154,16 @@ void ChromotingClient::DispatchPacket() { packet_being_processed_ = true; ScopedTracer tracer("Handle video packet"); + + // Measure the latency between the last packet being received and presented. + bool last_packet = (packet->flags() & VideoPacket::LAST_PACKET) != 0; + base::Time decode_start; + if (last_packet) + decode_start = base::Time::Now(); + rectangle_decoder_->DecodePacket( - packet, NewTracedMethod(this, &ChromotingClient::OnPacketDone)); + packet, NewTracedMethod(this, &ChromotingClient::OnPacketDone, + last_packet, decode_start)); } void ChromotingClient::OnConnectionOpened(protocol::ConnectionToHost* conn) { @@ -194,22 +202,31 @@ void ChromotingClient::SetConnectionState(ConnectionState s) { Repaint(); } -void ChromotingClient::OnPacketDone() { +void ChromotingClient::OnPacketDone(bool last_packet, + base::Time decode_start) { if (message_loop() != MessageLoop::current()) { message_loop()->PostTask( FROM_HERE, - NewTracedMethod(this, &ChromotingClient::OnPacketDone)); + NewTracedMethod(this, &ChromotingClient::OnPacketDone, + last_packet, decode_start)); return; } TraceContext::tracer()->PrintString("Packet done"); + // Record the latency between the last packet being received and presented. + if (last_packet) { + stats_.video_decode()->Record( + (base::Time::Now() - decode_start).InMilliseconds()); + } + received_packets_.front().done->Run(); delete received_packets_.front().done; received_packets_.pop_front(); packet_being_processed_ = false; + // Process the next video packet. DispatchPacket(); } |