OLD | NEW |
---|---|
(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 | |
grt (UTC plus 2)
2017/06/12 09:40:40
No Thanks -> Open Chrome
nikunjb
2017/06/13 00:27:35
Done.
grt (UTC plus 2)
2017/06/13 12:24:48
Looks like it didn't stick. ;-)
| |
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 | |
95 bool operator==(const ExperimentMetrics& other) const; | |
96 | |
97 // The number of experiment groups (including the holdback group). | |
98 static constexpr int kNumGroups = 16; | |
99 | |
100 // Unix epoch of time from when time bucket for experiment is started. | |
101 // This will be subtracted from the day the toast was shown to bucket user | |
102 // into cohorts for analysing retention. (25 May 2017 00:00:00 PST) | |
grt (UTC plus 2)
2017/06/09 14:04:22
wdyt of bumping this to today so that we have a li
nikunjb
2017/06/13 00:27:35
Done. Putting Tue Jun 13th.
| |
103 static constexpr int64_t kExperimentStartSeconds = 1495695600; | |
104 | |
105 // Maximum number of time toast should be displayed (3 bits). | |
106 static constexpr int kMaxToastCount = 7; | |
107 | |
108 // Maximum value of first toast offset. (10 bits). | |
109 static constexpr int kMaxFirstToastOffset = 1023; | |
110 | |
111 // Maximum value of last used bucket. (7 bits, log scale). | |
grt (UTC plus 2)
2017/06/09 14:04:22
"in days and log scale" for consistency with the v
nikunjb
2017/06/13 00:27:35
Done.
| |
112 static constexpr int kMaxLastUsed = 1825; // 5 yr in days. | |
113 | |
114 // Maximum value of user session length. (6 bits, in minutes and log scale). | |
115 static constexpr int kMaxSessionLength = 40320; // 28 days in minutes. | |
116 | |
117 // Maximum value of user session length. (5 bits, in seconds and log scale). | |
118 static constexpr int kMaxActionDelay = 604800; // 7 days in seconds. | |
119 | |
120 static constexpr int kSessionLengthBucketBits = 6; | |
121 | |
122 static constexpr int kActionDelayBucketBits = 5; | |
123 | |
124 static constexpr int kLastUsedBucketBits = 7; | |
125 | |
126 static constexpr int kToastHourBits = 5; | |
127 | |
128 static constexpr int kFirstToastOffsetBits = 10; | |
129 | |
130 static constexpr int kToastCountBits = 3; | |
131 | |
132 static constexpr int kToastLocationBits = 1; | |
133 | |
134 static constexpr int kStateBits = 4; | |
135 | |
136 static constexpr int kGroupBits = 4; | |
137 | |
138 // The group to which this install has been assigned. | |
139 int group = 0; | |
140 | |
141 State state = kUninitialized; | |
142 ToastLocation toast_location = kOverTaskbarPin; | |
143 | |
144 // The number of times the toast has been presented. | |
145 int toast_count = 0; | |
146 | |
147 // The number of days that have passed since (25 May 2017 00:00:00 PST) on | |
148 // the first day the toast was presented. | |
149 int first_toast_offset = 0; | |
grt (UTC plus 2)
2017/06/09 14:04:22
nit: ?first_toast_offset_days? if you agree, pleas
nikunjb
2017/06/13 00:27:35
Done.
| |
150 | |
151 // The local (wall clock) hour in which the toast was presented. | |
152 int toast_hour = 0; | |
153 | |
154 // Days since the last time Chrome was used in the range [1-1825) in a | |
155 // 128-bucket log scale. | |
156 int last_used_bucket = 0; | |
157 | |
158 // Time delta (in seconds) between presentation and action in the range | |
159 // [1-604800) in a 32-bucket log scale. | |
160 int action_delay_bucket = 0; | |
161 | |
162 // Time delta (in minutes) between user session start and presentation in the | |
163 // range [1-40320) in a 64-bucket log scale. | |
164 int session_length_bucket = 0; | |
165 }; | |
166 | |
167 } // namespace installer | |
168 | |
169 #endif // CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_ | |
OLD | NEW |