Commit b3afc678 authored by Jan Krcal's avatar Jan Krcal Committed by Commit Bot

[Profiles] Report profile color uniqueness to metrics

This CL adds a metric that records uniqueness of profile colors for
each Chrome installation. This is a proxy for "each profile has
different looks" as it ignores extension themes. This is a reasonable
simplification as the new profile UIs do not promote extension themes.

Bug: 1149315
Change-Id: I265957cc217915e703e0cc05aa3c9ada0e6b51dc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2534853Reviewed-by: default avatarMark Pearson <mpearson@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarMichael Lippautz <mlippautz@chromium.org>
Commit-Queue: Jan Krcal <jkrcal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828156}
parent ef3188b9
......@@ -19,6 +19,7 @@
#include "chrome/browser/profiles/profile_avatar_icon_util.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/signin/chrome_signin_helper.h"
#include "chrome/browser/ui/signin/profile_colors_util.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/installer/util/google_update_settings.h"
#include "components/profile_metrics/browser_profile_type.h"
......@@ -65,6 +66,37 @@ ProfileType GetProfileType(const base::FilePath& profile_path) {
return metric;
}
profile_metrics::ProfileColorsUniqueness GetProfileColorsUniqueness(
ProfileAttributesStorage* storage) {
#if defined(OS_ANDROID)
return profile_metrics::ProfileColorsUniqueness::kSingleProfile;
#else
std::vector<ProfileAttributesEntry*> entries =
storage->GetAllProfilesAttributes();
DCHECK(!entries.empty());
if (entries.size() == 1u)
return profile_metrics::ProfileColorsUniqueness::kSingleProfile;
size_t default_colors_count = 0;
std::set<ProfileThemeColors> used_colors;
for (ProfileAttributesEntry* entry : entries) {
base::Optional<ProfileThemeColors> profile_colors =
entry->GetProfileThemeColorsIfSet();
if (!profile_colors) {
default_colors_count++;
} else if (!base::Contains(used_colors, *profile_colors)) {
used_colors.insert(*profile_colors);
} else {
return profile_metrics::ProfileColorsUniqueness::kRepeated;
}
}
return default_colors_count > 1u
? profile_metrics::ProfileColorsUniqueness::
kUniqueExceptForRepeatedDefault
: profile_metrics::ProfileColorsUniqueness::kUnique;
#endif
}
} // namespace
// This enum is used for histograms. Do not change existing values. Append new
......@@ -143,6 +175,7 @@ bool ProfileMetrics::IsProfileActive(const ProfileAttributesEntry* entry) {
return true;
}
// static
void ProfileMetrics::CountProfileInformation(ProfileAttributesStorage* storage,
profile_metrics::Counts* counts) {
size_t number_of_profiles = storage->GetNumberOfProfiles();
......@@ -172,6 +205,7 @@ void ProfileMetrics::CountProfileInformation(ProfileAttributesStorage* storage,
}
}
}
counts->colors_uniqueness = GetProfileColorsUniqueness(storage);
}
profile_metrics::BrowserProfileType ProfileMetrics::GetBrowserProfileType(
......
......@@ -26,6 +26,8 @@ void LogProfileMetricsCounts(const Counts& counts) {
counts.gaia_icon);
UMA_HISTOGRAM_COUNTS_100("Profile.NumberOfProfilesWithAuthErrors",
counts.auth_errors);
UMA_HISTOGRAM_ENUMERATION("Profile.ColorsUniqueness",
counts.colors_uniqueness);
}
}
......
......@@ -9,25 +9,27 @@
namespace profile_metrics {
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum class ProfileColorsUniqueness {
kSingleProfile = 0,
kUnique = 1,
kUniqueExceptForRepeatedDefault = 2,
kRepeated = 3,
kMaxValue = kRepeated,
};
struct Counts {
base::HistogramBase::Sample total;
base::HistogramBase::Sample signedin;
base::HistogramBase::Sample supervised;
base::HistogramBase::Sample active;
base::HistogramBase::Sample named;
base::HistogramBase::Sample unused;
base::HistogramBase::Sample gaia_icon;
base::HistogramBase::Sample auth_errors;
Counts()
: total(0),
signedin(0),
supervised(0),
active(0),
named(0),
unused(0),
gaia_icon(0),
auth_errors(0) {}
base::HistogramBase::Sample total = 0;
base::HistogramBase::Sample signedin = 0;
base::HistogramBase::Sample supervised = 0;
base::HistogramBase::Sample active = 0;
base::HistogramBase::Sample named = 0;
base::HistogramBase::Sample unused = 0;
base::HistogramBase::Sample gaia_icon = 0;
base::HistogramBase::Sample auth_errors = 0;
ProfileColorsUniqueness colors_uniqueness =
ProfileColorsUniqueness::kRepeated;
};
// Logs metrics related to |counts|.
......
......@@ -60649,6 +60649,13 @@ https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf
<int value="5" label="Signed Out: Old avatar"/>
</enum>
<enum name="ProfileColorsUniqueness">
<int value="0" label="Single profile"/>
<int value="1" label="Unique colors (with default theme at most once)"/>
<int value="2" label="Unique colors (with default theme repeated)"/>
<int value="3" label="Repeated colors"/>
</enum>
<enum name="ProfileCreateResult">
<int value="0" label="Failed locally"/>
<int value="1" label="Failed remotely"/>
......@@ -102,6 +102,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary>
</histogram>
<histogram name="Profile.ColorsUniqueness" enum="ProfileColorsUniqueness"
expires_after="2021-05-30">
<owner>jkrcal@chromium.org</owner>
<owner>droger@chromium.org</owner>
<summary>
Records how profile colors are unique on all profiles of the installation.
Recorded every 24 hours (or at the soonest moment after that when Chrome is
started again).
</summary>
</histogram>
<histogram name="Profile.CookiesSize" units="MB" expires_after="2018-08-30">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<summary>Size of the cookies database.</summary>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment