| Index: remoting/protocol/performance_tracker.cc
|
| diff --git a/remoting/protocol/performance_tracker.cc b/remoting/protocol/performance_tracker.cc
|
| index 271336b588dc68f3594bcdeb12b82522287ed379..283e59b02bc62b94af8fe9fa1b4f09b493e1068a 100644
|
| --- a/remoting/protocol/performance_tracker.cc
|
| +++ b/remoting/protocol/performance_tracker.cc
|
| @@ -20,6 +20,13 @@ const char kVideoPaintLatencyHistogram[] = "Chromoting.Video.PaintLatency";
|
| const char kVideoFrameRateHistogram[] = "Chromoting.Video.FrameRate";
|
| const char kVideoPacketRateHistogram[] = "Chromoting.Video.PacketRate";
|
| const char kVideoBandwidthHistogram[] = "Chromoting.Video.Bandwidth";
|
| +const char kCapturePendingLatencyHistogram[] =
|
| + "Chromoting.Video.CapturePendingLatency";
|
| +const char kCaptureOverheadHistogram[] = "Chromoting.Video.CaptureOverhead";
|
| +const char kEncodePendingLatencyHistogram[] =
|
| + "Chromoting.Video.EncodePendingLatency";
|
| +const char kSendPendingLatencyHistogram[] =
|
| + "Chromoting.Video.SendPendingLatency";
|
|
|
| // Custom count and custom time histograms are log-scaled by default. This
|
| // results in fine-grained buckets at lower values and wider-ranged buckets
|
| @@ -54,6 +61,16 @@ const int kBandwidthHistogramBuckets = 100;
|
| // boundary value, so set to 101.
|
| const int kMaxFramesPerSec = 101;
|
|
|
| +
|
| +void UpdateUmaEnumHistogramStub(const std::string& histogram_name,
|
| + int64_t value,
|
| + int histogram_max) {}
|
| +
|
| +void UpdateUmaCustomHistogramStub(const std::string& histogram_name,
|
| + int64_t value,
|
| + int histogram_min,
|
| + int histogram_max,
|
| + int histogram_buckets) {}
|
| } // namespace
|
|
|
| namespace remoting {
|
| @@ -69,7 +86,11 @@ PerformanceTracker::PerformanceTracker()
|
| video_encode_ms_(kLatencySampleSize),
|
| video_decode_ms_(kLatencySampleSize),
|
| video_paint_ms_(kLatencySampleSize),
|
| - round_trip_ms_(kLatencySampleSize) {}
|
| + round_trip_ms_(kLatencySampleSize) {
|
| + uma_custom_counts_updater_ = base::Bind(&UpdateUmaCustomHistogramStub);
|
| + uma_custom_times_updater_ = base::Bind(&UpdateUmaCustomHistogramStub);
|
| + uma_enum_histogram_updater_ = base::Bind(&UpdateUmaEnumHistogramStub);
|
| +}
|
|
|
| PerformanceTracker::~PerformanceTracker() {}
|
|
|
| @@ -77,6 +98,10 @@ void PerformanceTracker::SetUpdateUmaCallbacks(
|
| UpdateUmaCustomHistogramCallback update_uma_custom_counts_callback,
|
| UpdateUmaCustomHistogramCallback update_uma_custom_times_callback,
|
| UpdateUmaEnumHistogramCallback update_uma_enum_histogram_callback) {
|
| + DCHECK(!update_uma_custom_counts_callback.is_null());
|
| + DCHECK(!update_uma_custom_times_callback.is_null());
|
| + DCHECK(!update_uma_enum_histogram_callback.is_null());
|
| +
|
| uma_custom_counts_updater_ = update_uma_custom_counts_callback;
|
| uma_custom_times_updater_ = update_uma_custom_times_callback;
|
| uma_enum_histogram_updater_ = update_uma_enum_histogram_callback;
|
| @@ -105,11 +130,10 @@ void PerformanceTracker::RecordVideoPacketStats(const VideoPacket& packet) {
|
|
|
| round_trip_ms_.Record(round_trip_latency.InMilliseconds());
|
|
|
| - if (!uma_custom_times_updater_.is_null())
|
| - uma_custom_times_updater_.Run(
|
| - kRoundTripLatencyHistogram, round_trip_latency.InMilliseconds(),
|
| - kLatencyHistogramMinMs, kLatencyHistogramMaxMs,
|
| - kLatencyHistogramBuckets);
|
| + uma_custom_times_updater_.Run(
|
| + kRoundTripLatencyHistogram, round_trip_latency.InMilliseconds(),
|
| + kLatencyHistogramMinMs, kLatencyHistogramMaxMs,
|
| + kLatencyHistogramBuckets);
|
| }
|
|
|
| // If the packet is empty, there are no other stats to update.
|
| @@ -121,49 +145,71 @@ void PerformanceTracker::RecordVideoPacketStats(const VideoPacket& packet) {
|
|
|
| if (packet.has_capture_time_ms()) {
|
| video_capture_ms_.Record(packet.capture_time_ms());
|
| - if (!uma_custom_times_updater_.is_null())
|
| - uma_custom_times_updater_.Run(
|
| - kVideoCaptureLatencyHistogram, packet.capture_time_ms(),
|
| - kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| - kVideoActionsHistogramsBuckets);
|
| + uma_custom_times_updater_.Run(
|
| + kVideoCaptureLatencyHistogram, packet.capture_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| }
|
|
|
| if (packet.has_encode_time_ms()) {
|
| video_encode_ms_.Record(packet.encode_time_ms());
|
| - if (!uma_custom_times_updater_.is_null())
|
| - uma_custom_times_updater_.Run(
|
| - kVideoEncodeLatencyHistogram, packet.encode_time_ms(),
|
| - kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| - kVideoActionsHistogramsBuckets);
|
| + uma_custom_times_updater_.Run(
|
| + kVideoEncodeLatencyHistogram, packet.encode_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| + }
|
| +
|
| + if (packet.has_capture_pending_time_ms()) {
|
| + uma_custom_times_updater_.Run(
|
| + kCapturePendingLatencyHistogram, packet.capture_pending_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| + }
|
| +
|
| + if (packet.has_capture_overhead_time_ms()) {
|
| + uma_custom_times_updater_.Run(
|
| + kCaptureOverheadHistogram, packet.capture_overhead_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| + }
|
| +
|
| + if (packet.has_encode_pending_time_ms()) {
|
| + uma_custom_times_updater_.Run(
|
| + kEncodePendingLatencyHistogram, packet.encode_pending_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| + }
|
| +
|
| + if (packet.has_send_pending_time_ms()) {
|
| + uma_custom_times_updater_.Run(
|
| + kSendPendingLatencyHistogram, packet.send_pending_time_ms(),
|
| + kVideoActionsHistogramsMinMs, kVideoActionsHistogramsMaxMs,
|
| + kVideoActionsHistogramsBuckets);
|
| }
|
| }
|
|
|
| void PerformanceTracker::RecordDecodeTime(double value) {
|
| video_decode_ms_.Record(value);
|
| - if (!uma_custom_times_updater_.is_null())
|
| - uma_custom_times_updater_.Run(
|
| - kVideoDecodeLatencyHistogram, value, kVideoActionsHistogramsMinMs,
|
| - kVideoActionsHistogramsMaxMs, kVideoActionsHistogramsBuckets);
|
| + uma_custom_times_updater_.Run(
|
| + kVideoDecodeLatencyHistogram, value, kVideoActionsHistogramsMinMs,
|
| + kVideoActionsHistogramsMaxMs, kVideoActionsHistogramsBuckets);
|
| }
|
|
|
| void PerformanceTracker::RecordPaintTime(double value) {
|
| video_paint_ms_.Record(value);
|
| - if (!uma_custom_times_updater_.is_null())
|
| - uma_custom_times_updater_.Run(
|
| - kVideoPaintLatencyHistogram, value, kVideoActionsHistogramsMinMs,
|
| - kVideoActionsHistogramsMaxMs, kVideoActionsHistogramsBuckets);
|
| + uma_custom_times_updater_.Run(
|
| + kVideoPaintLatencyHistogram, value, kVideoActionsHistogramsMinMs,
|
| + kVideoActionsHistogramsMaxMs, kVideoActionsHistogramsBuckets);
|
| }
|
|
|
| void PerformanceTracker::UploadRateStatsToUma() {
|
| - if (!uma_enum_histogram_updater_.is_null()) {
|
| - uma_enum_histogram_updater_.Run(kVideoFrameRateHistogram,
|
| - video_frame_rate(), kMaxFramesPerSec);
|
| - uma_enum_histogram_updater_.Run(kVideoPacketRateHistogram,
|
| - video_packet_rate(), kMaxFramesPerSec);
|
| - uma_custom_counts_updater_.Run(
|
| - kVideoBandwidthHistogram, video_bandwidth(), kBandwidthHistogramMinBps,
|
| - kBandwidthHistogramMaxBps, kBandwidthHistogramBuckets);
|
| - }
|
| + uma_enum_histogram_updater_.Run(kVideoFrameRateHistogram, video_frame_rate(),
|
| + kMaxFramesPerSec);
|
| + uma_enum_histogram_updater_.Run(kVideoPacketRateHistogram,
|
| + video_packet_rate(), kMaxFramesPerSec);
|
| + uma_custom_counts_updater_.Run(
|
| + kVideoBandwidthHistogram, video_bandwidth(), kBandwidthHistogramMinBps,
|
| + kBandwidthHistogramMaxBps, kBandwidthHistogramBuckets);
|
| }
|
|
|
| void PerformanceTracker::OnPauseStateChanged(bool paused) {
|
|
|