Index: remoting/protocol/performance_tracker.cc |
diff --git a/remoting/protocol/performance_tracker.cc b/remoting/protocol/performance_tracker.cc |
index 59e093d30e692baf6fe8cc27e726932f3fd9645b..3cc24f4ffaa261578673d94a52fbde6433ffc330 100644 |
--- a/remoting/protocol/performance_tracker.cc |
+++ b/remoting/protocol/performance_tracker.cc |
@@ -107,7 +107,7 @@ void PerformanceTracker::SetUpdateUmaCallbacks( |
uma_enum_histogram_updater_ = update_uma_enum_histogram_callback; |
} |
-void PerformanceTracker::RecordVideoFrameStats(const FrameStats& stats) { |
+void PerformanceTracker::OnVideoFrameStats(const FrameStats& stats) { |
if (!is_paused_ && !upload_uma_stats_timer_.IsRunning()) { |
upload_uma_stats_timer_.Start( |
FROM_HERE, base::TimeDelta::FromSeconds(kStatsUpdatePeriodSeconds), |
@@ -119,72 +119,77 @@ void PerformanceTracker::RecordVideoFrameStats(const FrameStats& stats) { |
video_packet_rate_.Record(1); |
// Use only non-empty frames to estimate frame rate. |
- if (stats.frame_size) |
+ if (stats.host_stats.frame_size) |
video_frame_rate_.Record(1); |
- video_bandwidth_.Record(stats.frame_size); |
+ video_bandwidth_.Record(stats.host_stats.frame_size); |
- if (stats.capture_delay != base::TimeDelta::Max()) { |
- video_capture_ms_.Record(stats.capture_delay.InMilliseconds()); |
+ if (stats.host_stats.capture_delay != base::TimeDelta::Max()) { |
+ video_capture_ms_.Record(stats.host_stats.capture_delay.InMilliseconds()); |
uma_custom_times_updater_.Run( |
- kVideoCaptureLatencyHistogram, stats.capture_delay.InMilliseconds(), |
+ kVideoCaptureLatencyHistogram, |
+ stats.host_stats.capture_delay.InMilliseconds(), |
kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
kVideoActionsHistogramsBuckets); |
} |
- if (stats.encode_delay != base::TimeDelta::Max()) { |
- video_encode_ms_.Record(stats.encode_delay.InMilliseconds()); |
+ if (stats.host_stats.encode_delay != base::TimeDelta::Max()) { |
+ video_encode_ms_.Record(stats.host_stats.encode_delay.InMilliseconds()); |
uma_custom_times_updater_.Run( |
- kVideoEncodeLatencyHistogram, stats.encode_delay.InMilliseconds(), |
+ kVideoEncodeLatencyHistogram, |
+ stats.host_stats.encode_delay.InMilliseconds(), |
kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
kVideoActionsHistogramsBuckets); |
} |
- if (stats.capture_pending_delay != base::TimeDelta::Max()) { |
- uma_custom_times_updater_.Run(kCapturePendingLatencyHistogram, |
- stats.capture_pending_delay.InMilliseconds(), |
- kVideoActionsHistogramsMinMs, |
- kVideoActionsHistogramsMaxMs, |
- kVideoActionsHistogramsBuckets); |
+ if (stats.host_stats.capture_pending_delay != base::TimeDelta::Max()) { |
+ uma_custom_times_updater_.Run( |
+ kCapturePendingLatencyHistogram, |
+ stats.host_stats.capture_pending_delay.InMilliseconds(), |
+ kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
+ kVideoActionsHistogramsBuckets); |
} |
- if (stats.capture_overhead_delay != base::TimeDelta::Max()) { |
- uma_custom_times_updater_.Run(kCaptureOverheadHistogram, |
- stats.capture_overhead_delay.InMilliseconds(), |
- kVideoActionsHistogramsMinMs, |
- kVideoActionsHistogramsMaxMs, |
- kVideoActionsHistogramsBuckets); |
+ if (stats.host_stats.capture_overhead_delay != base::TimeDelta::Max()) { |
+ uma_custom_times_updater_.Run( |
+ kCaptureOverheadHistogram, |
+ stats.host_stats.capture_overhead_delay.InMilliseconds(), |
+ kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
+ kVideoActionsHistogramsBuckets); |
} |
- if (stats.encode_pending_delay != base::TimeDelta::Max()) { |
- uma_custom_times_updater_.Run(kEncodePendingLatencyHistogram, |
- stats.encode_pending_delay.InMilliseconds(), |
- kVideoActionsHistogramsMinMs, |
- kVideoActionsHistogramsMaxMs, |
- kVideoActionsHistogramsBuckets); |
+ if (stats.host_stats.encode_pending_delay != base::TimeDelta::Max()) { |
+ uma_custom_times_updater_.Run( |
+ kEncodePendingLatencyHistogram, |
+ stats.host_stats.encode_pending_delay.InMilliseconds(), |
+ kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
+ kVideoActionsHistogramsBuckets); |
} |
- if (stats.send_pending_delay != base::TimeDelta::Max()) { |
+ if (stats.host_stats.send_pending_delay != base::TimeDelta::Max()) { |
uma_custom_times_updater_.Run( |
- kSendPendingLatencyHistogram, stats.send_pending_delay.InMilliseconds(), |
+ kSendPendingLatencyHistogram, |
+ stats.host_stats.send_pending_delay.InMilliseconds(), |
kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
kVideoActionsHistogramsBuckets); |
} |
- DCHECK(!stats.time_received.is_null()); |
+ DCHECK(!stats.client_stats.time_received.is_null()); |
// Report decode and render delay only for non-empty frames. |
- if (stats.frame_size > 0) { |
- DCHECK(!stats.time_rendered.is_null()); |
- DCHECK(!stats.time_decoded.is_null()); |
- base::TimeDelta decode_delay = stats.time_decoded - stats.time_received; |
+ if (stats.host_stats.frame_size > 0) { |
+ DCHECK(!stats.client_stats.time_rendered.is_null()); |
+ DCHECK(!stats.client_stats.time_decoded.is_null()); |
+ base::TimeDelta decode_delay = |
+ stats.client_stats.time_decoded - stats.client_stats.time_received; |
video_decode_ms_.Record(decode_delay.InMilliseconds()); |
uma_custom_times_updater_.Run( |
kVideoDecodeLatencyHistogram, decode_delay.InMilliseconds(), |
kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs, |
kVideoActionsHistogramsBuckets); |
- base::TimeDelta render_delay = stats.time_rendered - stats.time_decoded; |
+ base::TimeDelta render_delay = |
+ stats.client_stats.time_rendered - stats.client_stats.time_decoded; |
video_paint_ms_.Record(render_delay.InMilliseconds()); |
uma_custom_times_updater_.Run( |
kVideoPaintLatencyHistogram, render_delay.InMilliseconds(), |
@@ -194,31 +199,35 @@ void PerformanceTracker::RecordVideoFrameStats(const FrameStats& stats) { |
// |latest_event_timestamp| is set only for the first frame after an input |
// event. |
- if (stats.latest_event_timestamp.is_null()) |
+ if (stats.host_stats.latest_event_timestamp.is_null()) |
return; |
// For empty frames use time_received as time_rendered. |
- base::TimeTicks time_rendered = |
- (stats.frame_size > 0) ? stats.time_rendered : stats.time_received; |
+ base::TimeTicks time_rendered = (stats.host_stats.frame_size > 0) |
+ ? stats.client_stats.time_rendered |
+ : stats.client_stats.time_received; |
base::TimeDelta round_trip_latency = |
- time_rendered - stats.latest_event_timestamp; |
+ time_rendered - stats.host_stats.latest_event_timestamp; |
round_trip_ms_.Record(round_trip_latency.InMilliseconds()); |
uma_custom_times_updater_.Run( |
kRoundTripLatencyHistogram, round_trip_latency.InMilliseconds(), |
kLatencyHistogramMinMs, kLatencyHistogramMaxMs, kLatencyHistogramBuckets); |
// Report estimated network latency. |
- if (stats.capture_delay != base::TimeDelta::Max() && |
- stats.encode_delay != base::TimeDelta::Max() && |
- stats.capture_pending_delay != base::TimeDelta::Max() && |
- stats.capture_overhead_delay != base::TimeDelta::Max() && |
- stats.encode_pending_delay != base::TimeDelta::Max() && |
- stats.send_pending_delay != base::TimeDelta::Max()) { |
+ if (stats.host_stats.capture_delay != base::TimeDelta::Max() && |
+ stats.host_stats.encode_delay != base::TimeDelta::Max() && |
+ stats.host_stats.capture_pending_delay != base::TimeDelta::Max() && |
+ stats.host_stats.capture_overhead_delay != base::TimeDelta::Max() && |
+ stats.host_stats.encode_pending_delay != base::TimeDelta::Max() && |
+ stats.host_stats.send_pending_delay != base::TimeDelta::Max()) { |
// Calculate total processing time on host and client. |
base::TimeDelta total_processing_latency = |
- stats.capture_delay + stats.encode_delay + stats.capture_pending_delay + |
- stats.capture_overhead_delay + stats.encode_pending_delay + |
- stats.send_pending_delay + (time_rendered - stats.time_received); |
+ stats.host_stats.capture_delay + stats.host_stats.encode_delay + |
+ stats.host_stats.capture_pending_delay + |
+ stats.host_stats.capture_overhead_delay + |
+ stats.host_stats.encode_pending_delay + |
+ stats.host_stats.send_pending_delay + |
+ (time_rendered - stats.client_stats.time_received); |
base::TimeDelta network_latency = |
round_trip_latency - total_processing_latency; |
uma_custom_times_updater_.Run( |