| // Copyright 2022 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "chrome/browser/ui/tabs/tab_strip_scrubbing_metrics.h" | 
 |  | 
 | #include <stddef.h> | 
 | #include <stdint.h> | 
 |  | 
 | #include "base/metrics/histogram_macros.h" | 
 | #include "base/time/time.h" | 
 | #include "base/timer/timer.h" | 
 | #include "chrome/browser/ui/tabs/tab_strip_user_gesture_details.h" | 
 |  | 
 | namespace { | 
 | constexpr base::TimeDelta kTabScrubbingHistogramIntervalTime = | 
 |     base::Seconds(30); | 
 |  | 
 | constexpr base::TimeDelta kMaxTimeConsideredScrubbing = | 
 |     base::Milliseconds(1500); | 
 | }  // namespace | 
 |  | 
 | void TabStripScrubbingMetrics::Init() { | 
 |   last_tab_switch_timestamp_ = base::TimeTicks::Now(); | 
 |   tab_scrubbing_interval_timer_.Start( | 
 |       FROM_HERE, kTabScrubbingHistogramIntervalTime, | 
 |       base::BindRepeating(&TabStripScrubbingMetrics::RecordTabScrubbingMetrics, | 
 |                           base::Unretained(this))); | 
 | } | 
 |  | 
 | void TabStripScrubbingMetrics::IncrementPressCount( | 
 |     const TabStripUserGestureDetails& user_gesture) { | 
 |   // Maybe increment count of tabs 'scrubbed' by mouse or key press for | 
 |   // histogram data. | 
 |   if (user_gesture.type == TabStripUserGestureDetails::GestureType::kMouse || | 
 |       user_gesture.type == TabStripUserGestureDetails::GestureType::kKeyboard) { | 
 |     base::TimeDelta tab_switch_delta = | 
 |         base::TimeTicks::Now() - last_tab_switch_timestamp_; | 
 |     if (tab_switch_delta <= kMaxTimeConsideredScrubbing) { | 
 |       if (user_gesture.type == TabStripUserGestureDetails::GestureType::kMouse) | 
 |         ++tabs_scrubbed_by_mouse_press_count_; | 
 |       else if (user_gesture.type == | 
 |                TabStripUserGestureDetails::GestureType::kKeyboard) | 
 |         ++tabs_scrubbed_by_key_press_count_; | 
 |     } | 
 |   } | 
 |   last_tab_switch_timestamp_ = base::TimeTicks::Now(); | 
 | } | 
 |  | 
 | void TabStripScrubbingMetrics::RecordTabScrubbingMetrics() { | 
 |   UMA_HISTOGRAM_COUNTS_10000("Tabs.ScrubbedInInterval.MousePress", | 
 |                              tabs_scrubbed_by_mouse_press_count_); | 
 |   UMA_HISTOGRAM_COUNTS_10000("Tabs.ScrubbedInInterval.KeyPress", | 
 |                              tabs_scrubbed_by_key_press_count_); | 
 |   tabs_scrubbed_by_mouse_press_count_ = 0; | 
 |   tabs_scrubbed_by_key_press_count_ = 0; | 
 | } |