blob: bb3dbd1d47e62747767cb22e4c9a2cb6d2b0856e [file] [log] [blame]
// 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;
}