Index: components/autofill/browser/autofill_metrics.cc |
diff --git a/components/autofill/browser/autofill_metrics.cc b/components/autofill/browser/autofill_metrics.cc |
deleted file mode 100644 |
index 9e91c0bd916c5511f6dfbb8ff55d4163dc0380e3..0000000000000000000000000000000000000000 |
--- a/components/autofill/browser/autofill_metrics.cc |
+++ /dev/null |
@@ -1,606 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/autofill/browser/autofill_metrics.h" |
- |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
-#include "base/time.h" |
-#include "components/autofill/browser/autofill_type.h" |
-#include "components/autofill/browser/form_structure.h" |
-#include "components/autofill/core/common/form_data.h" |
- |
-namespace autofill { |
- |
-namespace { |
- |
-// Server experiments we support. |
-enum ServerExperiment { |
- NO_EXPERIMENT = 0, |
- UNKNOWN_EXPERIMENT, |
- ACCEPTANCE_RATIO_06, |
- ACCEPTANCE_RATIO_1, |
- ACCEPTANCE_RATIO_2, |
- ACCEPTANCE_RATIO_4, |
- ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_15, |
- ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_25, |
- ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_15_MIN_FORM_SCORE_5, |
- TOOLBAR_DATA_ONLY, |
- ACCEPTANCE_RATIO_04_WINNER_LEAD_RATIO_3_MIN_FORM_SCORE_4, |
- NO_SERVER_RESPONSE, |
- PROBABILITY_PICKER_05, |
- PROBABILITY_PICKER_025, |
- PROBABILITY_PICKER_025_CC_THRESHOLD_03, |
- PROBABILITY_PICKER_025_CONTEXTUAL_CC_THRESHOLD_03, |
- PROBABILITY_PICKER_025_CONTEXTUAL_CC_THRESHOLD_03_WITH_FALLBACK, |
- PROBABILITY_PICKER_05_CC_NAME_THRESHOLD_03_EXPERIMENT_1, |
- NUM_SERVER_EXPERIMENTS |
-}; |
- |
-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, |
- NUM_FIELD_TYPE_GROUPS_FOR_METRICS |
-}; |
- |
-// 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|). |
-// Returns the interpolated index. |
-// |
-// The interpolation maps the pair (|group|, |metric|) to a single index, so |
-// that all the indicies for a given group are adjacent. In particular, with |
-// the groups {AMBIGUOUS, NAME, ...} combining with the metrics {UNKNOWN, MATCH, |
-// MISMATCH}, we create this set of mapped indices: |
-// { |
-// AMBIGUOUS+UNKNOWN, |
-// AMBIGUOUS+MATCH, |
-// AMBIGUOUS+MISMATCH, |
-// NAME+UNKNOWN, |
-// NAME+MATCH, |
-// NAME+MISMATCH, |
-// ... |
-// }. |
-// |
-// 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 AutofillFieldType field_type, |
- const int metric, |
- const int num_possible_metrics) { |
- DCHECK_LT(metric, num_possible_metrics); |
- |
- FieldTypeGroupForMetrics group; |
- switch (AutofillType(field_type).group()) { |
- case AutofillType::NO_GROUP: |
- group = AMBIGUOUS; |
- break; |
- |
- case AutofillType::NAME: |
- group = NAME; |
- break; |
- |
- case AutofillType::COMPANY: |
- group = COMPANY; |
- break; |
- |
- case AutofillType::ADDRESS_HOME: |
- switch (field_type) { |
- case ADDRESS_HOME_LINE1: |
- group = ADDRESS_LINE_1; |
- break; |
- case ADDRESS_HOME_LINE2: |
- group = ADDRESS_LINE_2; |
- break; |
- case ADDRESS_HOME_CITY: |
- group = ADDRESS_CITY; |
- break; |
- case ADDRESS_HOME_STATE: |
- group = ADDRESS_STATE; |
- break; |
- case ADDRESS_HOME_ZIP: |
- group = ADDRESS_ZIP; |
- break; |
- case ADDRESS_HOME_COUNTRY: |
- group = ADDRESS_COUNTRY; |
- break; |
- default: |
- NOTREACHED(); |
- group = AMBIGUOUS; |
- } |
- break; |
- |
- case AutofillType::EMAIL: |
- group = EMAIL; |
- break; |
- |
- case AutofillType::PHONE_HOME: |
- group = PHONE; |
- break; |
- |
- case AutofillType::CREDIT_CARD: |
- switch (field_type) { |
- case ::autofill::CREDIT_CARD_NAME: |
- group = CREDIT_CARD_NAME; |
- break; |
- case ::autofill::CREDIT_CARD_NUMBER: |
- group = CREDIT_CARD_NUMBER; |
- break; |
- case ::autofill::CREDIT_CARD_TYPE: |
- group = CREDIT_CARD_TYPE; |
- default: |
- group = CREDIT_CARD_DATE; |
- } |
- break; |
- |
- default: |
- NOTREACHED(); |
- group = AMBIGUOUS; |
- } |
- |
- // Interpolate the |metric| with the |group|, so that all metrics for a given |
- // |group| are adjacent. |
- return (group * num_possible_metrics) + metric; |
-} |
- |
-// Returns the histogram prefix to use for reporting metrics for |dialog_type|. |
-std::string GetPrefixForDialogType(autofill::DialogType dialog_type) { |
- switch (dialog_type) { |
- case autofill::DIALOG_TYPE_AUTOCHECKOUT: |
- return "Autocheckout"; |
- |
- case autofill::DIALOG_TYPE_REQUEST_AUTOCOMPLETE: |
- return "RequestAutocomplete"; |
- } |
- |
- NOTREACHED(); |
- return "UnknownDialogType"; |
-} |
- |
-std::string WalletApiMetricToString( |
- AutofillMetrics::WalletApiCallMetric metric) { |
- switch (metric) { |
- case AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS: |
- return "AcceptLegalDocuments"; |
- case AutofillMetrics::AUTHENTICATE_INSTRUMENT: |
- return "AuthenticateInstrument"; |
- case AutofillMetrics::GET_FULL_WALLET: |
- return "GetFullWallet"; |
- case AutofillMetrics::GET_WALLET_ITEMS: |
- return "GetWalletItems"; |
- case AutofillMetrics::SAVE_ADDRESS: |
- return "SaveAddress"; |
- case AutofillMetrics::SAVE_INSTRUMENT: |
- return "SaveInstrument"; |
- case AutofillMetrics::SAVE_INSTRUMENT_AND_ADDRESS: |
- return "SaveInstrumentAndAddress"; |
- case AutofillMetrics::SEND_STATUS: |
- return "SendStatus"; |
- case AutofillMetrics::UPDATE_ADDRESS: |
- return "UpdateAddress"; |
- case AutofillMetrics::UPDATE_INSTRUMENT: |
- return "UpdateInstrument"; |
- case AutofillMetrics::UNKNOWN_API_CALL: |
- NOTREACHED(); |
- return "UnknownApiCall"; |
- } |
- |
- NOTREACHED(); |
- return "UnknownApiCall"; |
-} |
- |
-// A version of the UMA_HISTOGRAM_ENUMERATION macro that allows the |name| |
-// to vary over the program's runtime. |
-void LogUMAHistogramEnumeration(const std::string& name, |
- int sample, |
- int boundary_value) { |
- DCHECK_LT(sample, boundary_value); |
- |
- // Note: This leaks memory, which is expected behavior. |
- base::HistogramBase* histogram = |
- base::LinearHistogram::FactoryGet( |
- name, |
- 1, |
- boundary_value, |
- boundary_value + 1, |
- base::HistogramBase::kUmaTargetedHistogramFlag); |
- histogram->Add(sample); |
-} |
- |
-// A version of the UMA_HISTOGRAM_TIMES macro that allows the |name| |
-// to vary over the program's runtime. |
-void LogUMAHistogramTimes(const std::string& name, |
- const base::TimeDelta& duration) { |
- // Note: This leaks memory, which is expected behavior. |
- base::HistogramBase* histogram = |
- base::Histogram::FactoryTimeGet( |
- name, |
- base::TimeDelta::FromMilliseconds(1), |
- base::TimeDelta::FromSeconds(10), |
- 50, |
- base::HistogramBase::kUmaTargetedHistogramFlag); |
- histogram->AddTime(duration); |
-} |
- |
-// A version of the UMA_HISTOGRAM_LONG_TIMES macro that allows the |name| |
-// to vary over the program's runtime. |
-void LogUMAHistogramLongTimes(const std::string& name, |
- const base::TimeDelta& duration) { |
- // Note: This leaks memory, which is expected behavior. |
- base::HistogramBase* histogram = |
- base::Histogram::FactoryTimeGet( |
- name, |
- base::TimeDelta::FromMilliseconds(1), |
- base::TimeDelta::FromHours(1), |
- 50, |
- base::HistogramBase::kUmaTargetedHistogramFlag); |
- histogram->AddTime(duration); |
-} |
- |
-// Logs a type quality metric. The primary histogram name is constructed based |
-// on |base_name| and |experiment_id|. The field-specific histogram name also |
-// factors in the |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 AutofillFieldType field_type, |
- const std::string& experiment_id) { |
- DCHECK_LT(metric, num_possible_metrics); |
- |
- std::string histogram_name = base_name; |
- if (!experiment_id.empty()) |
- histogram_name += "_" + experiment_id; |
- LogUMAHistogramEnumeration(histogram_name, metric, num_possible_metrics); |
- |
- std::string sub_histogram_name = base_name + ".ByFieldType"; |
- if (!experiment_id.empty()) |
- sub_histogram_name += "_" + experiment_id; |
- 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, |
- field_type_group_metric, |
- num_field_type_group_metrics); |
-} |
- |
-void LogServerExperimentId(const std::string& histogram_name, |
- const std::string& experiment_id) { |
- ServerExperiment metric = UNKNOWN_EXPERIMENT; |
- |
- const std::string default_experiment_name = |
- FormStructure(FormData(), std::string()).server_experiment_id(); |
- if (experiment_id.empty()) |
- metric = NO_EXPERIMENT; |
- else if (experiment_id == "ar06") |
- metric = ACCEPTANCE_RATIO_06; |
- else if (experiment_id == "ar1") |
- metric = ACCEPTANCE_RATIO_1; |
- else if (experiment_id == "ar2") |
- metric = ACCEPTANCE_RATIO_2; |
- else if (experiment_id == "ar4") |
- metric = ACCEPTANCE_RATIO_4; |
- else if (experiment_id == "ar05wlr15") |
- metric = ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_15; |
- else if (experiment_id == "ar05wlr25") |
- metric = ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_25; |
- else if (experiment_id == "ar05wr15fs5") |
- metric = ACCEPTANCE_RATIO_05_WINNER_LEAD_RATIO_15_MIN_FORM_SCORE_5; |
- else if (experiment_id == "tbar1") |
- metric = TOOLBAR_DATA_ONLY; |
- else if (experiment_id == "ar04wr3fs4") |
- metric = ACCEPTANCE_RATIO_04_WINNER_LEAD_RATIO_3_MIN_FORM_SCORE_4; |
- else if (experiment_id == default_experiment_name) |
- metric = NO_SERVER_RESPONSE; |
- else if (experiment_id == "fp05") |
- metric = PROBABILITY_PICKER_05; |
- else if (experiment_id == "fp025") |
- metric = PROBABILITY_PICKER_025; |
- else if (experiment_id == "fp05cc03") |
- metric = PROBABILITY_PICKER_025_CC_THRESHOLD_03; |
- else if (experiment_id == "fp05cco03") |
- metric = PROBABILITY_PICKER_025_CONTEXTUAL_CC_THRESHOLD_03; |
- else if (experiment_id == "fp05cco03cstd") |
- metric = PROBABILITY_PICKER_025_CONTEXTUAL_CC_THRESHOLD_03_WITH_FALLBACK; |
- else if (experiment_id == "fp05cc03e1") |
- metric = PROBABILITY_PICKER_05_CC_NAME_THRESHOLD_03_EXPERIMENT_1; |
- |
- DCHECK_LT(metric, NUM_SERVER_EXPERIMENTS); |
- LogUMAHistogramEnumeration(histogram_name, metric, NUM_SERVER_EXPERIMENTS); |
-} |
- |
-} // namespace |
- |
-AutofillMetrics::AutofillMetrics() { |
-} |
- |
-AutofillMetrics::~AutofillMetrics() { |
-} |
- |
-void AutofillMetrics::LogAutocheckoutBubbleMetric(BubbleMetric metric) const { |
- DCHECK_LT(metric, NUM_BUBBLE_METRICS); |
- |
- UMA_HISTOGRAM_ENUMERATION("Autocheckout.Bubble", metric, NUM_BUBBLE_METRICS); |
-} |
- |
-void AutofillMetrics::LogAutocheckoutBuyFlowMetric( |
- AutocheckoutBuyFlowMetric metric) const { |
- DCHECK_LT(metric, NUM_AUTOCHECKOUT_BUY_FLOW_METRICS); |
- |
- UMA_HISTOGRAM_ENUMERATION("Autocheckout.BuyFlow", metric, |
- NUM_AUTOCHECKOUT_BUY_FLOW_METRICS); |
-} |
- |
-void AutofillMetrics::LogCreditCardInfoBarMetric(InfoBarMetric metric) const { |
- DCHECK_LT(metric, NUM_INFO_BAR_METRICS); |
- |
- UMA_HISTOGRAM_ENUMERATION("Autofill.CreditCardInfoBar", metric, |
- NUM_INFO_BAR_METRICS); |
-} |
- |
-void AutofillMetrics::LogDialogDismissalState( |
- autofill::DialogType dialog_type, |
- DialogDismissalState state) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".DismissalState"; |
- LogUMAHistogramEnumeration(name, state, NUM_DIALOG_DISMISSAL_STATES); |
-} |
- |
-void AutofillMetrics::LogDialogInitialUserState( |
- autofill::DialogType dialog_type, |
- DialogInitialUserStateMetric user_type) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".InitialUserState"; |
- LogUMAHistogramEnumeration( |
- name, user_type, NUM_DIALOG_INITIAL_USER_STATE_METRICS); |
-} |
- |
-void AutofillMetrics::LogDialogLatencyToShow( |
- autofill::DialogType dialog_type, |
- const base::TimeDelta& duration) const { |
- std::string name = |
- GetPrefixForDialogType(dialog_type) + ".UiLatencyToShow"; |
- LogUMAHistogramTimes(name, duration); |
-} |
- |
-void AutofillMetrics::LogDialogPopupEvent(autofill::DialogType dialog_type, |
- DialogPopupEvent event) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".PopupInDialog"; |
- LogUMAHistogramEnumeration(name, event, NUM_DIALOG_POPUP_EVENTS); |
-} |
- |
-void AutofillMetrics::LogDialogSecurityMetric( |
- autofill::DialogType dialog_type, |
- DialogSecurityMetric metric) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".Security"; |
- LogUMAHistogramEnumeration(name, metric, NUM_DIALOG_SECURITY_METRICS); |
-} |
- |
-void AutofillMetrics::LogDialogUiDuration( |
- const base::TimeDelta& duration, |
- autofill::DialogType dialog_type, |
- DialogDismissalAction dismissal_action) const { |
- std::string prefix = GetPrefixForDialogType(dialog_type); |
- |
- std::string suffix; |
- switch (dismissal_action) { |
- case DIALOG_ACCEPTED: |
- suffix = "Submit"; |
- break; |
- |
- case DIALOG_CANCELED: |
- suffix = "Cancel"; |
- break; |
- } |
- |
- LogUMAHistogramLongTimes(prefix + ".UiDuration", duration); |
- LogUMAHistogramLongTimes(prefix + ".UiDuration." + suffix, duration); |
-} |
- |
-void AutofillMetrics::LogDialogUiEvent(autofill::DialogType dialog_type, |
- DialogUiEvent event) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".UiEvents"; |
- LogUMAHistogramEnumeration(name, event, NUM_DIALOG_UI_EVENTS); |
-} |
- |
-void AutofillMetrics::LogWalletErrorMetric(autofill::DialogType dialog_type, |
- WalletErrorMetric metric) const { |
- std::string name = GetPrefixForDialogType(dialog_type) + ".WalletErrors"; |
- LogUMAHistogramEnumeration(name, metric, NUM_WALLET_ERROR_METRICS); |
-} |
- |
-void AutofillMetrics::LogWalletApiCallDuration( |
- WalletApiCallMetric metric, |
- const base::TimeDelta& duration) const { |
- LogUMAHistogramTimes("Wallet.ApiCallDuration." + |
- WalletApiMetricToString(metric), duration); |
-} |
- |
-void AutofillMetrics::LogWalletRequiredActionMetric( |
- autofill::DialogType dialog_type, |
- WalletRequiredActionMetric required_action) const { |
- std::string name = |
- GetPrefixForDialogType(dialog_type) + ".WalletRequiredActions"; |
- LogUMAHistogramEnumeration( |
- name, required_action, NUM_WALLET_REQUIRED_ACTIONS); |
-} |
- |
-void AutofillMetrics::LogAutocheckoutDuration( |
- const base::TimeDelta& duration, |
- AutocheckoutCompletionStatus status) const { |
- std::string suffix; |
- switch (status) { |
- case AUTOCHECKOUT_CANCELLED: |
- suffix = "Cancelled"; |
- break; |
- |
- case AUTOCHECKOUT_FAILED: |
- suffix = "Failed"; |
- break; |
- |
- case AUTOCHECKOUT_SUCCEEDED: |
- suffix = "Succeeded"; |
- break; |
- } |
- |
- LogUMAHistogramLongTimes("Autocheckout.FlowDuration", duration); |
- LogUMAHistogramLongTimes("Autocheckout.FlowDuration." + suffix, duration); |
-} |
- |
-void AutofillMetrics::LogAutocheckoutWhitelistDownloadDuration( |
- const base::TimeDelta& duration, |
- AutocheckoutWhitelistDownloadStatus status) const { |
- std::string suffix; |
- switch (status) { |
- case AUTOCHECKOUT_WHITELIST_DOWNLOAD_FAILED: |
- suffix = "Failed"; |
- break; |
- |
- case AUTOCHECKOUT_WHITELIST_DOWNLOAD_SUCCEEDED: |
- suffix = "Succeeded"; |
- break; |
- } |
- |
- LogUMAHistogramTimes("Autocheckout.WhitelistDownloadDuration", duration); |
- LogUMAHistogramTimes( |
- "Autocheckout.WhitelistDownloadDuration." + suffix, duration); |
-} |
- |
-void AutofillMetrics::LogDeveloperEngagementMetric( |
- DeveloperEngagementMetric metric) const { |
- DCHECK_LT(metric, NUM_DEVELOPER_ENGAGEMENT_METRICS); |
- |
- UMA_HISTOGRAM_ENUMERATION("Autofill.DeveloperEngagement", metric, |
- NUM_DEVELOPER_ENGAGEMENT_METRICS); |
-} |
- |
-void AutofillMetrics::LogHeuristicTypePrediction( |
- FieldTypeQualityMetric metric, |
- AutofillFieldType field_type, |
- const std::string& experiment_id) const { |
- LogTypeQualityMetric("Autofill.Quality.HeuristicType", |
- metric, NUM_FIELD_TYPE_QUALITY_METRICS, |
- field_type, experiment_id); |
-} |
- |
-void AutofillMetrics::LogOverallTypePrediction( |
- FieldTypeQualityMetric metric, |
- AutofillFieldType field_type, |
- const std::string& experiment_id) const { |
- LogTypeQualityMetric("Autofill.Quality.PredictedType", |
- metric, NUM_FIELD_TYPE_QUALITY_METRICS, |
- field_type, experiment_id); |
-} |
- |
-void AutofillMetrics::LogServerTypePrediction( |
- FieldTypeQualityMetric metric, |
- AutofillFieldType field_type, |
- const std::string& experiment_id) const { |
- LogTypeQualityMetric("Autofill.Quality.ServerType", |
- metric, NUM_FIELD_TYPE_QUALITY_METRICS, |
- field_type, experiment_id); |
-} |
- |
-void AutofillMetrics::LogQualityMetric(QualityMetric metric, |
- const std::string& experiment_id) const { |
- DCHECK_LT(metric, NUM_QUALITY_METRICS); |
- |
- std::string histogram_name = "Autofill.Quality"; |
- if (!experiment_id.empty()) |
- histogram_name += "_" + experiment_id; |
- |
- LogUMAHistogramEnumeration(histogram_name, metric, NUM_QUALITY_METRICS); |
-} |
- |
-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); |
-} |
- |
-void AutofillMetrics::LogFormFillDurationFromLoadWithAutofill( |
- const base::TimeDelta& duration) const { |
- UMA_HISTOGRAM_CUSTOM_TIMES("Autofill.FillDuration.FromLoad.WithAutofill", |
- duration, |
- base::TimeDelta::FromMilliseconds(100), |
- base::TimeDelta::FromMinutes(10), |
- 50); |
-} |
- |
-void AutofillMetrics::LogFormFillDurationFromLoadWithoutAutofill( |
- const base::TimeDelta& duration) const { |
- UMA_HISTOGRAM_CUSTOM_TIMES("Autofill.FillDuration.FromLoad.WithoutAutofill", |
- duration, |
- base::TimeDelta::FromMilliseconds(100), |
- base::TimeDelta::FromMinutes(10), |
- 50); |
-} |
- |
-void AutofillMetrics::LogFormFillDurationFromInteractionWithAutofill( |
- const base::TimeDelta& duration) const { |
- UMA_HISTOGRAM_CUSTOM_TIMES( |
- "Autofill.FillDuration.FromInteraction.WithAutofill", |
- duration, |
- base::TimeDelta::FromMilliseconds(100), |
- base::TimeDelta::FromMinutes(10), |
- 50); |
-} |
- |
-void AutofillMetrics::LogFormFillDurationFromInteractionWithoutAutofill( |
- const base::TimeDelta& duration) const { |
- UMA_HISTOGRAM_CUSTOM_TIMES( |
- "Autofill.FillDuration.FromInteraction.WithoutAutofill", |
- duration, |
- base::TimeDelta::FromMilliseconds(100), |
- base::TimeDelta::FromMinutes(10), |
- 50); |
-} |
- |
-void AutofillMetrics::LogIsAutofillEnabledAtStartup(bool enabled) const { |
- UMA_HISTOGRAM_BOOLEAN("Autofill.IsEnabled.Startup", enabled); |
-} |
- |
-void AutofillMetrics::LogIsAutofillEnabledAtPageLoad(bool enabled) const { |
- UMA_HISTOGRAM_BOOLEAN("Autofill.IsEnabled.PageLoad", enabled); |
-} |
- |
-void AutofillMetrics::LogStoredProfileCount(size_t num_profiles) const { |
- UMA_HISTOGRAM_COUNTS("Autofill.StoredProfileCount", num_profiles); |
-} |
- |
-void AutofillMetrics::LogAddressSuggestionsCount(size_t num_suggestions) const { |
- UMA_HISTOGRAM_COUNTS("Autofill.AddressSuggestionsCount", num_suggestions); |
-} |
- |
-void AutofillMetrics::LogServerExperimentIdForQuery( |
- const std::string& experiment_id) const { |
- LogServerExperimentId("Autofill.ServerExperimentId.Query", experiment_id); |
-} |
- |
-void AutofillMetrics::LogServerExperimentIdForUpload( |
- const std::string& experiment_id) const { |
- LogServerExperimentId("Autofill.ServerExperimentId.Upload", experiment_id); |
-} |
- |
-} // namespace autofill |