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

Unified Diff: ios/chrome/browser/ui/contextual_search/contextual_search_metrics.mm

Issue 2588713002: Upstream Chrome on iOS source code [4/11]. (Closed)
Patch Set: Created 4 years 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
Index: ios/chrome/browser/ui/contextual_search/contextual_search_metrics.mm
diff --git a/ios/chrome/browser/ui/contextual_search/contextual_search_metrics.mm b/ios/chrome/browser/ui/contextual_search/contextual_search_metrics.mm
new file mode 100644
index 0000000000000000000000000000000000000000..0dd443803fcd8b685ba6909af2d03949e0c27229
--- /dev/null
+++ b/ios/chrome/browser/ui/contextual_search/contextual_search_metrics.mm
@@ -0,0 +1,791 @@
+// Copyright 2014 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 "ios/chrome/browser/ui/contextual_search/contextual_search_metrics.h"
+
+#include <map>
+
+#include "base/metrics/histogram.h"
+#include "base/metrics/user_metrics.h"
+#include "base/time/time.h"
+
+using ContextualSearch::PanelState;
+using ContextualSearch::StateChangeReason;
+
+// TODO(crbug.com/546238): Convert this into a class that is injected into
+// CSController so it can be mocked and tested.
+
+#define VLOG_UMA_HISTOGRAM_ENUMERATION(log_level, name, sample) \
+ DVLOG(log_level) << (name) << ": " << (sample);
+
+#define VLOG_UMA_HISTOGRAM_TIMES(log_level, name, sample) \
+ DVLOG(log_level) << (name) << ": " << (sample).InMilliseconds();
+
+#define LOGGED_UMA_HISTOGRAM_ENUMERATION(name, sample, boundary, log_level) \
+ { \
+ int evaluated_sample = sample; \
+ VLOG_UMA_HISTOGRAM_ENUMERATION(log_level, name, evaluated_sample); \
+ UMA_HISTOGRAM_ENUMERATION(name, evaluated_sample, boundary); \
+ }
+
+#define LOGGED_UMA_HISTOGRAM_TIMES(name, sample, log_level) \
+ VLOG_UMA_HISTOGRAM_TIMES(log_level, name, sample); \
+ UMA_HISTOGRAM_TIMES(name, sample);
+
+namespace {
+// Constants used to log UMA "enum" histograms about the Contextual Search's
+// preference state.
+const char* const kUMAContextualSearchPreferenceStateHistogram =
+ "Search.ContextualSearchPreferenceState";
+const char* const kUMAContextualSearchPreferenceStateChangeHistogram =
+ "Search.ContextualSearchPreferenceStateChange";
+const char* const kUMAContextualSearchFirstRunFlowOutcomeHistogram =
+ "Search.ContextualSearchFirstRunFlowOutcome";
+enum ContextualSearchPrefState {
+ PREFERENCE_UNINITIALIZED = 0,
+ PREFERENCE_ENABLED,
+ PREFERENCE_DISABLED,
+ PREFERENCE_HISTOGRAM_COUNT,
+};
+
+// Search duration histograms.
+const char* const kUMAContextualSearchDurationSeenHistogram =
+ "Search.ContextualSearchDurationSeen";
+const char* const kUMAContextualSearchDurationUnseenChainedHistogram =
+ "Search.ContextualSearchDurationUnseenChained";
+const char* const kUMAContextualSearchDurationUnseenHistogram =
+ "Search.ContextualSearchDurationUnseen";
+const char* const kUMAContextualSearchTimeToSearchHistogram =
+ "Search.ContextualSearchTimeToSearch";
+
+// Constants used to log UMA "enum" histograms about whether search results were
+// seen.
+const char* const kUMAContextualSearchFirstRunPanelSeenHistogram =
+ "Search.ContextualSearchFirstRunPanelSeen";
+const char* const kUMAContextualSearchSearchResultsSeenHistogram =
+ "Search.ContextualSearchResultsSeen";
+enum ContextualSearchResultsSeen {
+ RESULTS_SEEN = 0,
+ RESULTS_NOT_SEEN,
+ RESULTS_SEEN_COUNT,
+};
+
+const char* const kUMAContextualSearchSearchResultsSeenByGestureHistogram =
+ "Search.ContextualSearchResultsSeenByGesture";
+enum ContextualSearchResultsSeenByGesture {
+ RESULTS_FROM_TAP_SEEN = 0,
+ RESULTS_FROM_TAP_NOT_SEEN,
+ RESULTS_FROM_SELECT_SEEN,
+ RESULTS_FROM_SELECT_NOT_SEEN,
+ RESULTS_SEEN_BY_GESTURE_COUNT,
+};
+
+// Constants used to log UMA "enum" histograms about whether the selection is
+// valid.
+const char* const kUMAContextualSearchSelectionValidHistogram =
+ "Search.ContextualSearchSelectionValid";
+enum ContextualSearchSelectionValidity {
+ SELECTION_VALID = 0,
+ SELECTION_INVALID,
+ SELECTION_VALIDITY_COUNT,
+};
+
+// Constants used to log UMA "enum" histograms about the panel's state
+// transitions.
+// Entry code: first entry into CLOSED.
+const char* const kUMAContextualSearchEnterClosedHistogram =
+ "Search.ContextualSearchEnterClosed";
+enum ContextualSearchClosedReason {
+ ENTER_CLOSED_FROM_OTHER = 0,
+ ENTER_CLOSED_FROM_PEEKED_BACK_PRESS,
+ ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL,
+ ENTER_CLOSED_FROM_PEEKED_TEXT_SELECT_TAP,
+ ENTER_CLOSED_FROM_EXPANDED_BACK_PRESS,
+ ENTER_CLOSED_FROM_EXPANDED_BASE_PAGE_TAP,
+ ENTER_CLOSED_FROM_EXPANDED_FLING,
+ ENTER_CLOSED_FROM_MAXIMIZED_BACK_PRESS,
+ ENTER_CLOSED_FROM_MAXIMIZED_FLING,
+ ENTER_CLOSED_FROM_MAXIMIZED_TAB_PROMOTION,
+ ENTER_CLOSED_FROM_MAXIMIZED_SERP_NAVIGATION,
+ ENTER_CLOSED_FROM_COUNT,
+};
+
+// Entry code: first entry into PEEKED.
+const char* const kUMAContextualSearchEnterPeekedHistogram =
+ "Search.ContextualSearchEnterPeeked";
+enum ContextualSearchPeekedReason {
+ ENTER_PEEKED_FROM_OTHER = 0,
+ ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_TAP,
+ ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_LONG_PRESS,
+ ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_TAP,
+ ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_LONG_PRESS,
+ ENTER_PEEKED_FROM_EXPANDED_SEARCH_BAR_TAP,
+ ENTER_PEEKED_FROM_EXPANDED_SWIPE,
+ ENTER_PEEKED_FROM_EXPANDED_FLING,
+ ENTER_PEEKED_FROM_MAXIMIZED_SWIPE,
+ ENTER_PEEKED_FROM_MAXIMIZED_FLING,
+ ENTER_PEEKED_FROM_COUNT,
+};
+
+// Entry code: first entry into EXPANDED.
+const char* const kUMAContextualSearchEnterExpandedHistogram =
+ "Search.ContextualSearchEnterExpanded";
+enum ContextualSearchExpandedReason {
+ ENTER_EXPANDED_FROM_OTHER = 0,
+ ENTER_EXPANDED_FROM_PEEKED_SEARCH_BAR_TAP,
+ ENTER_EXPANDED_FROM_PEEKED_SWIPE,
+ ENTER_EXPANDED_FROM_PEEKED_FLING,
+ ENTER_EXPANDED_FROM_MAXIMIZED_SWIPE,
+ ENTER_EXPANDED_FROM_MAXIMIZED_FLING,
+ ENTER_EXPANDED_FROM_COUNT,
+};
+
+// Entry code: first entry into MAXIMIZED.
+const char* const kUMAContextualSearchEnterMaximizedHistogram =
+ "Search.ContextualSearchEnterMaximized";
+enum ContextualSearchMaximizedReason {
+ ENTER_MAXIMIZED_FROM_OTHER = 0,
+ ENTER_MAXIMIZED_FROM_PEEKED_SWIPE,
+ ENTER_MAXIMIZED_FROM_PEEKED_FLING,
+ ENTER_MAXIMIZED_FROM_EXPANDED_SWIPE,
+ ENTER_MAXIMIZED_FROM_EXPANDED_FLING,
+ ENTER_MAXIMIZED_FROM_EXPANDED_SERP_NAVIGATION,
+ ENTER_MAXIMIZED_FROM_COUNT,
+};
+
+// Exit code: first exit from CLOSED (or UNDEFINED).
+const char* const kUMAContextualSearchExitClosedHistogram =
+ "Search.ContextualSearchExitClosed";
+enum ContextualSearchClosedExit {
+ EXIT_CLOSED_TO_OTHER = 0,
+ EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_TAP,
+ EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_LONG_PRESS,
+ EXIT_CLOSED_TO_COUNT,
+};
+
+// Exit code: first exit from PEEKED.
+const char* const kUMAContextualSearchExitPeekedHistogram =
+ "Search.ContextualSearchExitPeeked";
+enum ContextualSearchPeekedExit {
+ EXIT_PEEKED_TO_OTHER = 0,
+ EXIT_PEEKED_TO_CLOSED_BACK_PRESS,
+ EXIT_PEEKED_TO_CLOSED_BASE_PAGE_SCROLL,
+ EXIT_PEEKED_TO_CLOSED_TEXT_SELECT_TAP,
+ EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_TAP,
+ EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_LONG_PRESS,
+ EXIT_PEEKED_TO_EXPANDED_SEARCH_BAR_TAP,
+ EXIT_PEEKED_TO_EXPANDED_SWIPE,
+ EXIT_PEEKED_TO_EXPANDED_FLING,
+ EXIT_PEEKED_TO_MAXIMIZED_SWIPE,
+ EXIT_PEEKED_TO_MAXIMIZED_FLING,
+ EXIT_PEEKED_TO_COUNT,
+};
+
+// Exit code: first exit from EXPANDED.
+const char* const kUMAContextualSearchExitExpandedHistogram =
+ "Search.ContextualSearchExitExpanded";
+enum ContextualSearchExpandedExit {
+ EXIT_EXPANDED_TO_OTHER = 0,
+ EXIT_EXPANDED_TO_CLOSED_BACK_PRESS,
+ EXIT_EXPANDED_TO_CLOSED_BASE_PAGE_TAP,
+ EXIT_EXPANDED_TO_CLOSED_FLING,
+ EXIT_EXPANDED_TO_PEEKED_SEARCH_BAR_TAP,
+ EXIT_EXPANDED_TO_PEEKED_SWIPE,
+ EXIT_EXPANDED_TO_PEEKED_FLING,
+ EXIT_EXPANDED_TO_MAXIMIZED_SWIPE,
+ EXIT_EXPANDED_TO_MAXIMIZED_FLING,
+ EXIT_EXPANDED_TO_MAXIMIZED_SERP_NAVIGATION,
+ EXIT_EXPANDED_TO_COUNT,
+};
+
+// Exit code: first exit from MAXIMIZED.
+const char* const kUMAContextualSearchExitMaximizedHistogram =
+ "Search.ContextualSearchExitMaximized";
+enum ContextualSearchMaximizedExit {
+ EXIT_MAXIMIZED_TO_OTHER = 0,
+ EXIT_MAXIMIZED_TO_CLOSED_BACK_PRESS,
+ EXIT_MAXIMIZED_TO_CLOSED_FLING,
+ EXIT_MAXIMIZED_TO_CLOSED_TAB_PROMOTION,
+ EXIT_MAXIMIZED_TO_CLOSED_SERP_NAVIGATION,
+ EXIT_MAXIMIZED_TO_PEEKED_SWIPE,
+ EXIT_MAXIMIZED_TO_PEEKED_FLING,
+ EXIT_MAXIMIZED_TO_EXPANDED_SWIPE,
+ EXIT_MAXIMIZED_TO_EXPANDED_FLING,
+ EXIT_MAXIMIZED_TO_COUNT,
+};
+
+// Panel states that match UMA enum names.
+enum PanelState { UNDEFINED, CLOSED, PEEKED, EXPANDED, MAXIMIZED };
+
+// Utility method to convert enter transition (|from_state|, CLOSED, |reason|)
+// to UMA histogram value.
+int EnterClosedStateChanges(PanelState from_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (from_state) {
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return ENTER_CLOSED_FROM_PEEKED_BACK_PRESS;
+ case ContextualSearch::BASE_PAGE_SCROLL:
+ return ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL;
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return ENTER_CLOSED_FROM_PEEKED_TEXT_SELECT_TAP;
+ default:
+ break;
+ }
+ break;
+ case EXPANDED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return ENTER_CLOSED_FROM_EXPANDED_BACK_PRESS;
+ case ContextualSearch::BASE_PAGE_TAP:
+ return ENTER_CLOSED_FROM_EXPANDED_BASE_PAGE_TAP;
+ case ContextualSearch::FLING:
+ return ENTER_CLOSED_FROM_EXPANDED_FLING;
+ default:
+ break;
+ }
+ break;
+ case MAXIMIZED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return ENTER_CLOSED_FROM_MAXIMIZED_BACK_PRESS;
+ case ContextualSearch::FLING:
+ return ENTER_CLOSED_FROM_MAXIMIZED_FLING;
+ case ContextualSearch::TAB_PROMOTION:
+ return ENTER_CLOSED_FROM_MAXIMIZED_TAB_PROMOTION;
+ case ContextualSearch::SERP_NAVIGATION:
+ return ENTER_CLOSED_FROM_MAXIMIZED_SERP_NAVIGATION;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter transition (|from_state|, PEEKED, |reason|)
+// to UMA histogram value.
+int EnterPeekedStateChanges(PanelState from_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (from_state) {
+ case CLOSED:
+ switch (reason) {
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_TAP;
+ case ContextualSearch::TEXT_SELECT_LONG_PRESS:
+ return ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_LONG_PRESS;
+ default:
+ break;
+ }
+ break;
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_TAP;
+ case ContextualSearch::TEXT_SELECT_LONG_PRESS:
+ return ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_LONG_PRESS;
+ default:
+ break;
+ }
+ break;
+ case EXPANDED:
+ switch (reason) {
+ case ContextualSearch::SEARCH_BAR_TAP:
+ return ENTER_PEEKED_FROM_EXPANDED_SEARCH_BAR_TAP;
+ case ContextualSearch::SWIPE:
+ return ENTER_PEEKED_FROM_EXPANDED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_PEEKED_FROM_EXPANDED_FLING;
+ default:
+ break;
+ }
+ break;
+ case MAXIMIZED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return ENTER_PEEKED_FROM_MAXIMIZED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_PEEKED_FROM_MAXIMIZED_FLING;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter transition (|from_state|, EXPANDED, |reason|)
+// to UMA histogram value.
+int EnterExpandedStateChanges(PanelState from_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (from_state) {
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::SEARCH_BAR_TAP:
+ return ENTER_EXPANDED_FROM_PEEKED_SEARCH_BAR_TAP;
+ case ContextualSearch::SWIPE:
+ return ENTER_EXPANDED_FROM_PEEKED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_EXPANDED_FROM_PEEKED_FLING;
+ default:
+ break;
+ }
+ break;
+ case MAXIMIZED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return ENTER_EXPANDED_FROM_MAXIMIZED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_EXPANDED_FROM_MAXIMIZED_FLING;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter transition
+// (|from_state|, MAXIMIZED, |reason|) to UMA histogram value.
+int EnterMaximizedStateChanges(PanelState from_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (from_state) {
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return ENTER_MAXIMIZED_FROM_PEEKED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_MAXIMIZED_FROM_PEEKED_FLING;
+ default:
+ break;
+ }
+ break;
+ case EXPANDED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return ENTER_MAXIMIZED_FROM_EXPANDED_SWIPE;
+ case ContextualSearch::FLING:
+ return ENTER_MAXIMIZED_FROM_EXPANDED_FLING;
+ case ContextualSearch::SERP_NAVIGATION:
+ return ENTER_MAXIMIZED_FROM_EXPANDED_SERP_NAVIGATION;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter exit (CLOSED, |to_state|, |reason|)
+// to UMA histogram value.
+int ExitClosedStateChanges(PanelState to_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (to_state) {
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_TAP;
+ case ContextualSearch::TEXT_SELECT_LONG_PRESS:
+ return EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_LONG_PRESS;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter exit (PEEKED, |to_state|, |reason|)
+// to UMA histogram value.
+int ExitPeekedStateChanges(PanelState to_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (to_state) {
+ case CLOSED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return EXIT_PEEKED_TO_CLOSED_BACK_PRESS;
+ case ContextualSearch::BASE_PAGE_SCROLL:
+ return EXIT_PEEKED_TO_CLOSED_BASE_PAGE_SCROLL;
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return EXIT_PEEKED_TO_CLOSED_TEXT_SELECT_TAP;
+ default:
+ break;
+ }
+ break;
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::TEXT_SELECT_TAP:
+ return EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_TAP;
+ case ContextualSearch::TEXT_SELECT_LONG_PRESS:
+ return EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_LONG_PRESS;
+ default:
+ break;
+ }
+ break;
+ case EXPANDED:
+ switch (reason) {
+ case ContextualSearch::SEARCH_BAR_TAP:
+ return EXIT_PEEKED_TO_EXPANDED_SEARCH_BAR_TAP;
+ case ContextualSearch::SWIPE:
+ return EXIT_PEEKED_TO_EXPANDED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_PEEKED_TO_EXPANDED_FLING;
+ default:
+ break;
+ }
+ break;
+ case MAXIMIZED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return EXIT_PEEKED_TO_MAXIMIZED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_PEEKED_TO_MAXIMIZED_FLING;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter exit (EXPANDED, |to_state|, |reason|)
+// to UMA histogram value.
+int ExitExpandedStateChanges(PanelState to_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (to_state) {
+ case CLOSED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return EXIT_EXPANDED_TO_CLOSED_BACK_PRESS;
+ case ContextualSearch::BASE_PAGE_TAP:
+ return EXIT_EXPANDED_TO_CLOSED_BASE_PAGE_TAP;
+ case ContextualSearch::FLING:
+ return EXIT_EXPANDED_TO_CLOSED_FLING;
+ default:
+ break;
+ }
+ break;
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::SEARCH_BAR_TAP:
+ return EXIT_EXPANDED_TO_PEEKED_SEARCH_BAR_TAP;
+ case ContextualSearch::SWIPE:
+ return EXIT_EXPANDED_TO_PEEKED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_EXPANDED_TO_PEEKED_FLING;
+ default:
+ break;
+ }
+ break;
+ case MAXIMIZED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return EXIT_EXPANDED_TO_MAXIMIZED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_EXPANDED_TO_MAXIMIZED_FLING;
+ case ContextualSearch::SERP_NAVIGATION:
+ return EXIT_EXPANDED_TO_MAXIMIZED_SERP_NAVIGATION;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method to convert enter exit (MAXIMIZED, |to_state|, |reason|)
+// to UMA histogram value.
+int ExitMaximizedStateChanges(PanelState to_state,
+ ContextualSearch::StateChangeReason reason,
+ int default_code) {
+ switch (to_state) {
+ case CLOSED:
+ switch (reason) {
+ case ContextualSearch::BACK_PRESS:
+ return EXIT_MAXIMIZED_TO_CLOSED_BACK_PRESS;
+ case ContextualSearch::FLING:
+ return EXIT_MAXIMIZED_TO_CLOSED_FLING;
+ case ContextualSearch::TAB_PROMOTION:
+ return EXIT_MAXIMIZED_TO_CLOSED_TAB_PROMOTION;
+ case ContextualSearch::SERP_NAVIGATION:
+ return EXIT_MAXIMIZED_TO_CLOSED_SERP_NAVIGATION;
+ default:
+ break;
+ }
+ break;
+ case PEEKED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return EXIT_MAXIMIZED_TO_PEEKED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_MAXIMIZED_TO_PEEKED_FLING;
+ default:
+ break;
+ }
+ break;
+ case EXPANDED:
+ switch (reason) {
+ case ContextualSearch::SWIPE:
+ return EXIT_MAXIMIZED_TO_EXPANDED_SWIPE;
+ case ContextualSearch::FLING:
+ return EXIT_MAXIMIZED_TO_EXPANDED_FLING;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return default_code;
+}
+
+// Utility method that extracts a state change UMA enum value
+int getStateChangeCode(PanelState from_state,
+ ContextualSearch::StateChangeReason reason,
+ PanelState to_state,
+ bool entry,
+ int default_code) {
+ if (entry) {
+ DCHECK_NE(from_state, UNDEFINED);
+ switch (to_state) {
+ case CLOSED:
+ return EnterClosedStateChanges(from_state, reason, default_code);
+ case PEEKED:
+ return EnterPeekedStateChanges(from_state, reason, default_code);
+ case EXPANDED:
+ return EnterExpandedStateChanges(from_state, reason, default_code);
+ case MAXIMIZED:
+ return EnterMaximizedStateChanges(from_state, reason, default_code);
+ default:
+ return default_code;
+ }
+ } else {
+ switch (from_state) {
+ case UNDEFINED:
+ case CLOSED:
+ return ExitClosedStateChanges(to_state, reason, default_code);
+ case PEEKED:
+ return ExitPeekedStateChanges(to_state, reason, default_code);
+ case EXPANDED:
+ return ExitExpandedStateChanges(to_state, reason, default_code);
+ case MAXIMIZED:
+ return ExitMaximizedStateChanges(to_state, reason, default_code);
+ default:
+ return default_code;
+ }
+ }
+}
+
+// Utility method that maps ContextualSearch::PanelStates to PanelStates.
+PanelState panelState(ContextualSearch::PanelState state) {
+ switch (state) {
+ case ContextualSearch::UNDEFINED:
+ return UNDEFINED;
+ case ContextualSearch::DISMISSED:
+ return CLOSED;
+ case ContextualSearch::PEEKING:
+ return PEEKED;
+ case ContextualSearch::PREVIEWING:
+ return EXPANDED;
+ case ContextualSearch::COVERING:
+ return MAXIMIZED;
+ default:
+ NOTREACHED() << "Exciting new ContextualSearchPanel state found!";
+ return UNDEFINED;
+ }
+}
+
+// Utility method that mapse xternal pref state enum value into internal pref
+// state histogram value (note that we want to keep these decoupled).
+ContextualSearchPrefState getPrefState(
+ TouchToSearch::TouchToSearchPreferenceState prefState) {
+ switch (prefState) {
+ case TouchToSearch::DISABLED:
+ return PREFERENCE_DISABLED;
+ case TouchToSearch::ENABLED:
+ return PREFERENCE_ENABLED;
+ case TouchToSearch::UNDECIDED:
+ return PREFERENCE_UNINITIALIZED;
+ default:
+ NOTREACHED();
+ }
+}
+
+// Utility method for recording the results-seen metric common to multiple
+// metrics calls.
+void RecordResultsSeen(bool seen) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchSearchResultsSeenHistogram,
+ seen ? RESULTS_SEEN : RESULTS_NOT_SEEN, RESULTS_SEEN_COUNT, 1);
+}
+
+} // namespace
+
+namespace ContextualSearch {
+
+void RecordPreferenceState(TouchToSearch::TouchToSearchPreferenceState state) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(kUMAContextualSearchPreferenceStateHistogram,
+ getPrefState(state),
+ PREFERENCE_HISTOGRAM_COUNT, 1);
+}
+
+void RecordPreferenceChanged(bool enabled) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchPreferenceStateChangeHistogram,
+ enabled ? PREFERENCE_ENABLED : PREFERENCE_DISABLED,
+ PREFERENCE_HISTOGRAM_COUNT, 1);
+}
+
+void RecordFirstRunFlowOutcome(
+ TouchToSearch::TouchToSearchPreferenceState state) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchFirstRunFlowOutcomeHistogram, getPrefState(state),
+ PREFERENCE_HISTOGRAM_COUNT, 1);
+}
+
+void RecordDuration(bool resultsSeen, bool chained, base::TimeDelta duration) {
+ if (resultsSeen) {
+ LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchDurationSeenHistogram,
+ duration, 1);
+ } else if (chained) {
+ LOGGED_UMA_HISTOGRAM_TIMES(
+ kUMAContextualSearchDurationUnseenChainedHistogram, duration, 1);
+ } else {
+ LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchDurationUnseenHistogram,
+ duration, 1);
+ }
+}
+
+void RecordTimeToSearch(base::TimeDelta duration) {
+ LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchTimeToSearchHistogram,
+ duration, 1);
+}
+
+void RecordFirstRunPanelSeen(bool seen) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchFirstRunPanelSeenHistogram,
+ seen ? RESULTS_SEEN : RESULTS_NOT_SEEN, RESULTS_SEEN_COUNT, 1);
+}
+
+void RecordTapResultsSeen(bool seen) {
+ RecordResultsSeen(seen);
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchSearchResultsSeenByGestureHistogram,
+ seen ? RESULTS_FROM_TAP_SEEN : RESULTS_FROM_TAP_NOT_SEEN,
+ RESULTS_SEEN_BY_GESTURE_COUNT, 1);
+}
+
+void RecordSelectionResultsSeen(bool seen) {
+ RecordResultsSeen(seen);
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchSearchResultsSeenByGestureHistogram,
+ seen ? RESULTS_FROM_SELECT_SEEN : RESULTS_FROM_SELECT_NOT_SEEN,
+ RESULTS_SEEN_BY_GESTURE_COUNT, 1);
+}
+
+void RecordSelectionIsValid(bool valid) {
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(kUMAContextualSearchSelectionValidHistogram,
+ valid ? SELECTION_VALID : SELECTION_INVALID,
+ SELECTION_VALIDITY_COUNT, 1);
+}
+
+void RecordFirstStateEntry(PanelState from_state,
+ PanelState to_state,
+ StateChangeReason reason) {
+ switch (panelState(to_state)) {
+ case CLOSED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchEnterClosedHistogram,
+ getStateChangeCode(panelState(from_state), reason, CLOSED, true,
+ ENTER_CLOSED_FROM_OTHER),
+ ENTER_CLOSED_FROM_COUNT, 1);
+ break;
+ case PEEKED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchEnterPeekedHistogram,
+ getStateChangeCode(panelState(from_state), reason, PEEKED, true,
+ ENTER_PEEKED_FROM_OTHER),
+ ENTER_PEEKED_FROM_COUNT, 1);
+ break;
+ case EXPANDED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchEnterExpandedHistogram,
+ getStateChangeCode(panelState(from_state), reason, EXPANDED, true,
+ ENTER_EXPANDED_FROM_OTHER),
+ ENTER_EXPANDED_FROM_COUNT, 1);
+ break;
+ case MAXIMIZED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchEnterMaximizedHistogram,
+ getStateChangeCode(panelState(from_state), reason, MAXIMIZED, true,
+ ENTER_MAXIMIZED_FROM_OTHER),
+ ENTER_MAXIMIZED_FROM_COUNT, 1);
+ break;
+ default:
+ NOTREACHED() << "RecordFirstStateEntry for unexpected state " << to_state;
+ break;
+ }
+}
+
+void RecordFirstStateExit(PanelState from_state,
+ PanelState to_state,
+ StateChangeReason reason) {
+ switch (panelState(from_state)) {
+ case CLOSED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchExitClosedHistogram,
+ getStateChangeCode(CLOSED, reason, panelState(to_state), false,
+ EXIT_CLOSED_TO_OTHER),
+ EXIT_CLOSED_TO_COUNT, 1);
+ break;
+ case PEEKED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchExitPeekedHistogram,
+ getStateChangeCode(PEEKED, reason, panelState(to_state), false,
+ EXIT_PEEKED_TO_OTHER),
+ EXIT_PEEKED_TO_COUNT, 1);
+ break;
+ case EXPANDED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchExitExpandedHistogram,
+ getStateChangeCode(EXPANDED, reason, panelState(to_state), false,
+ EXIT_EXPANDED_TO_OTHER),
+ EXIT_EXPANDED_TO_COUNT, 1);
+ break;
+ case MAXIMIZED:
+ LOGGED_UMA_HISTOGRAM_ENUMERATION(
+ kUMAContextualSearchExitMaximizedHistogram,
+ getStateChangeCode(MAXIMIZED, reason, panelState(to_state), false,
+ EXIT_MAXIMIZED_TO_OTHER),
+ EXIT_MAXIMIZED_TO_COUNT, 1);
+ break;
+ default:
+ NOTREACHED() << "RecordFirstStateExit for unexpected state " << to_state;
+ break;
+ }
+}
+
+} // namespace ContextualSearch

Powered by Google App Engine
This is Rietveld 408576698