Chromium Code Reviews| 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..f4e74260a19933b5e40a3b6dea542b8d92f85645 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 anonymouse namespace so that it can be |
|
Lei Zhang
2014/11/11 23:16:04
typo: anonymous
Ilya Sherman
2014/11/11 23:39:56
Done.
|
| +// 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); |
| } |