Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: chrome/installer/util/experiment_metrics.h

Issue 2889323004: Win 10 Inactive toast experiment metrics and storage modifications. (Closed)
Patch Set: Incorporate review comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
6 #define CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
7
8 #include <stdint.h>
9
10 namespace installer {
11
12 // The various metrics reported for the status of the inactive user toast. This
13 // struct contains the information necessary to evaluate the efficacy of the
14 // toast on Chrome usage.
15 struct ExperimentMetrics {
16 public:
17 // The state of this install's participation in the experiment.
18 enum State {
19 kUninitialized = -1,
20
21 // Relaunching setup.exe for a per-user install failed. Will retry on next
22 // update.
23 kRelaunchFailed = 0,
24
25 // No user on console for per-machine install; waiting for invocation at
26 // next logon via Active Setup.
27 kWaitingForUserLogon = 1,
28
29 // Waiting in user context for the setup singleton.
30 kWaitingForSingleton = 2,
31
32 // Timed out waiting for the setup singleton. Will retry on next update.
33 kSingletonWaitTimeout = 3,
34
35 // A group has been assigned. The experiment has moved out of the initial
36 // state at this point. This state is reached under the setup singleton.
37 kGroupAssigned = 4,
38
39 // The user is not participating on account of using a tablet-like device.
40 kIsTabletDevice = 5,
41
42 // Chrome has been run within the last 28 days.
43 kIsActive = 6,
44
45 // The user has not been active on the machine much in the last 28 days.
46 kIsDormant = 7,
47
48 // Deferring presentation until it's okay to show the toast.
49 kDeferringPresentation = 8,
50
51 // Deferral was aborted on account of another process requiring the setup
52 // singleton.
53 kDeferredPresentationAborted = 9,
54
55 // Launching Chrome for presentation.
56 kLaunchingChrome = 10,
57
58 // User selected 'No Thanks' button from UI after toast was shown.
59 kSelectedNoThanks = 11,
60
61 // User selected 'Open Chrome' button from UI after toast was shown but
62 // Chrome crashed after opening.
63 kSelectedOpenChromeAndCrash = 12,
64
65 // User selected 'No Thanks' button from UI after toast was shown and
66 // user successfully opened chrome.
67 kSelectedOpenChromeAndNoCrash = 13,
68
69 // User selected [x] button from display.
70 kSelectedClose = 14,
71
72 // User logged off (gracefully) without interacting with toast.
73 kUserLogOff = 15,
74
75 NUM_STATES
76 };
77
78 // The location of the toast for those clients for which it was presented.
79 enum ToastLocation {
80 // The toast was shown positioned over Chrome's taskbar pin.
81 kOverTaskbarPin = 0,
82
83 // The toast was shown over the notification area.
84 kOverNotificationArea = 1,
85 };
86
87 // Returns true if the install is in any of the states that precede group
88 // assignment.
89 bool InInitialState() const;
90
91 // Returns true if the install is in a terminal state and should no longer
92 // participate in the experiment.
93 bool InTerminalState() const;
94 void SetState(State state);
95
96 // The number of experiment groups (including the holdback group).
97 static constexpr int kNumGroups = 16;
98
99 // Unix epoch of time from when time bucket for experiment is started.
100 // This will be subtracted from the day the toast was shown to bucket user
101 // into cohorts for analysing retention. (25 May 2017 00:00:00 PST)
grt (UTC plus 2) 2017/05/31 12:24:09 PST -> UTC? base::Time is in UTC
nikunjb 2017/06/02 05:11:23 The value is used to create TimeDelta which is tz
grt (UTC plus 2) 2017/06/02 11:30:45 Groovy. Since it's an offset from the Unix epoch (
102 static constexpr int64_t kExperimentStartSeconds = 1495695600L;
grt (UTC plus 2) 2017/05/31 12:24:09 nit: remove 'L'
nikunjb 2017/06/02 05:11:23 Done.
103
104 // Maximum number of time toast should be displayed (3 bits).
105 static constexpr int kMaxToastCount = 7;
106
107 // Maximum value of first toast offset. (10 bits).
108 static constexpr int kMaxFirstToastOffset = 1023;
109
110 // Maximum value of last used bucket. (7 bits, log scale).
111 static constexpr int kMaxLastUsed = 1825; // 5 yr in days.
112
113 // Maximum value of user session length. (6 bits, in minutes and log scale).
114 static constexpr int kMaxSessionLength = 40320; // 28 days in minutes.
115
116 // Maximum value of user session length. (5 bits, in seconds and log scale).
117 static constexpr int kMaxDisplayTime = 604800; // 7 days in seconds.
118
119 static constexpr int kSessionLengthBits = 6;
120
121 static constexpr int kDisplayTimeBucketBits = 5;
122
123 static constexpr int kLastUsedBucketBits = 7;
124
125 static constexpr int kToastHourBits = 5;
126
127 static constexpr int kFirstToastOffsetBits = 10;
128
129 static constexpr int kToastCountBits = 3;
130
131 static constexpr int kToastLocationBits = 1;
132
133 static constexpr int kStateBits = 4;
134
135 static constexpr int kGroupBits = 4;
136
137 // The group to which this install has been assigned.
138 int group = 0;
139
140 State state = kUninitialized;
141 ToastLocation toast_location = kOverTaskbarPin;
142
143 // The number of times the toast has been presented.
144 int toast_count = 0;
145
146 // The number of days that have passed since 2017-05-20 on the first day the
grt (UTC plus 2) 2017/05/31 12:24:09 20 -> 25
nikunjb 2017/06/02 05:11:23 Done.
147 // toast was presented.
148 int first_toast_offset = 0;
149
150 // The local (wall clock) hour in which the toast was presented.
151 int toast_hour = 0;
152
153 // Days since the last time Chrome was used in the range [1-1825) in a
154 // 128-bucket log scale.
155 int last_used_bucket = 0;
156
157 // Time delta (in seconds) between presentation and action in the range
158 // [1-604800) in a 32-bucket log scale.
159 int display_time_bucket = 0;
160
161 // Time delta (in minutes) between user session start and presentation in the
162 // range [1-40320) in a 64-bucket log scale.
163 int session_length_bucket = 0;
164 };
165
166 } // namespace installer
167
168 #endif // CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698