signin_metrics.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 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#include "components/signin/core/browser/signin_metrics.h"
6
7#include "base/logging.h"
8#include "base/metrics/histogram.h"
9#include "base/metrics/user_metrics.h"
10
11namespace signin_metrics {
12
13// Helper method to determine which |DifferentPrimaryAccounts| applies.
14DifferentPrimaryAccounts ComparePrimaryAccounts(bool primary_accounts_same,
15                                                int pre_count_gaia_cookies) {
16  if (primary_accounts_same)
17    return ACCOUNTS_SAME;
18  if (pre_count_gaia_cookies == 0)
19    return NO_COOKIE_PRESENT;
20  return COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT;
21}
22
23void LogSigninAccountReconciliation(int total_number_accounts,
24                                    int count_added_to_cookie_jar,
25                                    int count_removed_from_cookie_jar,
26                                    bool primary_accounts_same,
27                                    bool is_first_reconcile,
28                                    int pre_count_gaia_cookies) {
29  UMA_HISTOGRAM_COUNTS_100("Profile.NumberOfAccountsPerProfile",
30                           total_number_accounts);
31  // We want to include zeroes in the counts of added or removed accounts to
32  // easily capture _relatively_ how often we merge accounts.
33  if (is_first_reconcile) {
34    UMA_HISTOGRAM_COUNTS_100("Signin.Reconciler.AddedToCookieJar.FirstRun",
35                             count_added_to_cookie_jar);
36    UMA_HISTOGRAM_COUNTS_100("Signin.Reconciler.RemovedFromCookieJar.FirstRun",
37                             count_removed_from_cookie_jar);
38    UMA_HISTOGRAM_ENUMERATION(
39        "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
40        ComparePrimaryAccounts(primary_accounts_same, pre_count_gaia_cookies),
41        NUM_DIFFERENT_PRIMARY_ACCOUNT_METRICS);
42  } else {
43    UMA_HISTOGRAM_COUNTS_100("Signin.Reconciler.AddedToCookieJar.SubsequentRun",
44                             count_added_to_cookie_jar);
45    UMA_HISTOGRAM_COUNTS_100(
46        "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun",
47        count_removed_from_cookie_jar);
48    UMA_HISTOGRAM_ENUMERATION(
49        "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun",
50        ComparePrimaryAccounts(primary_accounts_same, pre_count_gaia_cookies),
51        NUM_DIFFERENT_PRIMARY_ACCOUNT_METRICS);
52  }
53}
54
55void LogSigninProfile(bool is_first_run, base::Time install_date) {
56  // Track whether or not the user signed in during the first run of Chrome.
57  UMA_HISTOGRAM_BOOLEAN("Signin.DuringFirstRun", is_first_run);
58
59  // Determine how much time passed since install when this profile was signed
60  // in.
61  base::TimeDelta elapsed_time = base::Time::Now() - install_date;
62  UMA_HISTOGRAM_COUNTS("Signin.ElapsedTimeFromInstallToSignin",
63                       elapsed_time.InMinutes());
64}
65
66void LogSigninAddAccount() {
67  // Account signin may fail for a wide variety of reasons. There is no
68  // explicit false, but one can compare this value with the various UI
69  // flows that lead to account sign-in, and deduce that the difference
70  // counts the failures.
71  UMA_HISTOGRAM_BOOLEAN("Signin.AddAccount", true);
72}
73
74void LogSignout(ProfileSignout metric) {
75  UMA_HISTOGRAM_ENUMERATION("Signin.SignoutProfile", metric,
76                            NUM_PROFILE_SIGNOUT_METRICS);
77}
78
79void LogExternalCcResultFetches(bool fetches_completed) {
80  UMA_HISTOGRAM_BOOLEAN("Signin.Reconciler.AllExternalCcResultCompleted",
81                        fetches_completed);
82}
83
84}  // namespace signin_metrics
85