Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Unified Diff: components/payments/core/journey_logger.cc

Issue 2750103005: [Payments] Move journey logger to native. (Closed)
Patch Set: Add the component_jni_registrar files Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/payments/core/journey_logger.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/payments/core/journey_logger.cc
diff --git a/components/payments/core/journey_logger.cc b/components/payments/core/journey_logger.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c7d08f2cf5d36bf09fa360e853b327ff09bf32e4
--- /dev/null
+++ b/components/payments/core/journey_logger.cc
@@ -0,0 +1,196 @@
+// Copyright 2017 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/payments/core/journey_logger.h"
+
+#include <algorithm>
+
+#include "base/metrics/histogram_functions.h"
+#include "base/metrics/histogram_macros.h"
+
+namespace payments {
+
+namespace {
+
+// Returns the JourneyLogger histograms name suffix based on the |section| and
+// the |completion_status|.
+std::string GetHistogramNameSuffix(
+ int section,
+ JourneyLogger::CompletionStatus completion_status) {
+ std::string name_suffix = "";
+
+ switch (section) {
+ case JourneyLogger::SECTION_SHIPPING_ADDRESS:
+ name_suffix = "ShippingAddress.";
+ break;
+ case JourneyLogger::SECTION_CONTACT_INFO:
+ name_suffix = "ContactInfo.";
+ break;
+ case JourneyLogger::SECTION_CREDIT_CARDS:
+ name_suffix = "CreditCards.";
+ break;
+ default:
+ break;
+ }
+
+ switch (completion_status) {
+ case JourneyLogger::COMPLETION_STATUS_COMPLETED:
+ name_suffix += "Completed";
+ break;
+ case JourneyLogger::COMPLETION_STATUS_USER_ABORTED:
+ name_suffix += "UserAborted";
+ break;
+ case JourneyLogger::COMPLETION_STATUS_OTHER_ABORTED:
+ name_suffix += "OtherAborted";
+ break;
+ default:
+ break;
+ }
+
+ DCHECK(!name_suffix.empty());
+ return name_suffix;
+}
+
+} // namespace
+
+JourneyLogger::JourneyLogger()
+ : was_can_make_payments_used_(false),
+ could_make_payment_(false),
+ was_show_called_(false) {}
+
+JourneyLogger::~JourneyLogger() {}
+
+void JourneyLogger::IncrementSelectionAdds(Section section) {
+ DCHECK_LT(section, SECTION_MAX);
+ sections_[section].number_selection_adds_++;
+}
+
+void JourneyLogger::IncrementSelectionChanges(Section section) {
+ DCHECK_LT(section, SECTION_MAX);
+ sections_[section].number_selection_changes_++;
+}
+
+void JourneyLogger::IncrementSelectionEdits(Section section) {
+ DCHECK_LT(section, SECTION_MAX);
+ sections_[section].number_selection_edits_++;
+}
+
+void JourneyLogger::SetNumberOfSuggestionsShown(Section section, int number) {
+ DCHECK_LT(section, SECTION_MAX);
+ sections_[section].number_suggestions_shown_ = number;
+ sections_[section].is_requested_ = true;
+}
+
+void JourneyLogger::SetCanMakePaymentValue(bool value) {
+ was_can_make_payments_used_ = true;
+ could_make_payment_ |= value;
+}
+
+void JourneyLogger::SetShowCalled() {
+ was_show_called_ = true;
+}
+
+void JourneyLogger::RecordJourneyStatsHistograms(
+ CompletionStatus completion_status) {
+ RecordSectionSpecificStats(completion_status);
+
+ // Record the CanMakePayment metrics based on whether the transaction was
+ // completed or aborted by the user (UserAborted) or otherwise (OtherAborted).
+ RecordCanMakePaymentStats(completion_status);
+}
+
+void JourneyLogger::RecordSectionSpecificStats(
+ CompletionStatus completion_status) {
+ // Record whether the user had suggestions for each requested information.
+ bool user_had_all_requested_information = true;
+
+ for (int i = 0; i < NUMBER_OF_SECTIONS; ++i) {
+ std::string name_suffix = GetHistogramNameSuffix(i, completion_status);
+
+ // Only log the metrics for a section if it was requested by the merchant.
+ if (sections_[i].is_requested_) {
+ base::UmaHistogramCustomCounts(
+ "PaymentRequest.NumberOfSelectionAdds." + name_suffix,
+ std::min(sections_[i].number_selection_adds_, MAX_EXPECTED_SAMPLE),
+ MIN_EXPECTED_SAMPLE, MAX_EXPECTED_SAMPLE, NUMBER_BUCKETS);
+ base::UmaHistogramCustomCounts(
+ "PaymentRequest.NumberOfSelectionChanges." + name_suffix,
+ std::min(sections_[i].number_selection_changes_, MAX_EXPECTED_SAMPLE),
+ MIN_EXPECTED_SAMPLE, MAX_EXPECTED_SAMPLE, NUMBER_BUCKETS);
+ base::UmaHistogramCustomCounts(
+ "PaymentRequest.NumberOfSelectionEdits." + name_suffix,
+ std::min(sections_[i].number_selection_edits_, MAX_EXPECTED_SAMPLE),
+ MIN_EXPECTED_SAMPLE, MAX_EXPECTED_SAMPLE, NUMBER_BUCKETS);
+ base::UmaHistogramCustomCounts(
+ "PaymentRequest.NumberOfSuggestionsShown." + name_suffix,
+ std::min(sections_[i].number_suggestions_shown_, MAX_EXPECTED_SAMPLE),
+ MIN_EXPECTED_SAMPLE, MAX_EXPECTED_SAMPLE, NUMBER_BUCKETS);
+
+ if (sections_[i].number_suggestions_shown_ == 0) {
+ user_had_all_requested_information = false;
+ }
+ }
+ }
+
+ // Record metrics about completion based on whether the user had suggestions
+ // for each requested information.
+ if (user_had_all_requested_information) {
+ base::UmaHistogramEnumeration(
+ "PaymentRequest.UserHadSuggestionsForEverything."
+ "EffectOnCompletion",
+ completion_status, COMPLETION_STATUS_MAX);
+ } else {
+ base::UmaHistogramEnumeration(
+ "PaymentRequest.UserDidNotHaveSuggestionsForEverything."
+ "EffectOnCompletion",
+ completion_status, COMPLETION_STATUS_MAX);
+ }
+}
+
+void JourneyLogger::RecordCanMakePaymentStats(
+ CompletionStatus completion_status) {
+ // Record CanMakePayment usage.
+ UMA_HISTOGRAM_ENUMERATION("PaymentRequest.CanMakePayment.Usage",
+ was_can_make_payments_used_
+ ? CAN_MAKE_PAYMENT_USED
+ : CAN_MAKE_PAYMENT_NOT_USED,
+ CAN_MAKE_PAYMENT_USE_MAX);
+
+ RecordCanMakePaymentEffectOnShow();
+ RecordCanMakePaymentEffectOnCompletion(completion_status);
+}
+
+void JourneyLogger::RecordCanMakePaymentEffectOnShow() {
+ if (!was_can_make_payments_used_)
+ return;
+
+ int effect_on_show = 0;
+ if (was_show_called_)
+ effect_on_show |= CMP_SHOW_DID_SHOW;
+ if (could_make_payment_)
+ effect_on_show |= CMP_SHOW_COULD_MAKE_PAYMENT_;
+
+ UMA_HISTOGRAM_ENUMERATION("PaymentRequest.CanMakePayment.Used.EffectOnShow",
+ effect_on_show, CMP_SHOW_MAX);
+}
+
+void JourneyLogger::RecordCanMakePaymentEffectOnCompletion(
+ CompletionStatus completion_status) {
+ if (!was_show_called_)
+ return;
+
+ std::string histogram_name = "PaymentRequest.CanMakePayment.";
+ if (!was_can_make_payments_used_) {
+ histogram_name += "NotUsed.WithShowEffectOnCompletion";
+ } else if (could_make_payment_) {
+ histogram_name += "Used.TrueWithShowEffectOnCompletion";
+ } else {
+ histogram_name += "Used.FalseWithShowEffectOnCompletion";
+ }
+
+ base::UmaHistogramEnumeration(histogram_name, completion_status,
+ COMPLETION_STATUS_MAX);
+}
+
+} // namespace payments
« no previous file with comments | « components/payments/core/journey_logger.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698