1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_ 6 #define UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_ 7 8 #include "base/metrics/histogram_functions.h" 9 10 // Check valid timing for start and end latency components. 11 #define CONFIRM_EVENT_TIMES_EXIST(start, end) \ 12 DCHECK(!start.is_null()); \ 13 DCHECK(!end.is_null()); 14 15 // Event latency that is mostly under 5 seconds. We should only use 100 buckets 16 // when needed. 17 #define UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS(name, start, \ 18 end) \ 19 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 20 base::UmaHistogramCustomCounts( \ 21 name, std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()), \ 22 1, 5000000, 100); 23 24 // Deprecated, use UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_MICROSECONDS instead. 25 // Event latency that is mostly under 1 second. We should only use 100 buckets 26 // when needed. 27 #define UMA_HISTOGRAM_INPUT_LATENCY_HIGH_RESOLUTION_MICROSECONDS(name, start, \ 28 end) \ 29 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 30 base::UmaHistogramCustomCounts( \ 31 name, std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()), \ 32 1, 1000000, 100); 33 34 // Event latency that is mostly under 100ms. We should only use 100 buckets 35 // when needed. This drops reports on clients with low-resolution clocks. 36 #define UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_MICROSECONDS(name, start, end) \ 37 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 38 base::TimeDelta frame_difference = end - start; \ 39 UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( \ 40 name, frame_difference, base::TimeDelta::FromMicroseconds(1), \ 41 base::TimeDelta::FromMilliseconds(100), 100); 42 43 // Event latency that is mostly under 1 second. We should only use 100 buckets 44 // when needed. This drops reports on clients with low-resolution clocks. 45 #define UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_1_SECOND_MAX_MICROSECONDS( \ 46 name, start, end) \ 47 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 48 base::TimeDelta frame_difference = end - start; \ 49 UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( \ 50 name, frame_difference, base::TimeDelta::FromMicroseconds(1), \ 51 base::TimeDelta::FromMilliseconds(1000), 100); 52 53 #define UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS(name, start, end) \ 54 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 55 base::UmaHistogramCustomCounts( \ 56 name, std::max(static_cast<int64_t>(0), (end - start).InMilliseconds()), \ 57 1, 1000, 50); 58 59 // Long touch/wheel scroll latency component that is mostly under 200ms. 60 #define UMA_HISTOGRAM_SCROLL_LATENCY_LONG_2(name, start, end) \ 61 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 62 base::Histogram::FactoryGet(name, 1000, 200000, 50, \ 63 base::HistogramBase::kUmaTargetedHistogramFlag) \ 64 ->Add( \ 65 std::max(static_cast<int64_t>(0), (end - start).InMicroseconds())); 66 67 // Short touch/wheel scroll latency component that is mostly under 50ms. 68 #define UMA_HISTOGRAM_SCROLL_LATENCY_SHORT_2(name, start, end) \ 69 CONFIRM_EVENT_TIMES_EXIST(start, end) \ 70 base::Histogram::FactoryGet(name, 1, 50000, 50, \ 71 base::HistogramBase::kUmaTargetedHistogramFlag) \ 72 ->Add( \ 73 std::max(static_cast<int64_t>(0), (end - start).InMicroseconds())); 74 75 #endif // UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_ 76