| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/autofill_metrics.h" | 5 #include "components/autofill/core/browser/autofill_metrics.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 break; | 171 break; |
| 172 } | 172 } |
| 173 | 173 |
| 174 // Interpolate the |metric| with the |group|, so that all metrics for a given | 174 // Interpolate the |metric| with the |group|, so that all metrics for a given |
| 175 // |group| are adjacent. | 175 // |group| are adjacent. |
| 176 return (group * AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS) + metric; | 176 return (group * AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS) + metric; |
| 177 } | 177 } |
| 178 | 178 |
| 179 namespace { | 179 namespace { |
| 180 | 180 |
| 181 std::string WalletApiMetricToString( | |
| 182 AutofillMetrics::WalletApiCallMetric metric) { | |
| 183 switch (metric) { | |
| 184 case AutofillMetrics::ACCEPT_LEGAL_DOCUMENTS: | |
| 185 return "AcceptLegalDocuments"; | |
| 186 case AutofillMetrics::AUTHENTICATE_INSTRUMENT: | |
| 187 return "AuthenticateInstrument"; | |
| 188 case AutofillMetrics::GET_FULL_WALLET: | |
| 189 return "GetFullWallet"; | |
| 190 case AutofillMetrics::GET_WALLET_ITEMS: | |
| 191 return "GetWalletItems"; | |
| 192 case AutofillMetrics::SAVE_TO_WALLET: | |
| 193 return "SaveToWallet"; | |
| 194 case AutofillMetrics::UNKNOWN_API_CALL: | |
| 195 case AutofillMetrics::NUM_WALLET_API_CALLS: | |
| 196 NOTREACHED(); | |
| 197 return "UnknownApiCall"; | |
| 198 } | |
| 199 | |
| 200 NOTREACHED(); | |
| 201 return "UnknownApiCall"; | |
| 202 } | |
| 203 | |
| 204 // A version of the UMA_HISTOGRAM_ENUMERATION macro that allows the |name| | 181 // A version of the UMA_HISTOGRAM_ENUMERATION macro that allows the |name| |
| 205 // to vary over the program's runtime. | 182 // to vary over the program's runtime. |
| 206 void LogUMAHistogramEnumeration(const std::string& name, | 183 void LogUMAHistogramEnumeration(const std::string& name, |
| 207 int sample, | 184 int sample, |
| 208 int boundary_value) { | 185 int boundary_value) { |
| 209 DCHECK_LT(sample, boundary_value); | 186 DCHECK_LT(sample, boundary_value); |
| 210 | 187 |
| 211 // Note: This leaks memory, which is expected behavior. | 188 // Note: This leaks memory, which is expected behavior. |
| 212 base::HistogramBase* histogram = | 189 base::HistogramBase* histogram = |
| 213 base::LinearHistogram::FactoryGet( | 190 base::LinearHistogram::FactoryGet( |
| 214 name, | 191 name, |
| 215 1, | 192 1, |
| 216 boundary_value, | 193 boundary_value, |
| 217 boundary_value + 1, | 194 boundary_value + 1, |
| 218 base::HistogramBase::kUmaTargetedHistogramFlag); | 195 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 219 histogram->Add(sample); | 196 histogram->Add(sample); |
| 220 } | 197 } |
| 221 | 198 |
| 222 // A version of the UMA_HISTOGRAM_TIMES macro that allows the |name| | |
| 223 // to vary over the program's runtime. | |
| 224 void LogUMAHistogramTimes(const std::string& name, | |
| 225 const base::TimeDelta& duration) { | |
| 226 // Note: This leaks memory, which is expected behavior. | |
| 227 base::HistogramBase* histogram = | |
| 228 base::Histogram::FactoryTimeGet( | |
| 229 name, | |
| 230 base::TimeDelta::FromMilliseconds(1), | |
| 231 base::TimeDelta::FromSeconds(10), | |
| 232 50, | |
| 233 base::HistogramBase::kUmaTargetedHistogramFlag); | |
| 234 histogram->AddTime(duration); | |
| 235 } | |
| 236 | |
| 237 // A version of the UMA_HISTOGRAM_LONG_TIMES macro that allows the |name| | 199 // A version of the UMA_HISTOGRAM_LONG_TIMES macro that allows the |name| |
| 238 // to vary over the program's runtime. | 200 // to vary over the program's runtime. |
| 239 void LogUMAHistogramLongTimes(const std::string& name, | 201 void LogUMAHistogramLongTimes(const std::string& name, |
| 240 const base::TimeDelta& duration) { | 202 const base::TimeDelta& duration) { |
| 241 // Note: This leaks memory, which is expected behavior. | 203 // Note: This leaks memory, which is expected behavior. |
| 242 base::HistogramBase* histogram = | 204 base::HistogramBase* histogram = |
| 243 base::Histogram::FactoryTimeGet( | 205 base::Histogram::FactoryTimeGet( |
| 244 name, | 206 name, |
| 245 base::TimeDelta::FromMilliseconds(1), | 207 base::TimeDelta::FromMilliseconds(1), |
| 246 base::TimeDelta::FromHours(1), | 208 base::TimeDelta::FromHours(1), |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 void AutofillMetrics::LogScanCreditCardCompleted( | 275 void AutofillMetrics::LogScanCreditCardCompleted( |
| 314 const base::TimeDelta& duration, | 276 const base::TimeDelta& duration, |
| 315 bool completed) { | 277 bool completed) { |
| 316 std::string suffix = completed ? "Completed" : "Cancelled"; | 278 std::string suffix = completed ? "Completed" : "Cancelled"; |
| 317 LogUMAHistogramLongTimes("Autofill.ScanCreditCard.Duration_" + suffix, | 279 LogUMAHistogramLongTimes("Autofill.ScanCreditCard.Duration_" + suffix, |
| 318 duration); | 280 duration); |
| 319 UMA_HISTOGRAM_BOOLEAN("Autofill.ScanCreditCard.Completed", completed); | 281 UMA_HISTOGRAM_BOOLEAN("Autofill.ScanCreditCard.Completed", completed); |
| 320 } | 282 } |
| 321 | 283 |
| 322 // static | 284 // static |
| 323 void AutofillMetrics::LogDialogDismissalState(DialogDismissalState state) { | |
| 324 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.DismissalState", | |
| 325 state, NUM_DIALOG_DISMISSAL_STATES); | |
| 326 } | |
| 327 | |
| 328 // static | |
| 329 void AutofillMetrics::LogDialogInitialUserState( | |
| 330 DialogInitialUserStateMetric user_type) { | |
| 331 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.InitialUserState", | |
| 332 user_type, NUM_DIALOG_INITIAL_USER_STATE_METRICS); | |
| 333 } | |
| 334 | |
| 335 // static | |
| 336 void AutofillMetrics::LogDialogLatencyToShow(const base::TimeDelta& duration) { | |
| 337 LogUMAHistogramTimes("RequestAutocomplete.UiLatencyToShow", duration); | |
| 338 } | |
| 339 | |
| 340 // static | |
| 341 void AutofillMetrics::LogDialogPopupEvent(DialogPopupEvent event) { | |
| 342 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.PopupInDialog", | |
| 343 event, NUM_DIALOG_POPUP_EVENTS); | |
| 344 } | |
| 345 | |
| 346 // static | |
| 347 void AutofillMetrics::LogDialogSecurityMetric(DialogSecurityMetric metric) { | |
| 348 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.Security", | |
| 349 metric, NUM_DIALOG_SECURITY_METRICS); | |
| 350 } | |
| 351 | |
| 352 // static | |
| 353 void AutofillMetrics::LogDialogUiDuration( | |
| 354 const base::TimeDelta& duration, | |
| 355 DialogDismissalAction dismissal_action) { | |
| 356 std::string suffix; | |
| 357 switch (dismissal_action) { | |
| 358 case DIALOG_ACCEPTED: | |
| 359 suffix = "Submit"; | |
| 360 break; | |
| 361 | |
| 362 case DIALOG_CANCELED: | |
| 363 suffix = "Cancel"; | |
| 364 break; | |
| 365 } | |
| 366 | |
| 367 LogUMAHistogramLongTimes("RequestAutocomplete.UiDuration", duration); | |
| 368 LogUMAHistogramLongTimes("RequestAutocomplete.UiDuration." + suffix, | |
| 369 duration); | |
| 370 } | |
| 371 | |
| 372 // static | |
| 373 void AutofillMetrics::LogDialogUiEvent(DialogUiEvent event) { | |
| 374 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.UiEvents", event, | |
| 375 NUM_DIALOG_UI_EVENTS); | |
| 376 } | |
| 377 | |
| 378 // static | |
| 379 void AutofillMetrics::LogUnmaskPromptEvent(UnmaskPromptEvent event) { | 285 void AutofillMetrics::LogUnmaskPromptEvent(UnmaskPromptEvent event) { |
| 380 UMA_HISTOGRAM_ENUMERATION("Autofill.UnmaskPrompt.Events", event, | 286 UMA_HISTOGRAM_ENUMERATION("Autofill.UnmaskPrompt.Events", event, |
| 381 NUM_UNMASK_PROMPT_EVENTS); | 287 NUM_UNMASK_PROMPT_EVENTS); |
| 382 } | 288 } |
| 383 | 289 |
| 384 // static | 290 // static |
| 385 void AutofillMetrics::LogUnmaskPromptEventDuration( | 291 void AutofillMetrics::LogUnmaskPromptEventDuration( |
| 386 const base::TimeDelta& duration, | 292 const base::TimeDelta& duration, |
| 387 UnmaskPromptEvent close_event) { | 293 UnmaskPromptEvent close_event) { |
| 388 std::string suffix; | 294 std::string suffix; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 default: | 393 default: |
| 488 NOTREACHED(); | 394 NOTREACHED(); |
| 489 return; | 395 return; |
| 490 } | 396 } |
| 491 LogUMAHistogramLongTimes("Autofill.UnmaskPrompt.UnmaskingDuration", duration); | 397 LogUMAHistogramLongTimes("Autofill.UnmaskPrompt.UnmaskingDuration", duration); |
| 492 LogUMAHistogramLongTimes("Autofill.UnmaskPrompt.UnmaskingDuration." + suffix, | 398 LogUMAHistogramLongTimes("Autofill.UnmaskPrompt.UnmaskingDuration." + suffix, |
| 493 duration); | 399 duration); |
| 494 } | 400 } |
| 495 | 401 |
| 496 // static | 402 // static |
| 497 void AutofillMetrics::LogWalletErrorMetric(WalletErrorMetric metric) { | |
| 498 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.WalletErrors", metric, | |
| 499 NUM_WALLET_ERROR_METRICS); | |
| 500 } | |
| 501 | |
| 502 // static | |
| 503 void AutofillMetrics::LogWalletApiCallDuration( | |
| 504 WalletApiCallMetric metric, | |
| 505 const base::TimeDelta& duration) { | |
| 506 LogUMAHistogramTimes("Wallet.ApiCallDuration." + | |
| 507 WalletApiMetricToString(metric), duration); | |
| 508 } | |
| 509 | |
| 510 // static | |
| 511 void AutofillMetrics::LogWalletMalformedResponseMetric( | |
| 512 WalletApiCallMetric metric) { | |
| 513 UMA_HISTOGRAM_ENUMERATION("Wallet.MalformedResponse", metric, | |
| 514 NUM_WALLET_API_CALLS); | |
| 515 } | |
| 516 | |
| 517 // static | |
| 518 void AutofillMetrics::LogWalletRequiredActionMetric( | |
| 519 WalletRequiredActionMetric required_action) { | |
| 520 UMA_HISTOGRAM_ENUMERATION("RequestAutocomplete.WalletRequiredActions", | |
| 521 required_action, NUM_WALLET_REQUIRED_ACTIONS); | |
| 522 } | |
| 523 | |
| 524 // static | |
| 525 void AutofillMetrics::LogWalletResponseCode(int response_code) { | |
| 526 UMA_HISTOGRAM_SPARSE_SLOWLY("Wallet.ResponseCode", response_code); | |
| 527 } | |
| 528 | |
| 529 // static | |
| 530 void AutofillMetrics::LogDeveloperEngagementMetric( | 403 void AutofillMetrics::LogDeveloperEngagementMetric( |
| 531 DeveloperEngagementMetric metric) { | 404 DeveloperEngagementMetric metric) { |
| 532 DCHECK_LT(metric, NUM_DEVELOPER_ENGAGEMENT_METRICS); | 405 DCHECK_LT(metric, NUM_DEVELOPER_ENGAGEMENT_METRICS); |
| 533 UMA_HISTOGRAM_ENUMERATION("Autofill.DeveloperEngagement", metric, | 406 UMA_HISTOGRAM_ENUMERATION("Autofill.DeveloperEngagement", metric, |
| 534 NUM_DEVELOPER_ENGAGEMENT_METRICS); | 407 NUM_DEVELOPER_ENGAGEMENT_METRICS); |
| 535 } | 408 } |
| 536 | 409 |
| 537 // static | 410 // static |
| 538 void AutofillMetrics::LogHeuristicTypePrediction(FieldTypeQualityMetric metric, | 411 void AutofillMetrics::LogHeuristicTypePrediction(FieldTypeQualityMetric metric, |
| 539 ServerFieldType field_type, | 412 ServerFieldType field_type, |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 881 else if (is_server_data_available_ && !is_local_data_available_) | 754 else if (is_server_data_available_ && !is_local_data_available_) |
| 882 name += ".WithOnlyServerData"; | 755 name += ".WithOnlyServerData"; |
| 883 else if (!is_server_data_available_ && is_local_data_available_) | 756 else if (!is_server_data_available_ && is_local_data_available_) |
| 884 name += ".WithOnlyLocalData"; | 757 name += ".WithOnlyLocalData"; |
| 885 else | 758 else |
| 886 name += ".WithBothServerAndLocalData"; | 759 name += ".WithBothServerAndLocalData"; |
| 887 LogUMAHistogramEnumeration(name, event, NUM_FORM_EVENTS); | 760 LogUMAHistogramEnumeration(name, event, NUM_FORM_EVENTS); |
| 888 } | 761 } |
| 889 | 762 |
| 890 } // namespace autofill | 763 } // namespace autofill |
| OLD | NEW |