forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
capture_mode_metrics.cc
139 lines (119 loc) · 5.36 KB
/
capture_mode_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
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/capture_mode/capture_mode_metrics.h"
#include "ash/shell.h"
#include "base/metrics/histogram_functions.h"
namespace ash {
namespace {
constexpr char kEndRecordingReasonHistogramName[] =
"Ash.CaptureModeController.EndRecordingReason";
constexpr char kBarButtonHistogramName[] =
"Ash.CaptureModeController.BarButtons";
constexpr char kCaptureAudioOnHistogramName[] =
"Ash.CaptureModeController.CaptureAudioOnMetric";
constexpr char kCaptureConfigurationHistogramName[] =
"Ash.CaptureModeController.CaptureConfiguration";
constexpr char kCaptureRegionAdjustmentHistogramName[] =
"Ash.CaptureModeController.CaptureRegionAdjusted";
constexpr char kConsecutiveScreenshotHistogramName[] =
"Ash.CaptureModeController.ConsecutiveScreenshots";
constexpr char kEntryHistogramName[] = "Ash.CaptureModeController.EntryPoint";
constexpr char kQuickActionHistogramName[] =
"Ash.CaptureModeController.QuickAction";
constexpr char kRecordTimeHistogramName[] =
"Ash.CaptureModeController.ScreenRecordingLength";
constexpr char kScreenshotsPerDayHistogramName[] =
"Ash.CaptureModeController.ScreenshotsPerDay";
constexpr char kScreenshotsPerWeekHistogramName[] =
"Ash.CaptureModeController.ScreenshotsPerWeek";
constexpr char kSwitchesFromInitialModeHistogramName[] =
"Ash.CaptureModeController.SwitchesFromInitialCaptureMode";
// Appends the proper suffix to |prefix| based on whether the user is in tablet
// mode or not.
std::string GetCaptureModeHistogramName(std::string prefix) {
prefix.append(Shell::Get()->IsInTabletMode() ? ".TabletMode"
: ".ClamshellMode");
return prefix;
}
// Maps given |type| and |source| to CaptureModeConfiguration enum.
CaptureModeConfiguration GetConfiguration(CaptureModeType type,
CaptureModeSource source) {
switch (source) {
case CaptureModeSource::kFullscreen:
return type == CaptureModeType::kImage
? CaptureModeConfiguration::kFullscreenScreenshot
: CaptureModeConfiguration::kFullscreenRecording;
case CaptureModeSource::kRegion:
return type == CaptureModeType::kImage
? CaptureModeConfiguration::kRegionScreenshot
: CaptureModeConfiguration::kRegionRecording;
case CaptureModeSource::kWindow:
return type == CaptureModeType::kImage
? CaptureModeConfiguration::kWindowScreenshot
: CaptureModeConfiguration::kWindowRecording;
default:
NOTREACHED();
return CaptureModeConfiguration::kFullscreenScreenshot;
}
}
} // namespace
void RecordEndRecordingReason(EndRecordingReason reason) {
base::UmaHistogramEnumeration(
GetCaptureModeHistogramName(kEndRecordingReasonHistogramName), reason);
}
void RecordCaptureModeBarButtonType(CaptureModeBarButtonType button_type) {
base::UmaHistogramEnumeration(
GetCaptureModeHistogramName(kBarButtonHistogramName), button_type);
}
void RecordCaptureModeConfiguration(CaptureModeType type,
CaptureModeSource source,
bool audio_on) {
base::UmaHistogramEnumeration(
GetCaptureModeHistogramName(kCaptureConfigurationHistogramName),
GetConfiguration(type, source));
if (type == CaptureModeType::kVideo) {
base::UmaHistogramBoolean(
GetCaptureModeHistogramName(kCaptureAudioOnHistogramName), audio_on);
}
}
void RecordCaptureModeEntryType(CaptureModeEntryType entry_type) {
base::UmaHistogramEnumeration(
GetCaptureModeHistogramName(kEntryHistogramName), entry_type);
}
void RecordCaptureModeRecordTime(int64_t length_in_seconds) {
// Use custom counts macro instead of custom times so we can record in
// seconds instead of milliseconds. The max bucket is 3 hours.
base::UmaHistogramCustomCounts(kRecordTimeHistogramName, length_in_seconds,
/*min=*/1,
/*max=*/base::Hours(3).InSeconds(),
/*bucket_count=*/50);
}
void RecordCaptureModeSwitchesFromInitialMode(bool switched) {
base::UmaHistogramBoolean(kSwitchesFromInitialModeHistogramName, switched);
}
void RecordNumberOfCaptureRegionAdjustments(int num_adjustments) {
base::UmaHistogramCounts100(
GetCaptureModeHistogramName(kCaptureRegionAdjustmentHistogramName),
num_adjustments);
}
void RecordNumberOfConsecutiveScreenshots(int num_consecutive_screenshots) {
if (num_consecutive_screenshots > 1) {
base::UmaHistogramCounts100(kConsecutiveScreenshotHistogramName,
num_consecutive_screenshots);
}
}
void RecordNumberOfScreenshotsTakenInLastDay(
int num_screenshots_taken_in_last_day) {
base::UmaHistogramCounts100(kScreenshotsPerDayHistogramName,
num_screenshots_taken_in_last_day);
}
void RecordNumberOfScreenshotsTakenInLastWeek(
int num_screenshots_taken_in_last_week) {
base::UmaHistogramCounts100(kScreenshotsPerWeekHistogramName,
num_screenshots_taken_in_last_week);
}
void RecordScreenshotNotificationQuickAction(CaptureQuickAction action) {
base::UmaHistogramEnumeration(kQuickActionHistogramName, action);
}
} // namespace ash