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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ios/chrome/browser/ui/contextual_search/contextual_search_metrics.h"
6
7 #include <map>
8
9 #include "base/metrics/histogram.h"
10 #include "base/metrics/user_metrics.h"
11 #include "base/time/time.h"
12
13 using ContextualSearch::PanelState;
14 using ContextualSearch::StateChangeReason;
15
16 // TODO(crbug.com/546238): Convert this into a class that is injected into
17 // CSController so it can be mocked and tested.
18
19 #define VLOG_UMA_HISTOGRAM_ENUMERATION(log_level, name, sample) \
20 DVLOG(log_level) << (name) << ": " << (sample);
21
22 #define VLOG_UMA_HISTOGRAM_TIMES(log_level, name, sample) \
23 DVLOG(log_level) << (name) << ": " << (sample).InMilliseconds();
24
25 #define LOGGED_UMA_HISTOGRAM_ENUMERATION(name, sample, boundary, log_level) \
26 { \
27 int evaluated_sample = sample; \
28 VLOG_UMA_HISTOGRAM_ENUMERATION(log_level, name, evaluated_sample); \
29 UMA_HISTOGRAM_ENUMERATION(name, evaluated_sample, boundary); \
30 }
31
32 #define LOGGED_UMA_HISTOGRAM_TIMES(name, sample, log_level) \
33 VLOG_UMA_HISTOGRAM_TIMES(log_level, name, sample); \
34 UMA_HISTOGRAM_TIMES(name, sample);
35
36 namespace {
37 // Constants used to log UMA "enum" histograms about the Contextual Search's
38 // preference state.
39 const char* const kUMAContextualSearchPreferenceStateHistogram =
40 "Search.ContextualSearchPreferenceState";
41 const char* const kUMAContextualSearchPreferenceStateChangeHistogram =
42 "Search.ContextualSearchPreferenceStateChange";
43 const char* const kUMAContextualSearchFirstRunFlowOutcomeHistogram =
44 "Search.ContextualSearchFirstRunFlowOutcome";
45 enum ContextualSearchPrefState {
46 PREFERENCE_UNINITIALIZED = 0,
47 PREFERENCE_ENABLED,
48 PREFERENCE_DISABLED,
49 PREFERENCE_HISTOGRAM_COUNT,
50 };
51
52 // Search duration histograms.
53 const char* const kUMAContextualSearchDurationSeenHistogram =
54 "Search.ContextualSearchDurationSeen";
55 const char* const kUMAContextualSearchDurationUnseenChainedHistogram =
56 "Search.ContextualSearchDurationUnseenChained";
57 const char* const kUMAContextualSearchDurationUnseenHistogram =
58 "Search.ContextualSearchDurationUnseen";
59 const char* const kUMAContextualSearchTimeToSearchHistogram =
60 "Search.ContextualSearchTimeToSearch";
61
62 // Constants used to log UMA "enum" histograms about whether search results were
63 // seen.
64 const char* const kUMAContextualSearchFirstRunPanelSeenHistogram =
65 "Search.ContextualSearchFirstRunPanelSeen";
66 const char* const kUMAContextualSearchSearchResultsSeenHistogram =
67 "Search.ContextualSearchResultsSeen";
68 enum ContextualSearchResultsSeen {
69 RESULTS_SEEN = 0,
70 RESULTS_NOT_SEEN,
71 RESULTS_SEEN_COUNT,
72 };
73
74 const char* const kUMAContextualSearchSearchResultsSeenByGestureHistogram =
75 "Search.ContextualSearchResultsSeenByGesture";
76 enum ContextualSearchResultsSeenByGesture {
77 RESULTS_FROM_TAP_SEEN = 0,
78 RESULTS_FROM_TAP_NOT_SEEN,
79 RESULTS_FROM_SELECT_SEEN,
80 RESULTS_FROM_SELECT_NOT_SEEN,
81 RESULTS_SEEN_BY_GESTURE_COUNT,
82 };
83
84 // Constants used to log UMA "enum" histograms about whether the selection is
85 // valid.
86 const char* const kUMAContextualSearchSelectionValidHistogram =
87 "Search.ContextualSearchSelectionValid";
88 enum ContextualSearchSelectionValidity {
89 SELECTION_VALID = 0,
90 SELECTION_INVALID,
91 SELECTION_VALIDITY_COUNT,
92 };
93
94 // Constants used to log UMA "enum" histograms about the panel's state
95 // transitions.
96 // Entry code: first entry into CLOSED.
97 const char* const kUMAContextualSearchEnterClosedHistogram =
98 "Search.ContextualSearchEnterClosed";
99 enum ContextualSearchClosedReason {
100 ENTER_CLOSED_FROM_OTHER = 0,
101 ENTER_CLOSED_FROM_PEEKED_BACK_PRESS,
102 ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL,
103 ENTER_CLOSED_FROM_PEEKED_TEXT_SELECT_TAP,
104 ENTER_CLOSED_FROM_EXPANDED_BACK_PRESS,
105 ENTER_CLOSED_FROM_EXPANDED_BASE_PAGE_TAP,
106 ENTER_CLOSED_FROM_EXPANDED_FLING,
107 ENTER_CLOSED_FROM_MAXIMIZED_BACK_PRESS,
108 ENTER_CLOSED_FROM_MAXIMIZED_FLING,
109 ENTER_CLOSED_FROM_MAXIMIZED_TAB_PROMOTION,
110 ENTER_CLOSED_FROM_MAXIMIZED_SERP_NAVIGATION,
111 ENTER_CLOSED_FROM_COUNT,
112 };
113
114 // Entry code: first entry into PEEKED.
115 const char* const kUMAContextualSearchEnterPeekedHistogram =
116 "Search.ContextualSearchEnterPeeked";
117 enum ContextualSearchPeekedReason {
118 ENTER_PEEKED_FROM_OTHER = 0,
119 ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_TAP,
120 ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_LONG_PRESS,
121 ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_TAP,
122 ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_LONG_PRESS,
123 ENTER_PEEKED_FROM_EXPANDED_SEARCH_BAR_TAP,
124 ENTER_PEEKED_FROM_EXPANDED_SWIPE,
125 ENTER_PEEKED_FROM_EXPANDED_FLING,
126 ENTER_PEEKED_FROM_MAXIMIZED_SWIPE,
127 ENTER_PEEKED_FROM_MAXIMIZED_FLING,
128 ENTER_PEEKED_FROM_COUNT,
129 };
130
131 // Entry code: first entry into EXPANDED.
132 const char* const kUMAContextualSearchEnterExpandedHistogram =
133 "Search.ContextualSearchEnterExpanded";
134 enum ContextualSearchExpandedReason {
135 ENTER_EXPANDED_FROM_OTHER = 0,
136 ENTER_EXPANDED_FROM_PEEKED_SEARCH_BAR_TAP,
137 ENTER_EXPANDED_FROM_PEEKED_SWIPE,
138 ENTER_EXPANDED_FROM_PEEKED_FLING,
139 ENTER_EXPANDED_FROM_MAXIMIZED_SWIPE,
140 ENTER_EXPANDED_FROM_MAXIMIZED_FLING,
141 ENTER_EXPANDED_FROM_COUNT,
142 };
143
144 // Entry code: first entry into MAXIMIZED.
145 const char* const kUMAContextualSearchEnterMaximizedHistogram =
146 "Search.ContextualSearchEnterMaximized";
147 enum ContextualSearchMaximizedReason {
148 ENTER_MAXIMIZED_FROM_OTHER = 0,
149 ENTER_MAXIMIZED_FROM_PEEKED_SWIPE,
150 ENTER_MAXIMIZED_FROM_PEEKED_FLING,
151 ENTER_MAXIMIZED_FROM_EXPANDED_SWIPE,
152 ENTER_MAXIMIZED_FROM_EXPANDED_FLING,
153 ENTER_MAXIMIZED_FROM_EXPANDED_SERP_NAVIGATION,
154 ENTER_MAXIMIZED_FROM_COUNT,
155 };
156
157 // Exit code: first exit from CLOSED (or UNDEFINED).
158 const char* const kUMAContextualSearchExitClosedHistogram =
159 "Search.ContextualSearchExitClosed";
160 enum ContextualSearchClosedExit {
161 EXIT_CLOSED_TO_OTHER = 0,
162 EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_TAP,
163 EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_LONG_PRESS,
164 EXIT_CLOSED_TO_COUNT,
165 };
166
167 // Exit code: first exit from PEEKED.
168 const char* const kUMAContextualSearchExitPeekedHistogram =
169 "Search.ContextualSearchExitPeeked";
170 enum ContextualSearchPeekedExit {
171 EXIT_PEEKED_TO_OTHER = 0,
172 EXIT_PEEKED_TO_CLOSED_BACK_PRESS,
173 EXIT_PEEKED_TO_CLOSED_BASE_PAGE_SCROLL,
174 EXIT_PEEKED_TO_CLOSED_TEXT_SELECT_TAP,
175 EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_TAP,
176 EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_LONG_PRESS,
177 EXIT_PEEKED_TO_EXPANDED_SEARCH_BAR_TAP,
178 EXIT_PEEKED_TO_EXPANDED_SWIPE,
179 EXIT_PEEKED_TO_EXPANDED_FLING,
180 EXIT_PEEKED_TO_MAXIMIZED_SWIPE,
181 EXIT_PEEKED_TO_MAXIMIZED_FLING,
182 EXIT_PEEKED_TO_COUNT,
183 };
184
185 // Exit code: first exit from EXPANDED.
186 const char* const kUMAContextualSearchExitExpandedHistogram =
187 "Search.ContextualSearchExitExpanded";
188 enum ContextualSearchExpandedExit {
189 EXIT_EXPANDED_TO_OTHER = 0,
190 EXIT_EXPANDED_TO_CLOSED_BACK_PRESS,
191 EXIT_EXPANDED_TO_CLOSED_BASE_PAGE_TAP,
192 EXIT_EXPANDED_TO_CLOSED_FLING,
193 EXIT_EXPANDED_TO_PEEKED_SEARCH_BAR_TAP,
194 EXIT_EXPANDED_TO_PEEKED_SWIPE,
195 EXIT_EXPANDED_TO_PEEKED_FLING,
196 EXIT_EXPANDED_TO_MAXIMIZED_SWIPE,
197 EXIT_EXPANDED_TO_MAXIMIZED_FLING,
198 EXIT_EXPANDED_TO_MAXIMIZED_SERP_NAVIGATION,
199 EXIT_EXPANDED_TO_COUNT,
200 };
201
202 // Exit code: first exit from MAXIMIZED.
203 const char* const kUMAContextualSearchExitMaximizedHistogram =
204 "Search.ContextualSearchExitMaximized";
205 enum ContextualSearchMaximizedExit {
206 EXIT_MAXIMIZED_TO_OTHER = 0,
207 EXIT_MAXIMIZED_TO_CLOSED_BACK_PRESS,
208 EXIT_MAXIMIZED_TO_CLOSED_FLING,
209 EXIT_MAXIMIZED_TO_CLOSED_TAB_PROMOTION,
210 EXIT_MAXIMIZED_TO_CLOSED_SERP_NAVIGATION,
211 EXIT_MAXIMIZED_TO_PEEKED_SWIPE,
212 EXIT_MAXIMIZED_TO_PEEKED_FLING,
213 EXIT_MAXIMIZED_TO_EXPANDED_SWIPE,
214 EXIT_MAXIMIZED_TO_EXPANDED_FLING,
215 EXIT_MAXIMIZED_TO_COUNT,
216 };
217
218 // Panel states that match UMA enum names.
219 enum PanelState { UNDEFINED, CLOSED, PEEKED, EXPANDED, MAXIMIZED };
220
221 // Utility method to convert enter transition (|from_state|, CLOSED, |reason|)
222 // to UMA histogram value.
223 int EnterClosedStateChanges(PanelState from_state,
224 ContextualSearch::StateChangeReason reason,
225 int default_code) {
226 switch (from_state) {
227 case PEEKED:
228 switch (reason) {
229 case ContextualSearch::BACK_PRESS:
230 return ENTER_CLOSED_FROM_PEEKED_BACK_PRESS;
231 case ContextualSearch::BASE_PAGE_SCROLL:
232 return ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL;
233 case ContextualSearch::TEXT_SELECT_TAP:
234 return ENTER_CLOSED_FROM_PEEKED_TEXT_SELECT_TAP;
235 default:
236 break;
237 }
238 break;
239 case EXPANDED:
240 switch (reason) {
241 case ContextualSearch::BACK_PRESS:
242 return ENTER_CLOSED_FROM_EXPANDED_BACK_PRESS;
243 case ContextualSearch::BASE_PAGE_TAP:
244 return ENTER_CLOSED_FROM_EXPANDED_BASE_PAGE_TAP;
245 case ContextualSearch::FLING:
246 return ENTER_CLOSED_FROM_EXPANDED_FLING;
247 default:
248 break;
249 }
250 break;
251 case MAXIMIZED:
252 switch (reason) {
253 case ContextualSearch::BACK_PRESS:
254 return ENTER_CLOSED_FROM_MAXIMIZED_BACK_PRESS;
255 case ContextualSearch::FLING:
256 return ENTER_CLOSED_FROM_MAXIMIZED_FLING;
257 case ContextualSearch::TAB_PROMOTION:
258 return ENTER_CLOSED_FROM_MAXIMIZED_TAB_PROMOTION;
259 case ContextualSearch::SERP_NAVIGATION:
260 return ENTER_CLOSED_FROM_MAXIMIZED_SERP_NAVIGATION;
261 default:
262 break;
263 }
264 break;
265 default:
266 break;
267 }
268 return default_code;
269 }
270
271 // Utility method to convert enter transition (|from_state|, PEEKED, |reason|)
272 // to UMA histogram value.
273 int EnterPeekedStateChanges(PanelState from_state,
274 ContextualSearch::StateChangeReason reason,
275 int default_code) {
276 switch (from_state) {
277 case CLOSED:
278 switch (reason) {
279 case ContextualSearch::TEXT_SELECT_TAP:
280 return ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_TAP;
281 case ContextualSearch::TEXT_SELECT_LONG_PRESS:
282 return ENTER_PEEKED_FROM_CLOSED_TEXT_SELECT_LONG_PRESS;
283 default:
284 break;
285 }
286 break;
287 case PEEKED:
288 switch (reason) {
289 case ContextualSearch::TEXT_SELECT_TAP:
290 return ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_TAP;
291 case ContextualSearch::TEXT_SELECT_LONG_PRESS:
292 return ENTER_PEEKED_FROM_PEEKED_TEXT_SELECT_LONG_PRESS;
293 default:
294 break;
295 }
296 break;
297 case EXPANDED:
298 switch (reason) {
299 case ContextualSearch::SEARCH_BAR_TAP:
300 return ENTER_PEEKED_FROM_EXPANDED_SEARCH_BAR_TAP;
301 case ContextualSearch::SWIPE:
302 return ENTER_PEEKED_FROM_EXPANDED_SWIPE;
303 case ContextualSearch::FLING:
304 return ENTER_PEEKED_FROM_EXPANDED_FLING;
305 default:
306 break;
307 }
308 break;
309 case MAXIMIZED:
310 switch (reason) {
311 case ContextualSearch::SWIPE:
312 return ENTER_PEEKED_FROM_MAXIMIZED_SWIPE;
313 case ContextualSearch::FLING:
314 return ENTER_PEEKED_FROM_MAXIMIZED_FLING;
315 default:
316 break;
317 }
318 break;
319 default:
320 break;
321 }
322 return default_code;
323 }
324
325 // Utility method to convert enter transition (|from_state|, EXPANDED, |reason|)
326 // to UMA histogram value.
327 int EnterExpandedStateChanges(PanelState from_state,
328 ContextualSearch::StateChangeReason reason,
329 int default_code) {
330 switch (from_state) {
331 case PEEKED:
332 switch (reason) {
333 case ContextualSearch::SEARCH_BAR_TAP:
334 return ENTER_EXPANDED_FROM_PEEKED_SEARCH_BAR_TAP;
335 case ContextualSearch::SWIPE:
336 return ENTER_EXPANDED_FROM_PEEKED_SWIPE;
337 case ContextualSearch::FLING:
338 return ENTER_EXPANDED_FROM_PEEKED_FLING;
339 default:
340 break;
341 }
342 break;
343 case MAXIMIZED:
344 switch (reason) {
345 case ContextualSearch::SWIPE:
346 return ENTER_EXPANDED_FROM_MAXIMIZED_SWIPE;
347 case ContextualSearch::FLING:
348 return ENTER_EXPANDED_FROM_MAXIMIZED_FLING;
349 default:
350 break;
351 }
352 break;
353 default:
354 break;
355 }
356 return default_code;
357 }
358
359 // Utility method to convert enter transition
360 // (|from_state|, MAXIMIZED, |reason|) to UMA histogram value.
361 int EnterMaximizedStateChanges(PanelState from_state,
362 ContextualSearch::StateChangeReason reason,
363 int default_code) {
364 switch (from_state) {
365 case PEEKED:
366 switch (reason) {
367 case ContextualSearch::SWIPE:
368 return ENTER_MAXIMIZED_FROM_PEEKED_SWIPE;
369 case ContextualSearch::FLING:
370 return ENTER_MAXIMIZED_FROM_PEEKED_FLING;
371 default:
372 break;
373 }
374 break;
375 case EXPANDED:
376 switch (reason) {
377 case ContextualSearch::SWIPE:
378 return ENTER_MAXIMIZED_FROM_EXPANDED_SWIPE;
379 case ContextualSearch::FLING:
380 return ENTER_MAXIMIZED_FROM_EXPANDED_FLING;
381 case ContextualSearch::SERP_NAVIGATION:
382 return ENTER_MAXIMIZED_FROM_EXPANDED_SERP_NAVIGATION;
383 default:
384 break;
385 }
386 break;
387 default:
388 break;
389 }
390 return default_code;
391 }
392
393 // Utility method to convert enter exit (CLOSED, |to_state|, |reason|)
394 // to UMA histogram value.
395 int ExitClosedStateChanges(PanelState to_state,
396 ContextualSearch::StateChangeReason reason,
397 int default_code) {
398 switch (to_state) {
399 case PEEKED:
400 switch (reason) {
401 case ContextualSearch::TEXT_SELECT_TAP:
402 return EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_TAP;
403 case ContextualSearch::TEXT_SELECT_LONG_PRESS:
404 return EXIT_CLOSED_TO_PEEKED_TEXT_SELECT_LONG_PRESS;
405 default:
406 break;
407 }
408 break;
409 default:
410 break;
411 }
412 return default_code;
413 }
414
415 // Utility method to convert enter exit (PEEKED, |to_state|, |reason|)
416 // to UMA histogram value.
417 int ExitPeekedStateChanges(PanelState to_state,
418 ContextualSearch::StateChangeReason reason,
419 int default_code) {
420 switch (to_state) {
421 case CLOSED:
422 switch (reason) {
423 case ContextualSearch::BACK_PRESS:
424 return EXIT_PEEKED_TO_CLOSED_BACK_PRESS;
425 case ContextualSearch::BASE_PAGE_SCROLL:
426 return EXIT_PEEKED_TO_CLOSED_BASE_PAGE_SCROLL;
427 case ContextualSearch::TEXT_SELECT_TAP:
428 return EXIT_PEEKED_TO_CLOSED_TEXT_SELECT_TAP;
429 default:
430 break;
431 }
432 break;
433 case PEEKED:
434 switch (reason) {
435 case ContextualSearch::TEXT_SELECT_TAP:
436 return EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_TAP;
437 case ContextualSearch::TEXT_SELECT_LONG_PRESS:
438 return EXIT_PEEKED_TO_PEEKED_TEXT_SELECT_LONG_PRESS;
439 default:
440 break;
441 }
442 break;
443 case EXPANDED:
444 switch (reason) {
445 case ContextualSearch::SEARCH_BAR_TAP:
446 return EXIT_PEEKED_TO_EXPANDED_SEARCH_BAR_TAP;
447 case ContextualSearch::SWIPE:
448 return EXIT_PEEKED_TO_EXPANDED_SWIPE;
449 case ContextualSearch::FLING:
450 return EXIT_PEEKED_TO_EXPANDED_FLING;
451 default:
452 break;
453 }
454 break;
455 case MAXIMIZED:
456 switch (reason) {
457 case ContextualSearch::SWIPE:
458 return EXIT_PEEKED_TO_MAXIMIZED_SWIPE;
459 case ContextualSearch::FLING:
460 return EXIT_PEEKED_TO_MAXIMIZED_FLING;
461 default:
462 break;
463 }
464 break;
465 default:
466 break;
467 }
468 return default_code;
469 }
470
471 // Utility method to convert enter exit (EXPANDED, |to_state|, |reason|)
472 // to UMA histogram value.
473 int ExitExpandedStateChanges(PanelState to_state,
474 ContextualSearch::StateChangeReason reason,
475 int default_code) {
476 switch (to_state) {
477 case CLOSED:
478 switch (reason) {
479 case ContextualSearch::BACK_PRESS:
480 return EXIT_EXPANDED_TO_CLOSED_BACK_PRESS;
481 case ContextualSearch::BASE_PAGE_TAP:
482 return EXIT_EXPANDED_TO_CLOSED_BASE_PAGE_TAP;
483 case ContextualSearch::FLING:
484 return EXIT_EXPANDED_TO_CLOSED_FLING;
485 default:
486 break;
487 }
488 break;
489 case PEEKED:
490 switch (reason) {
491 case ContextualSearch::SEARCH_BAR_TAP:
492 return EXIT_EXPANDED_TO_PEEKED_SEARCH_BAR_TAP;
493 case ContextualSearch::SWIPE:
494 return EXIT_EXPANDED_TO_PEEKED_SWIPE;
495 case ContextualSearch::FLING:
496 return EXIT_EXPANDED_TO_PEEKED_FLING;
497 default:
498 break;
499 }
500 break;
501 case MAXIMIZED:
502 switch (reason) {
503 case ContextualSearch::SWIPE:
504 return EXIT_EXPANDED_TO_MAXIMIZED_SWIPE;
505 case ContextualSearch::FLING:
506 return EXIT_EXPANDED_TO_MAXIMIZED_FLING;
507 case ContextualSearch::SERP_NAVIGATION:
508 return EXIT_EXPANDED_TO_MAXIMIZED_SERP_NAVIGATION;
509 default:
510 break;
511 }
512 break;
513 default:
514 break;
515 }
516 return default_code;
517 }
518
519 // Utility method to convert enter exit (MAXIMIZED, |to_state|, |reason|)
520 // to UMA histogram value.
521 int ExitMaximizedStateChanges(PanelState to_state,
522 ContextualSearch::StateChangeReason reason,
523 int default_code) {
524 switch (to_state) {
525 case CLOSED:
526 switch (reason) {
527 case ContextualSearch::BACK_PRESS:
528 return EXIT_MAXIMIZED_TO_CLOSED_BACK_PRESS;
529 case ContextualSearch::FLING:
530 return EXIT_MAXIMIZED_TO_CLOSED_FLING;
531 case ContextualSearch::TAB_PROMOTION:
532 return EXIT_MAXIMIZED_TO_CLOSED_TAB_PROMOTION;
533 case ContextualSearch::SERP_NAVIGATION:
534 return EXIT_MAXIMIZED_TO_CLOSED_SERP_NAVIGATION;
535 default:
536 break;
537 }
538 break;
539 case PEEKED:
540 switch (reason) {
541 case ContextualSearch::SWIPE:
542 return EXIT_MAXIMIZED_TO_PEEKED_SWIPE;
543 case ContextualSearch::FLING:
544 return EXIT_MAXIMIZED_TO_PEEKED_FLING;
545 default:
546 break;
547 }
548 break;
549 case EXPANDED:
550 switch (reason) {
551 case ContextualSearch::SWIPE:
552 return EXIT_MAXIMIZED_TO_EXPANDED_SWIPE;
553 case ContextualSearch::FLING:
554 return EXIT_MAXIMIZED_TO_EXPANDED_FLING;
555 default:
556 break;
557 }
558 break;
559 default:
560 break;
561 }
562 return default_code;
563 }
564
565 // Utility method that extracts a state change UMA enum value
566 int getStateChangeCode(PanelState from_state,
567 ContextualSearch::StateChangeReason reason,
568 PanelState to_state,
569 bool entry,
570 int default_code) {
571 if (entry) {
572 DCHECK_NE(from_state, UNDEFINED);
573 switch (to_state) {
574 case CLOSED:
575 return EnterClosedStateChanges(from_state, reason, default_code);
576 case PEEKED:
577 return EnterPeekedStateChanges(from_state, reason, default_code);
578 case EXPANDED:
579 return EnterExpandedStateChanges(from_state, reason, default_code);
580 case MAXIMIZED:
581 return EnterMaximizedStateChanges(from_state, reason, default_code);
582 default:
583 return default_code;
584 }
585 } else {
586 switch (from_state) {
587 case UNDEFINED:
588 case CLOSED:
589 return ExitClosedStateChanges(to_state, reason, default_code);
590 case PEEKED:
591 return ExitPeekedStateChanges(to_state, reason, default_code);
592 case EXPANDED:
593 return ExitExpandedStateChanges(to_state, reason, default_code);
594 case MAXIMIZED:
595 return ExitMaximizedStateChanges(to_state, reason, default_code);
596 default:
597 return default_code;
598 }
599 }
600 }
601
602 // Utility method that maps ContextualSearch::PanelStates to PanelStates.
603 PanelState panelState(ContextualSearch::PanelState state) {
604 switch (state) {
605 case ContextualSearch::UNDEFINED:
606 return UNDEFINED;
607 case ContextualSearch::DISMISSED:
608 return CLOSED;
609 case ContextualSearch::PEEKING:
610 return PEEKED;
611 case ContextualSearch::PREVIEWING:
612 return EXPANDED;
613 case ContextualSearch::COVERING:
614 return MAXIMIZED;
615 default:
616 NOTREACHED() << "Exciting new ContextualSearchPanel state found!";
617 return UNDEFINED;
618 }
619 }
620
621 // Utility method that mapse xternal pref state enum value into internal pref
622 // state histogram value (note that we want to keep these decoupled).
623 ContextualSearchPrefState getPrefState(
624 TouchToSearch::TouchToSearchPreferenceState prefState) {
625 switch (prefState) {
626 case TouchToSearch::DISABLED:
627 return PREFERENCE_DISABLED;
628 case TouchToSearch::ENABLED:
629 return PREFERENCE_ENABLED;
630 case TouchToSearch::UNDECIDED:
631 return PREFERENCE_UNINITIALIZED;
632 default:
633 NOTREACHED();
634 }
635 }
636
637 // Utility method for recording the results-seen metric common to multiple
638 // metrics calls.
639 void RecordResultsSeen(bool seen) {
640 LOGGED_UMA_HISTOGRAM_ENUMERATION(
641 kUMAContextualSearchSearchResultsSeenHistogram,
642 seen ? RESULTS_SEEN : RESULTS_NOT_SEEN, RESULTS_SEEN_COUNT, 1);
643 }
644
645 } // namespace
646
647 namespace ContextualSearch {
648
649 void RecordPreferenceState(TouchToSearch::TouchToSearchPreferenceState state) {
650 LOGGED_UMA_HISTOGRAM_ENUMERATION(kUMAContextualSearchPreferenceStateHistogram,
651 getPrefState(state),
652 PREFERENCE_HISTOGRAM_COUNT, 1);
653 }
654
655 void RecordPreferenceChanged(bool enabled) {
656 LOGGED_UMA_HISTOGRAM_ENUMERATION(
657 kUMAContextualSearchPreferenceStateChangeHistogram,
658 enabled ? PREFERENCE_ENABLED : PREFERENCE_DISABLED,
659 PREFERENCE_HISTOGRAM_COUNT, 1);
660 }
661
662 void RecordFirstRunFlowOutcome(
663 TouchToSearch::TouchToSearchPreferenceState state) {
664 LOGGED_UMA_HISTOGRAM_ENUMERATION(
665 kUMAContextualSearchFirstRunFlowOutcomeHistogram, getPrefState(state),
666 PREFERENCE_HISTOGRAM_COUNT, 1);
667 }
668
669 void RecordDuration(bool resultsSeen, bool chained, base::TimeDelta duration) {
670 if (resultsSeen) {
671 LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchDurationSeenHistogram,
672 duration, 1);
673 } else if (chained) {
674 LOGGED_UMA_HISTOGRAM_TIMES(
675 kUMAContextualSearchDurationUnseenChainedHistogram, duration, 1);
676 } else {
677 LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchDurationUnseenHistogram,
678 duration, 1);
679 }
680 }
681
682 void RecordTimeToSearch(base::TimeDelta duration) {
683 LOGGED_UMA_HISTOGRAM_TIMES(kUMAContextualSearchTimeToSearchHistogram,
684 duration, 1);
685 }
686
687 void RecordFirstRunPanelSeen(bool seen) {
688 LOGGED_UMA_HISTOGRAM_ENUMERATION(
689 kUMAContextualSearchFirstRunPanelSeenHistogram,
690 seen ? RESULTS_SEEN : RESULTS_NOT_SEEN, RESULTS_SEEN_COUNT, 1);
691 }
692
693 void RecordTapResultsSeen(bool seen) {
694 RecordResultsSeen(seen);
695 LOGGED_UMA_HISTOGRAM_ENUMERATION(
696 kUMAContextualSearchSearchResultsSeenByGestureHistogram,
697 seen ? RESULTS_FROM_TAP_SEEN : RESULTS_FROM_TAP_NOT_SEEN,
698 RESULTS_SEEN_BY_GESTURE_COUNT, 1);
699 }
700
701 void RecordSelectionResultsSeen(bool seen) {
702 RecordResultsSeen(seen);
703 LOGGED_UMA_HISTOGRAM_ENUMERATION(
704 kUMAContextualSearchSearchResultsSeenByGestureHistogram,
705 seen ? RESULTS_FROM_SELECT_SEEN : RESULTS_FROM_SELECT_NOT_SEEN,
706 RESULTS_SEEN_BY_GESTURE_COUNT, 1);
707 }
708
709 void RecordSelectionIsValid(bool valid) {
710 LOGGED_UMA_HISTOGRAM_ENUMERATION(kUMAContextualSearchSelectionValidHistogram,
711 valid ? SELECTION_VALID : SELECTION_INVALID,
712 SELECTION_VALIDITY_COUNT, 1);
713 }
714
715 void RecordFirstStateEntry(PanelState from_state,
716 PanelState to_state,
717 StateChangeReason reason) {
718 switch (panelState(to_state)) {
719 case CLOSED:
720 LOGGED_UMA_HISTOGRAM_ENUMERATION(
721 kUMAContextualSearchEnterClosedHistogram,
722 getStateChangeCode(panelState(from_state), reason, CLOSED, true,
723 ENTER_CLOSED_FROM_OTHER),
724 ENTER_CLOSED_FROM_COUNT, 1);
725 break;
726 case PEEKED:
727 LOGGED_UMA_HISTOGRAM_ENUMERATION(
728 kUMAContextualSearchEnterPeekedHistogram,
729 getStateChangeCode(panelState(from_state), reason, PEEKED, true,
730 ENTER_PEEKED_FROM_OTHER),
731 ENTER_PEEKED_FROM_COUNT, 1);
732 break;
733 case EXPANDED:
734 LOGGED_UMA_HISTOGRAM_ENUMERATION(
735 kUMAContextualSearchEnterExpandedHistogram,
736 getStateChangeCode(panelState(from_state), reason, EXPANDED, true,
737 ENTER_EXPANDED_FROM_OTHER),
738 ENTER_EXPANDED_FROM_COUNT, 1);
739 break;
740 case MAXIMIZED:
741 LOGGED_UMA_HISTOGRAM_ENUMERATION(
742 kUMAContextualSearchEnterMaximizedHistogram,
743 getStateChangeCode(panelState(from_state), reason, MAXIMIZED, true,
744 ENTER_MAXIMIZED_FROM_OTHER),
745 ENTER_MAXIMIZED_FROM_COUNT, 1);
746 break;
747 default:
748 NOTREACHED() << "RecordFirstStateEntry for unexpected state " << to_state;
749 break;
750 }
751 }
752
753 void RecordFirstStateExit(PanelState from_state,
754 PanelState to_state,
755 StateChangeReason reason) {
756 switch (panelState(from_state)) {
757 case CLOSED:
758 LOGGED_UMA_HISTOGRAM_ENUMERATION(
759 kUMAContextualSearchExitClosedHistogram,
760 getStateChangeCode(CLOSED, reason, panelState(to_state), false,
761 EXIT_CLOSED_TO_OTHER),
762 EXIT_CLOSED_TO_COUNT, 1);
763 break;
764 case PEEKED:
765 LOGGED_UMA_HISTOGRAM_ENUMERATION(
766 kUMAContextualSearchExitPeekedHistogram,
767 getStateChangeCode(PEEKED, reason, panelState(to_state), false,
768 EXIT_PEEKED_TO_OTHER),
769 EXIT_PEEKED_TO_COUNT, 1);
770 break;
771 case EXPANDED:
772 LOGGED_UMA_HISTOGRAM_ENUMERATION(
773 kUMAContextualSearchExitExpandedHistogram,
774 getStateChangeCode(EXPANDED, reason, panelState(to_state), false,
775 EXIT_EXPANDED_TO_OTHER),
776 EXIT_EXPANDED_TO_COUNT, 1);
777 break;
778 case MAXIMIZED:
779 LOGGED_UMA_HISTOGRAM_ENUMERATION(
780 kUMAContextualSearchExitMaximizedHistogram,
781 getStateChangeCode(MAXIMIZED, reason, panelState(to_state), false,
782 EXIT_MAXIMIZED_TO_OTHER),
783 EXIT_MAXIMIZED_TO_COUNT, 1);
784 break;
785 default:
786 NOTREACHED() << "RecordFirstStateExit for unexpected state " << to_state;
787 break;
788 }
789 }
790
791 } // namespace ContextualSearch
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698