Chromium Code Reviews| Index: components/autofill/core/browser/form_structure.cc |
| diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc |
| index 4319c2376b240b027596fa9ecd26be72af5bc6dd..7beba16a088dcc2b67e97b79be838b29f978fd4a 100644 |
| --- a/components/autofill/core/browser/form_structure.cc |
| +++ b/components/autofill/core/browser/form_structure.cc |
| @@ -696,6 +696,9 @@ void FormStructure::LogQualityMetrics( |
| AutofillMetrics::FormInteractionsUkmLogger* form_interactions_ukm_logger, |
| bool did_show_suggestions, |
| bool observed_submission) const { |
| + // Use the same timestamp on UKM Metrics generated within this method's scope. |
| + AutofillMetrics::UkmTimestampPin timestamp_pin(form_interactions_ukm_logger); |
|
Mathieu
2017/06/27 21:02:27
Could you use AutofillClock::Now in the code? That
Roger McFarlane (Chromium)
2017/06/28 17:41:01
the pin isn't for testing, it's to pin the events
|
| + |
| size_t num_detected_field_types = 0; |
| size_t num_edited_autofilled_fields = 0; |
| bool did_autofill_all_possible_fields = true; |
| @@ -710,40 +713,31 @@ void FormStructure::LogQualityMetrics( |
| for (size_t i = 0; i < field_count(); ++i) { |
| auto* const field = this->field(i); |
| - // No further logging for password fields. Those are primarily related to a |
| - // different feature code path, and so make more sense to track outside of |
| - // this metric. |
| - if (field->form_control_type == "password") |
| - continue; |
| - |
| if (IsUPIVirtualPaymentAddress(field->value)) { |
| AutofillMetrics::LogUserHappinessMetric( |
| AutofillMetrics::USER_DID_ENTER_UPI_VPA); |
| } |
| + |
| + form_interactions_ukm_logger->LogFieldFillStatus(*this, *field, |
| + metric_type); |
| + |
| + AutofillMetrics::LogHeuristicPredictionQualityMetrics( |
| + form_interactions_ukm_logger, *this, *field, metric_type); |
| + AutofillMetrics::LogServerPredictionQualityMetrics( |
| + form_interactions_ukm_logger, *this, *field, metric_type); |
| + AutofillMetrics::LogOverallPredictionQualityMetrics( |
| + form_interactions_ukm_logger, *this, *field, metric_type); |
| // We count fields that were autofilled but later modified, regardless of |
| // whether the data now in the field is recognized. |
| if (field->previously_autofilled()) |
| num_edited_autofilled_fields++; |
| - // Aliases for the field types predicted by heuristics, server and overall. |
| - ServerFieldType heuristic_type = |
| - AutofillType(field->heuristic_type()).GetStorableType(); |
| - ServerFieldType server_type = |
| - AutofillType(field->server_type()).GetStorableType(); |
| - ServerFieldType predicted_type = field->Type().GetStorableType(); |
| - |
| const ServerFieldTypeSet& field_types = field->possible_types(); |
| DCHECK(!field_types.empty()); |
| - |
| - AutofillMetrics::LogHeuristicPredictionQualityMetrics( |
| - field_types, heuristic_type, metric_type); |
| - AutofillMetrics::LogServerPredictionQualityMetrics(field_types, server_type, |
| - metric_type); |
| - AutofillMetrics::LogOverallPredictionQualityMetrics( |
| - field_types, predicted_type, metric_type); |
| - |
| - if (field_types.count(EMPTY_TYPE) || field_types.count(UNKNOWN_TYPE)) |
| + if (field_types.count(EMPTY_TYPE) || field_types.count(UNKNOWN_TYPE)) { |
| + DCHECK_EQ(field_types.size(), 1u); |
| continue; |
| + } |
| ++num_detected_field_types; |
| if (field->is_autofilled) |
| @@ -813,21 +807,18 @@ void FormStructure::LogQualityMetrics( |
| } |
| } |
| -void FormStructure::LogQualityMetricsBasedOnAutocomplete() const { |
| +void FormStructure::LogQualityMetricsBasedOnAutocomplete( |
| + AutofillMetrics::FormInteractionsUkmLogger* form_interactions_ukm_logger) |
| + const { |
| const AutofillMetrics::QualityMetricType metric_type = |
| AutofillMetrics::TYPE_AUTOCOMPLETE_BASED; |
| for (const auto& field : fields_) { |
| if (field->html_type() != HTML_TYPE_UNSPECIFIED && |
| field->html_type() != HTML_TYPE_UNRECOGNIZED) { |
| - // The type inferred by the autocomplete attribute. |
| - ServerFieldTypeSet actual_field_type_set{ |
| - AutofillType(field->html_type(), field->html_mode()) |
| - .GetStorableType()}; |
| - |
| AutofillMetrics::LogHeuristicPredictionQualityMetrics( |
| - actual_field_type_set, field->heuristic_type(), metric_type); |
| + form_interactions_ukm_logger, *this, *field, metric_type); |
| AutofillMetrics::LogServerPredictionQualityMetrics( |
| - actual_field_type_set, field->server_type(), metric_type); |
| + form_interactions_ukm_logger, *this, *field, metric_type); |
| } |
| } |
| } |