latency_histogram_macros.h 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. #ifndef UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_
  5. #define UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_
  6. #include "base/metrics/histogram_functions.h"
  7. #include "base/time/time.h"
  8. // Check valid timing for start and end latency components.
  9. #define CONFIRM_EVENT_TIMES_EXIST(start, end) \
  10. DCHECK(!start.is_null()); \
  11. DCHECK(!end.is_null());
  12. // Event latency that is mostly under 5 seconds. We should only use 100 buckets
  13. // when needed.
  14. #define UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS(name, start, \
  15. end) \
  16. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  17. base::UmaHistogramCustomCounts( \
  18. name, std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()), \
  19. 1, 5000000, 100);
  20. // Deprecated, use UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_MICROSECONDS instead.
  21. // Event latency that is mostly under 1 second. We should only use 100 buckets
  22. // when needed.
  23. #define UMA_HISTOGRAM_INPUT_LATENCY_HIGH_RESOLUTION_MICROSECONDS(name, start, \
  24. end) \
  25. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  26. base::UmaHistogramCustomCounts( \
  27. name, std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()), \
  28. 1, 1000000, 100);
  29. // Event latency that is mostly under 100ms. We should only use 100 buckets
  30. // when needed. This drops reports on clients with low-resolution clocks.
  31. #define UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_MICROSECONDS(name, start, end) \
  32. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  33. base::TimeDelta frame_difference = end - start; \
  34. UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(name, frame_difference, \
  35. base::Microseconds(1), \
  36. base::Milliseconds(100), 100);
  37. // Event latency that is mostly under 1 second. We should only use 100 buckets
  38. // when needed. This drops reports on clients with low-resolution clocks.
  39. #define UMA_HISTOGRAM_INPUT_LATENCY_CUSTOM_1_SECOND_MAX_MICROSECONDS( \
  40. name, start, end) \
  41. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  42. base::TimeDelta frame_difference = end - start; \
  43. UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(name, frame_difference, \
  44. base::Microseconds(1), \
  45. base::Milliseconds(1000), 100);
  46. #define UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS(name, start, end) \
  47. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  48. base::UmaHistogramCustomCounts( \
  49. name, std::max(static_cast<int64_t>(0), (end - start).InMilliseconds()), \
  50. 1, 1000, 50);
  51. // Long touch/wheel scroll latency component that is mostly under 200ms.
  52. #define UMA_HISTOGRAM_SCROLL_LATENCY_LONG_2(name, start, end) \
  53. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  54. base::Histogram::FactoryGet(name, 1000, 200000, 50, \
  55. base::HistogramBase::kUmaTargetedHistogramFlag) \
  56. ->Add( \
  57. std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()));
  58. // Short touch/wheel scroll latency component that is mostly under 50ms.
  59. #define UMA_HISTOGRAM_SCROLL_LATENCY_SHORT_2(name, start, end) \
  60. CONFIRM_EVENT_TIMES_EXIST(start, end) \
  61. base::Histogram::FactoryGet(name, 1, 50000, 50, \
  62. base::HistogramBase::kUmaTargetedHistogramFlag) \
  63. ->Add( \
  64. std::max(static_cast<int64_t>(0), (end - start).InMicroseconds()));
  65. #endif // UI_LATENCY_LATENCY_HISTOGRAM_MACROS_H_