projector_metrics.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Copyright 2021 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. #include "ash/projector/projector_metrics.h"
  5. #include "ash/shell.h"
  6. #include "ash/strings/grit/ash_strings.h"
  7. #include "base/metrics/histogram_functions.h"
  8. #include "base/notreached.h"
  9. #include "base/time/time.h"
  10. namespace ash {
  11. namespace {
  12. constexpr char kProjectorToolbarHistogramName[] = "Ash.Projector.Toolbar";
  13. constexpr char kProjectorMarkerColorHistogramName[] =
  14. "Ash.Projector.MarkerColor";
  15. constexpr char kProjectorCreationFlowHistogramName[] =
  16. "Ash.Projector.CreationFlow";
  17. constexpr char kProjectorCreationFlowErrorHistogramName[] =
  18. "Ash.Projector.CreationFlowError";
  19. constexpr char kProjectorTranscriptsCountHistogramName[] =
  20. "Ash.Projector.TranscriptsCount";
  21. constexpr char kProjectorPendingScreencastBatchIOTaskDurationHistogramName[] =
  22. "Ash.Projector.PendingScreencastBatchIOTaskDuration";
  23. constexpr char kProjectorPendingScreencastChangeIntervalHistogramName[] =
  24. "Ash.Projector.PendingScreencastChangeInterval";
  25. constexpr char kProjectorPolicyChangeHandlingErrorHistogramName[] =
  26. "Ash.Projector.PolicyChangeHandlingError";
  27. // Appends the proper suffix to |prefix| based on whether the user is in tablet
  28. // mode or not.
  29. std::string GetHistogramName(const std::string& prefix) {
  30. std::string mode =
  31. Shell::Get()->IsInTabletMode() ? ".TabletMode" : ".ClamshellMode";
  32. return prefix + mode;
  33. }
  34. } // namespace
  35. void RecordToolbarMetrics(ProjectorToolbar button) {
  36. base::UmaHistogramEnumeration(
  37. GetHistogramName(kProjectorToolbarHistogramName), button);
  38. }
  39. void RecordMarkerColorMetrics(ProjectorMarkerColor color) {
  40. base::UmaHistogramEnumeration(
  41. GetHistogramName(kProjectorMarkerColorHistogramName), color);
  42. }
  43. void RecordCreationFlowMetrics(ProjectorCreationFlow step) {
  44. base::UmaHistogramEnumeration(
  45. GetHistogramName(kProjectorCreationFlowHistogramName), step);
  46. }
  47. void RecordTranscriptsCount(size_t count) {
  48. // We don't expect most screencasts to exceed 10,000 transcripts. If this
  49. // limit is exceeded, then the metric would fall into an overflow bucket.
  50. base::UmaHistogramCounts10000(
  51. GetHistogramName(kProjectorTranscriptsCountHistogramName), count);
  52. }
  53. void RecordCreationFlowError(int message_id) {
  54. ProjectorCreationFlowError error = ProjectorCreationFlowError::kMaxValue;
  55. switch (message_id) {
  56. case IDS_ASH_PROJECTOR_SAVE_FAILURE_TEXT:
  57. error = ProjectorCreationFlowError::kSaveError;
  58. break;
  59. case IDS_ASH_PROJECTOR_FAILURE_MESSAGE_TRANSCRIPTION:
  60. error = ProjectorCreationFlowError::kTranscriptionError;
  61. break;
  62. default:
  63. NOTREACHED();
  64. break;
  65. }
  66. base::UmaHistogramEnumeration(
  67. GetHistogramName(kProjectorCreationFlowErrorHistogramName), error);
  68. }
  69. ASH_EXPORT void RecordPolicyChangeHandlingError(
  70. ProjectorPolicyChangeHandlingError error) {
  71. base::UmaHistogramEnumeration(
  72. GetHistogramName(kProjectorPolicyChangeHandlingErrorHistogramName),
  73. error);
  74. }
  75. ASH_EXPORT void RecordPendingScreencastBatchIOTaskDuration(
  76. const base::TimeDelta duration) {
  77. // We don't normally expect the duration is longer than 10s. If this limit is
  78. // exceeded, then the metric would fall into an overflow bucket.
  79. base::UmaHistogramTimes(
  80. kProjectorPendingScreencastBatchIOTaskDurationHistogramName, duration);
  81. }
  82. ASH_EXPORT void RecordPendingScreencastChangeInterval(
  83. const base::TimeDelta interval) {
  84. // The interval doesn't include the change between last finished uploading to
  85. // new start uploading. We don't normally expect the interval is longer than
  86. // 10s. If this limit is exceeded, then the metric would fall into an overflow
  87. // bucket.
  88. base::UmaHistogramTimes(
  89. kProjectorPendingScreencastChangeIntervalHistogramName, interval);
  90. }
  91. } // namespace ash