summaryrefslogtreecommitdiffstats
path: root/remoting/client/chromoting_client.cc
diff options
context:
space:
mode:
authorhclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 20:12:49 +0000
committerhclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 20:12:49 +0000
commit27e7d3cd9507411ab96bf43d3e5dd6dada53e105 (patch)
treea5243cc3548f9bde4f887dd0dfc6bf049fed2cbf /remoting/client/chromoting_client.cc
parentd20348675866d9a0369dc5a196d2a26399e402c9 (diff)
downloadchromium_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.cc23
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();
}