| Index: chrome/installer/util/experiment_metrics.h
|
| diff --git a/chrome/installer/util/experiment_metrics.h b/chrome/installer/util/experiment_metrics.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fae5263664ccdbdf83fece90d28dc8192f8626cf
|
| --- /dev/null
|
| +++ b/chrome/installer/util/experiment_metrics.h
|
| @@ -0,0 +1,169 @@
|
| +// Copyright 2017 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.
|
| +
|
| +#ifndef CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
|
| +#define CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
|
| +
|
| +#include <stdint.h>
|
| +
|
| +namespace installer {
|
| +
|
| +// The various metrics reported for the status of the inactive user toast. This
|
| +// struct contains the information necessary to evaluate the efficacy of the
|
| +// toast on Chrome usage.
|
| +struct ExperimentMetrics {
|
| + public:
|
| + // The state of this install's participation in the experiment.
|
| + enum State {
|
| + kUninitialized = -1,
|
| +
|
| + // Relaunching setup.exe for a per-user install failed. Will retry on next
|
| + // update.
|
| + kRelaunchFailed = 0,
|
| +
|
| + // No user on console for per-machine install; waiting for invocation at
|
| + // next logon via Active Setup.
|
| + kWaitingForUserLogon = 1,
|
| +
|
| + // Waiting in user context for the setup singleton.
|
| + kWaitingForSingleton = 2,
|
| +
|
| + // Timed out waiting for the setup singleton. Will retry on next update.
|
| + kSingletonWaitTimeout = 3,
|
| +
|
| + // A group has been assigned. The experiment has moved out of the initial
|
| + // state at this point. This state is reached under the setup singleton.
|
| + kGroupAssigned = 4,
|
| +
|
| + // The user is not participating on account of using a tablet-like device.
|
| + kIsTabletDevice = 5,
|
| +
|
| + // Chrome has been run within the last 28 days.
|
| + kIsActive = 6,
|
| +
|
| + // The user has not been active on the machine much in the last 28 days.
|
| + kIsDormant = 7,
|
| +
|
| + // Deferring presentation until it's okay to show the toast.
|
| + kDeferringPresentation = 8,
|
| +
|
| + // Deferral was aborted on account of another process requiring the setup
|
| + // singleton.
|
| + kDeferredPresentationAborted = 9,
|
| +
|
| + // Launching Chrome for presentation.
|
| + kLaunchingChrome = 10,
|
| +
|
| + // User selected 'No Thanks' button from UI after toast was shown.
|
| + kSelectedNoThanks = 11,
|
| +
|
| + // User selected 'Open Chrome' button from UI after toast was shown but
|
| + // Chrome crashed after opening.
|
| + kSelectedOpenChromeAndCrash = 12,
|
| +
|
| + // User selected 'Open Chrome' button from UI after toast was shown and
|
| + // user successfully opened chrome.
|
| + kSelectedOpenChromeAndNoCrash = 13,
|
| +
|
| + // User selected [x] button from display.
|
| + kSelectedClose = 14,
|
| +
|
| + // User logged off (gracefully) without interacting with toast.
|
| + kUserLogOff = 15,
|
| +
|
| + NUM_STATES
|
| + };
|
| +
|
| + // The location of the toast for those clients for which it was presented.
|
| + enum ToastLocation {
|
| + // The toast was shown positioned over Chrome's taskbar pin.
|
| + kOverTaskbarPin = 0,
|
| +
|
| + // The toast was shown over the notification area.
|
| + kOverNotificationArea = 1,
|
| + };
|
| +
|
| + // Returns true if the install is in any of the states that precede group
|
| + // assignment.
|
| + bool InInitialState() const;
|
| +
|
| + // Returns true if the install is in a terminal state and should no longer
|
| + // participate in the experiment.
|
| + bool InTerminalState() const;
|
| +
|
| + bool operator==(const ExperimentMetrics& other) const;
|
| +
|
| + // The number of experiment groups (including the holdback group).
|
| + static constexpr int kNumGroups = 16;
|
| +
|
| + // Unix epoch of time from when time bucket for experiment is started.
|
| + // This will be subtracted from the day the toast was shown to bucket user
|
| + // into cohorts for analysing retention. (13 Jun 2017 00:00:00 PST)
|
| + static constexpr int64_t kExperimentStartSeconds = 1497337200;
|
| +
|
| + // Maximum number of time toast should be displayed (3 bits).
|
| + static constexpr int kMaxToastCount = 7;
|
| +
|
| + // Maximum value of first toast offset. (10 bits).
|
| + static constexpr int kMaxFirstToastOffsetDays = 1023;
|
| +
|
| + // Maximum value of last used bucket. (7 bits, in days and log scale).
|
| + static constexpr int kMaxLastUsed = 1825; // 5 yr in days.
|
| +
|
| + // Maximum value of user session length. (6 bits, in minutes and log scale).
|
| + static constexpr int kMaxSessionLength = 40320; // 28 days in minutes.
|
| +
|
| + // Maximum value of user session length. (5 bits, in seconds and log scale).
|
| + static constexpr int kMaxActionDelay = 604800; // 7 days in seconds.
|
| +
|
| + static constexpr int kSessionLengthBucketBits = 6;
|
| +
|
| + static constexpr int kActionDelayBucketBits = 5;
|
| +
|
| + static constexpr int kLastUsedBucketBits = 7;
|
| +
|
| + static constexpr int kToastHourBits = 5;
|
| +
|
| + static constexpr int kFirstToastOffsetBits = 10;
|
| +
|
| + static constexpr int kToastCountBits = 3;
|
| +
|
| + static constexpr int kToastLocationBits = 1;
|
| +
|
| + static constexpr int kStateBits = 4;
|
| +
|
| + static constexpr int kGroupBits = 4;
|
| +
|
| + // The group to which this install has been assigned.
|
| + int group = 0;
|
| +
|
| + State state = kUninitialized;
|
| + ToastLocation toast_location = kOverTaskbarPin;
|
| +
|
| + // The number of times the toast has been presented.
|
| + int toast_count = 0;
|
| +
|
| + // The number of days that have passed since (13 Jun 2017 00:00:00 PST) on
|
| + // the first day the toast was presented.
|
| + int first_toast_offset_days = 0;
|
| +
|
| + // The local (wall clock) hour in which the toast was presented.
|
| + int toast_hour = 0;
|
| +
|
| + // Days since the last time Chrome was used in the range [1-1825) in a
|
| + // 128-bucket log scale.
|
| + int last_used_bucket = 0;
|
| +
|
| + // Time delta (in seconds) between presentation and action in the range
|
| + // [1-604800) in a 32-bucket log scale.
|
| + int action_delay_bucket = 0;
|
| +
|
| + // Time delta (in minutes) between user session start and presentation in the
|
| + // range [1-40320) in a 64-bucket log scale.
|
| + int session_length_bucket = 0;
|
| +};
|
| +
|
| +} // namespace installer
|
| +
|
| +#endif // CHROME_INSTALLER_UTIL_EXPERIMENT_METRICS_H_
|
|
|