| Index: components/autofill/core/browser/autofill_metrics.cc
|
| diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
|
| index 548a23259d7d1b30cd2b134ed721765f5aae44d7..c3a271ac617536a764aebff0962bc9fd21e68152 100644
|
| --- a/components/autofill/core/browser/autofill_metrics.cc
|
| +++ b/components/autofill/core/browser/autofill_metrics.cc
|
| @@ -17,27 +17,29 @@ namespace autofill {
|
| namespace {
|
|
|
| enum FieldTypeGroupForMetrics {
|
| - AMBIGUOUS = 0,
|
| - NAME,
|
| - COMPANY,
|
| - ADDRESS_LINE_1,
|
| - ADDRESS_LINE_2,
|
| - ADDRESS_CITY,
|
| - ADDRESS_STATE,
|
| - ADDRESS_ZIP,
|
| - ADDRESS_COUNTRY,
|
| - PHONE,
|
| - FAX, // Deprecated.
|
| - EMAIL,
|
| - CREDIT_CARD_NAME,
|
| - CREDIT_CARD_NUMBER,
|
| - CREDIT_CARD_DATE,
|
| - CREDIT_CARD_TYPE,
|
| - PASSWORD,
|
| - ADDRESS_LINE_3,
|
| + GROUP_AMBIGUOUS = 0,
|
| + GROUP_NAME,
|
| + GROUP_COMPANY,
|
| + GROUP_ADDRESS_LINE_1,
|
| + GROUP_ADDRESS_LINE_2,
|
| + GROUP_ADDRESS_CITY,
|
| + GROUP_ADDRESS_STATE,
|
| + GROUP_ADDRESS_ZIP,
|
| + GROUP_ADDRESS_COUNTRY,
|
| + GROUP_PHONE,
|
| + GROUP_FAX, // Deprecated.
|
| + GROUP_EMAIL,
|
| + GROUP_CREDIT_CARD_NAME,
|
| + GROUP_CREDIT_CARD_NUMBER,
|
| + GROUP_CREDIT_CARD_DATE,
|
| + GROUP_CREDIT_CARD_TYPE,
|
| + GROUP_PASSWORD,
|
| + GROUP_ADDRESS_LINE_3,
|
| NUM_FIELD_TYPE_GROUPS_FOR_METRICS
|
| };
|
|
|
| +} // namespace
|
| +
|
| // First, translates |field_type| to the corresponding logical |group| from
|
| // |FieldTypeGroupForMetrics|. Then, interpolates this with the given |metric|,
|
| // which should be in the range [0, |num_possible_metrics|).
|
| @@ -59,105 +61,110 @@ enum FieldTypeGroupForMetrics {
|
| //
|
| // Clients must ensure that |field_type| is one of the types Chrome supports
|
| // natively, e.g. |field_type| must not be a billng address.
|
| -int GetFieldTypeGroupMetric(const ServerFieldType field_type,
|
| - const int metric,
|
| - const int num_possible_metrics) {
|
| - DCHECK_LT(metric, num_possible_metrics);
|
| -
|
| - FieldTypeGroupForMetrics group = AMBIGUOUS;
|
| +// NOTE: This is defined outside of the anonymous namespace so that it can be
|
| +// accessed from the unit test file. It is not exposed in the header file,
|
| +// however, because it is not intended for consumption outside of the metrics
|
| +// implementation.
|
| +int GetFieldTypeGroupMetric(ServerFieldType field_type,
|
| + AutofillMetrics::FieldTypeQualityMetric metric) {
|
| + DCHECK_LT(metric, AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS);
|
| +
|
| + FieldTypeGroupForMetrics group = GROUP_AMBIGUOUS;
|
| switch (AutofillType(field_type).group()) {
|
| - case ::autofill::NO_GROUP:
|
| - group = AMBIGUOUS;
|
| + case NO_GROUP:
|
| + group = GROUP_AMBIGUOUS;
|
| break;
|
|
|
| - case ::autofill::NAME:
|
| - case ::autofill::NAME_BILLING:
|
| - group = NAME;
|
| + case NAME:
|
| + case NAME_BILLING:
|
| + group = GROUP_NAME;
|
| break;
|
|
|
| - case ::autofill::COMPANY:
|
| - group = COMPANY;
|
| + case COMPANY:
|
| + group = GROUP_COMPANY;
|
| break;
|
|
|
| - case ::autofill::ADDRESS_HOME:
|
| - case ::autofill::ADDRESS_BILLING:
|
| + case ADDRESS_HOME:
|
| + case ADDRESS_BILLING:
|
| switch (AutofillType(field_type).GetStorableType()) {
|
| case ADDRESS_HOME_LINE1:
|
| - group = ADDRESS_LINE_1;
|
| + group = GROUP_ADDRESS_LINE_1;
|
| break;
|
| case ADDRESS_HOME_LINE2:
|
| - group = ADDRESS_LINE_2;
|
| + group = GROUP_ADDRESS_LINE_2;
|
| break;
|
| case ADDRESS_HOME_LINE3:
|
| - group = ADDRESS_LINE_3;
|
| + group = GROUP_ADDRESS_LINE_3;
|
| break;
|
| case ADDRESS_HOME_CITY:
|
| - group = ADDRESS_CITY;
|
| + group = GROUP_ADDRESS_CITY;
|
| break;
|
| case ADDRESS_HOME_STATE:
|
| - group = ADDRESS_STATE;
|
| + group = GROUP_ADDRESS_STATE;
|
| break;
|
| case ADDRESS_HOME_ZIP:
|
| - group = ADDRESS_ZIP;
|
| + group = GROUP_ADDRESS_ZIP;
|
| break;
|
| case ADDRESS_HOME_COUNTRY:
|
| - group = ADDRESS_COUNTRY;
|
| + group = GROUP_ADDRESS_COUNTRY;
|
| break;
|
| default:
|
| NOTREACHED();
|
| - group = AMBIGUOUS;
|
| + group = GROUP_AMBIGUOUS;
|
| break;
|
| }
|
| break;
|
|
|
| - case ::autofill::EMAIL:
|
| - group = EMAIL;
|
| + case EMAIL:
|
| + group = GROUP_EMAIL;
|
| break;
|
|
|
| - case ::autofill::PHONE_HOME:
|
| - case ::autofill::PHONE_BILLING:
|
| - group = PHONE;
|
| + case PHONE_HOME:
|
| + case PHONE_BILLING:
|
| + group = GROUP_PHONE;
|
| break;
|
|
|
| - case ::autofill::CREDIT_CARD:
|
| + case CREDIT_CARD:
|
| switch (field_type) {
|
| - case ::autofill::CREDIT_CARD_NAME:
|
| - group = CREDIT_CARD_NAME;
|
| + case CREDIT_CARD_NAME:
|
| + group = GROUP_CREDIT_CARD_NAME;
|
| break;
|
| - case ::autofill::CREDIT_CARD_NUMBER:
|
| - group = CREDIT_CARD_NUMBER;
|
| + case CREDIT_CARD_NUMBER:
|
| + group = GROUP_CREDIT_CARD_NUMBER;
|
| break;
|
| - case ::autofill::CREDIT_CARD_TYPE:
|
| - group = CREDIT_CARD_TYPE;
|
| + case CREDIT_CARD_TYPE:
|
| + group = GROUP_CREDIT_CARD_TYPE;
|
| break;
|
| - case ::autofill::CREDIT_CARD_EXP_MONTH:
|
| - case ::autofill::CREDIT_CARD_EXP_2_DIGIT_YEAR:
|
| - case ::autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR:
|
| - case ::autofill::CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
|
| - case ::autofill::CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
|
| - group = CREDIT_CARD_DATE;
|
| + case CREDIT_CARD_EXP_MONTH:
|
| + case CREDIT_CARD_EXP_2_DIGIT_YEAR:
|
| + case CREDIT_CARD_EXP_4_DIGIT_YEAR:
|
| + case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
|
| + case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
|
| + group = GROUP_CREDIT_CARD_DATE;
|
| break;
|
| default:
|
| NOTREACHED();
|
| - group = AMBIGUOUS;
|
| + group = GROUP_AMBIGUOUS;
|
| break;
|
| }
|
| break;
|
|
|
| - case ::autofill::PASSWORD_FIELD:
|
| - group = PASSWORD;
|
| + case PASSWORD_FIELD:
|
| + group = GROUP_PASSWORD;
|
| break;
|
|
|
| - case ::autofill::TRANSACTION:
|
| + case TRANSACTION:
|
| NOTREACHED();
|
| break;
|
| }
|
|
|
| // Interpolate the |metric| with the |group|, so that all metrics for a given
|
| // |group| are adjacent.
|
| - return (group * num_possible_metrics) + metric;
|
| + return (group * AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS) + metric;
|
| }
|
|
|
| +namespace {
|
| +
|
| std::string WalletApiMetricToString(
|
| AutofillMetrics::WalletApiCallMetric metric) {
|
| switch (metric) {
|
| @@ -234,20 +241,18 @@ void LogUMAHistogramLongTimes(const std::string& name,
|
| // |field_type|. Logs a sample of |metric|, which should be in the range
|
| // [0, |num_possible_metrics|).
|
| void LogTypeQualityMetric(const std::string& base_name,
|
| - const int metric,
|
| - const int num_possible_metrics,
|
| - const ServerFieldType field_type) {
|
| - DCHECK_LT(metric, num_possible_metrics);
|
| -
|
| - std::string histogram_name = base_name;
|
| - LogUMAHistogramEnumeration(histogram_name, metric, num_possible_metrics);
|
| -
|
| - std::string sub_histogram_name = base_name + ".ByFieldType";
|
| - const int field_type_group_metric =
|
| - GetFieldTypeGroupMetric(field_type, metric, num_possible_metrics);
|
| - const int num_field_type_group_metrics =
|
| - num_possible_metrics * NUM_FIELD_TYPE_GROUPS_FOR_METRICS;
|
| - LogUMAHistogramEnumeration(sub_histogram_name,
|
| + AutofillMetrics::FieldTypeQualityMetric metric,
|
| + ServerFieldType field_type) {
|
| + DCHECK_LT(metric, AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS);
|
| +
|
| + LogUMAHistogramEnumeration(base_name, metric,
|
| + AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS);
|
| +
|
| + int field_type_group_metric = GetFieldTypeGroupMetric(field_type, metric);
|
| + int num_field_type_group_metrics =
|
| + AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS *
|
| + NUM_FIELD_TYPE_GROUPS_FOR_METRICS;
|
| + LogUMAHistogramEnumeration(base_name + ".ByFieldType",
|
| field_type_group_metric,
|
| num_field_type_group_metrics);
|
| }
|
| @@ -262,7 +267,6 @@ AutofillMetrics::~AutofillMetrics() {
|
|
|
| void AutofillMetrics::LogCreditCardInfoBarMetric(InfoBarMetric metric) const {
|
| DCHECK_LT(metric, NUM_INFO_BAR_METRICS);
|
| -
|
| UMA_HISTOGRAM_ENUMERATION("Autofill.CreditCardInfoBar", metric,
|
| NUM_INFO_BAR_METRICS);
|
| }
|
| @@ -350,7 +354,6 @@ void AutofillMetrics::LogWalletResponseCode(int response_code) const {
|
| void AutofillMetrics::LogDeveloperEngagementMetric(
|
| DeveloperEngagementMetric metric) const {
|
| DCHECK_LT(metric, NUM_DEVELOPER_ENGAGEMENT_METRICS);
|
| -
|
| UMA_HISTOGRAM_ENUMERATION("Autofill.DeveloperEngagement", metric,
|
| NUM_DEVELOPER_ENGAGEMENT_METRICS);
|
| }
|
| @@ -358,34 +361,29 @@ void AutofillMetrics::LogDeveloperEngagementMetric(
|
| void AutofillMetrics::LogHeuristicTypePrediction(
|
| FieldTypeQualityMetric metric,
|
| ServerFieldType field_type) const {
|
| - LogTypeQualityMetric("Autofill.Quality.HeuristicType",
|
| - metric, NUM_FIELD_TYPE_QUALITY_METRICS, field_type);
|
| + LogTypeQualityMetric("Autofill.Quality.HeuristicType", metric, field_type);
|
| }
|
|
|
| void AutofillMetrics::LogOverallTypePrediction(
|
| FieldTypeQualityMetric metric,
|
| ServerFieldType field_type) const {
|
| - LogTypeQualityMetric("Autofill.Quality.PredictedType",
|
| - metric, NUM_FIELD_TYPE_QUALITY_METRICS, field_type);
|
| + LogTypeQualityMetric("Autofill.Quality.PredictedType", metric, field_type);
|
| }
|
|
|
| void AutofillMetrics::LogServerTypePrediction(
|
| FieldTypeQualityMetric metric,
|
| ServerFieldType field_type) const {
|
| - LogTypeQualityMetric("Autofill.Quality.ServerType",
|
| - metric, NUM_FIELD_TYPE_QUALITY_METRICS, field_type);
|
| + LogTypeQualityMetric("Autofill.Quality.ServerType", metric, field_type);
|
| }
|
|
|
| void AutofillMetrics::LogServerQueryMetric(ServerQueryMetric metric) const {
|
| DCHECK_LT(metric, NUM_SERVER_QUERY_METRICS);
|
| -
|
| UMA_HISTOGRAM_ENUMERATION("Autofill.ServerQueryResponse", metric,
|
| NUM_SERVER_QUERY_METRICS);
|
| }
|
|
|
| void AutofillMetrics::LogUserHappinessMetric(UserHappinessMetric metric) const {
|
| DCHECK_LT(metric, NUM_USER_HAPPINESS_METRICS);
|
| -
|
| UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness", metric,
|
| NUM_USER_HAPPINESS_METRICS);
|
| }
|
|
|