forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
projector_metrics.cc
146 lines (117 loc) · 5.03 KB
/
projector_metrics.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/projector/projector_metrics.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/metrics/histogram_functions.h"
#include "base/notreached.h"
#include "base/time/time.h"
namespace ash {
namespace {
constexpr char kProjectorToolbarHistogramName[] = "Ash.Projector.Toolbar";
constexpr char kProjectorMarkerColorHistogramName[] =
"Ash.Projector.MarkerColor";
constexpr char kProjectorCreationFlowHistogramName[] =
"Ash.Projector.CreationFlow";
constexpr char kProjectorCreationFlowErrorHistogramName[] =
"Ash.Projector.CreationFlowError";
constexpr char kProjectorTranscriptsCountHistogramName[] =
"Ash.Projector.TranscriptsCount";
constexpr char kProjectorPendingScreencastBatchIOTaskDurationHistogramName[] =
"Ash.Projector.PendingScreencastBatchIOTaskDuration";
constexpr char kProjectorPendingScreencastChangeIntervalHistogramName[] =
"Ash.Projector.PendingScreencastChangeInterval";
constexpr char kProjectorPolicyChangeHandlingErrorHistogramName[] =
"Ash.Projector.PolicyChangeHandlingError";
constexpr char
kProjectorOnDeviceToServerSpeechRecognitionFallbackReasonHistogramName[] =
"Ash.Projector.OnDeviceToServerSpeechRecognitionFallbackReason";
constexpr char kSpeechRecognitionEndStateOnDevice[] =
"Ash.Projector.SpeechRecognitionEndState.OnDevice";
constexpr char kSpeechRecognitionEndStateServerBased[] =
"Ash.Projector.SpeechRecognitionEndState.ServerBased";
// Appends the proper suffix to |prefix| based on whether the user is in tablet
// mode or not.
std::string GetHistogramName(const std::string& prefix) {
std::string mode =
Shell::Get()->IsInTabletMode() ? ".TabletMode" : ".ClamshellMode";
return prefix + mode;
}
inline std::string GetSpeechRecognitionHistogramName(bool is_on_device) {
return is_on_device ? kSpeechRecognitionEndStateOnDevice
: kSpeechRecognitionEndStateServerBased;
}
} // namespace
void RecordToolbarMetrics(ProjectorToolbar button) {
base::UmaHistogramEnumeration(
GetHistogramName(kProjectorToolbarHistogramName), button);
}
void RecordMarkerColorMetrics(ProjectorMarkerColor color) {
base::UmaHistogramEnumeration(
GetHistogramName(kProjectorMarkerColorHistogramName), color);
}
void RecordCreationFlowMetrics(ProjectorCreationFlow step) {
base::UmaHistogramEnumeration(
GetHistogramName(kProjectorCreationFlowHistogramName), step);
}
void RecordTranscriptsCount(size_t count) {
// We don't expect most screencasts to exceed 10,000 transcripts. If this
// limit is exceeded, then the metric would fall into an overflow bucket.
base::UmaHistogramCounts10000(
GetHistogramName(kProjectorTranscriptsCountHistogramName), count);
}
void RecordCreationFlowError(int message_id) {
ProjectorCreationFlowError error = ProjectorCreationFlowError::kMaxValue;
switch (message_id) {
case IDS_ASH_PROJECTOR_SAVE_FAILURE_TEXT:
error = ProjectorCreationFlowError::kSaveError;
break;
case IDS_ASH_PROJECTOR_FAILURE_MESSAGE_TRANSCRIPTION:
error = ProjectorCreationFlowError::kTranscriptionError;
break;
case IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT:
error = ProjectorCreationFlowError::kSessionAbortedByAudioPolicyDisabled;
break;
default:
NOTREACHED();
break;
}
base::UmaHistogramEnumeration(
GetHistogramName(kProjectorCreationFlowErrorHistogramName), error);
}
ASH_EXPORT void RecordPolicyChangeHandlingError(
ProjectorPolicyChangeHandlingError error) {
base::UmaHistogramEnumeration(
GetHistogramName(kProjectorPolicyChangeHandlingErrorHistogramName),
error);
}
ASH_EXPORT void RecordPendingScreencastBatchIOTaskDuration(
const base::TimeDelta duration) {
// We don't normally expect the duration is longer than 10s. If this limit is
// exceeded, then the metric would fall into an overflow bucket.
base::UmaHistogramTimes(
kProjectorPendingScreencastBatchIOTaskDurationHistogramName, duration);
}
ASH_EXPORT void RecordPendingScreencastChangeInterval(
const base::TimeDelta interval) {
// The interval doesn't include the change between last finished uploading to
// new start uploading. We don't normally expect the interval is longer than
// 10s. If this limit is exceeded, then the metric would fall into an overflow
// bucket.
base::UmaHistogramTimes(
kProjectorPendingScreencastChangeIntervalHistogramName, interval);
}
ASH_EXPORT void RecordOnDeviceToServerSpeechRecognitionFallbackReason(
OnDeviceToServerSpeechRecognitionFallbackReason reason) {
base::UmaHistogramEnumeration(
kProjectorOnDeviceToServerSpeechRecognitionFallbackReasonHistogramName,
reason);
}
ASH_EXPORT void RecordSpeechRecognitionEndState(
SpeechRecognitionEndState end_state,
bool is_on_device) {
base::UmaHistogramEnumeration(GetSpeechRecognitionHistogramName(is_on_device),
end_state);
}
} // namespace ash