Merge pull request #20426 from brave/browser-open-time-daily
Add daily browser session time P3A metric
This commit is contained in:
@@ -72,6 +72,7 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Added 10/2022
|
||||
registry->RegisterBooleanPref(kDefaultBrowserPromptEnabled, true);
|
||||
BraveUptimeTracker::RegisterPrefsForMigration(registry);
|
||||
#endif
|
||||
|
||||
brave_wallet::RegisterLocalStatePrefsForMigration(registry);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "base/metrics/histogram_macros.h"
|
||||
#include "base/time/time.h"
|
||||
#include "brave/components/p3a_utils/bucket.h"
|
||||
#include "chrome/browser/profiles/profile.h"
|
||||
#include "chrome/browser/ui/browser.h"
|
||||
#include "chrome/browser/ui/browser_list.h"
|
||||
@@ -51,44 +52,66 @@ const char* GetPrefNameForProfile(Profile* profile) {
|
||||
|
||||
BraveUptimeTracker* g_brave_uptime_tracker_instance = nullptr;
|
||||
|
||||
constexpr size_t kUsageTimeQueryIntervalMinutes = 1;
|
||||
constexpr char kDailyUptimesListPrefName[] = "daily_uptimes";
|
||||
constexpr base::TimeDelta kUsageTimeQueryInterval = base::Minutes(1);
|
||||
constexpr base::TimeDelta kUsageTimeReportInterval = base::Days(1);
|
||||
constexpr char kDailyUptimesListPrefName[] = "daily_uptimes"; // DEPRECATED
|
||||
constexpr char kDailyUptimeSumPrefName[] = "brave.misc_metrics.uptime_sum";
|
||||
constexpr char kDailyUptimeFrameStartTimePrefName[] =
|
||||
"brave.misc_metrics.uptime_frame_start_time";
|
||||
|
||||
constexpr char kBrowserOpenTimeHistogramName[] = "Brave.Uptime.BrowserOpenTime";
|
||||
|
||||
constexpr int kBrowserOpenTimeBuckets[] = {30, 60, 120, 180, 300, 420, 600};
|
||||
|
||||
} // namespace
|
||||
|
||||
BraveUptimeTracker::BraveUptimeTracker(PrefService* local_state)
|
||||
: state_(local_state, kDailyUptimesListPrefName) {
|
||||
timer_.Start(FROM_HERE, base::Minutes(kUsageTimeQueryIntervalMinutes),
|
||||
: local_state_(local_state),
|
||||
report_frame_start_time_(
|
||||
local_state->GetTime(kDailyUptimeFrameStartTimePrefName)),
|
||||
report_frame_time_sum_(
|
||||
local_state_->GetTimeDelta(kDailyUptimeSumPrefName)) {
|
||||
if (report_frame_start_time_.is_null()) {
|
||||
// If today is the first time monitoring uptime, set the frame start time
|
||||
// to now.
|
||||
ResetReportFrame();
|
||||
}
|
||||
RecordP3A();
|
||||
timer_.Start(FROM_HERE, kUsageTimeQueryInterval,
|
||||
base::BindRepeating(&BraveUptimeTracker::RecordUsage,
|
||||
base::Unretained(this)));
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::RecordUsage() {
|
||||
const base::TimeDelta new_total = usage_clock_.GetTotalUsageTime();
|
||||
const base::TimeDelta interval = new_total - current_total_usage_;
|
||||
if (interval > base::TimeDelta()) {
|
||||
state_.AddDelta(interval.InSeconds());
|
||||
const base::TimeDelta total_diff = new_total - current_total_usage_;
|
||||
if (total_diff > base::TimeDelta()) {
|
||||
report_frame_time_sum_ += total_diff;
|
||||
current_total_usage_ = new_total;
|
||||
local_state_->SetTimeDelta(kDailyUptimeSumPrefName, report_frame_time_sum_);
|
||||
|
||||
RecordP3A();
|
||||
}
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::RecordP3A() {
|
||||
int answer = 0;
|
||||
if (state_.IsOneWeekPassed()) {
|
||||
uint64_t total = state_.GetWeeklySum();
|
||||
const int minutes = base::Seconds(total).InMinutes();
|
||||
DCHECK_GE(minutes, 0);
|
||||
if (0 <= minutes && minutes < 30) {
|
||||
answer = 1;
|
||||
} else if (30 <= minutes && minutes < 5 * 60) {
|
||||
answer = 2;
|
||||
} else {
|
||||
answer = 3;
|
||||
}
|
||||
if ((base::Time::Now() - report_frame_start_time_) <
|
||||
kUsageTimeReportInterval) {
|
||||
// Do not report, since 1 day has not passed.
|
||||
return;
|
||||
}
|
||||
UMA_HISTOGRAM_EXACT_LINEAR("Brave.Uptime.BrowserOpenMinutes", answer, 3);
|
||||
p3a_utils::RecordToHistogramBucket(kBrowserOpenTimeHistogramName,
|
||||
kBrowserOpenTimeBuckets,
|
||||
report_frame_time_sum_.InMinutes());
|
||||
ResetReportFrame();
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::ResetReportFrame() {
|
||||
report_frame_time_sum_ = base::TimeDelta();
|
||||
report_frame_start_time_ = base::Time::Now();
|
||||
local_state_->SetTimeDelta(kDailyUptimeSumPrefName, report_frame_time_sum_);
|
||||
local_state_->SetTime(kDailyUptimeFrameStartTimePrefName,
|
||||
report_frame_start_time_);
|
||||
}
|
||||
|
||||
BraveUptimeTracker::~BraveUptimeTracker() = default;
|
||||
@@ -98,9 +121,21 @@ void BraveUptimeTracker::CreateInstance(PrefService* local_state) {
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::RegisterPrefs(PrefRegistrySimple* registry) {
|
||||
registry->RegisterTimeDeltaPref(kDailyUptimeSumPrefName, base::TimeDelta());
|
||||
registry->RegisterTimePref(kDailyUptimeFrameStartTimePrefName, base::Time());
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::RegisterPrefsForMigration(
|
||||
PrefRegistrySimple* registry) {
|
||||
// Added 10/2023
|
||||
registry->RegisterListPref(kDailyUptimesListPrefName);
|
||||
}
|
||||
|
||||
void BraveUptimeTracker::MigrateObsoletePrefs(PrefService* local_state) {
|
||||
// Added 10/2023
|
||||
local_state->ClearPref(kDailyUptimesListPrefName);
|
||||
}
|
||||
|
||||
BraveWindowTracker::BraveWindowTracker(PrefService* local_state)
|
||||
: local_state_(local_state) {
|
||||
if (!local_state) {
|
||||
|
||||
@@ -17,11 +17,8 @@
|
||||
#error This file should only be included on desktop.
|
||||
#endif
|
||||
|
||||
#include <list>
|
||||
|
||||
#include "base/memory/raw_ptr.h"
|
||||
#include "base/timer/timer.h"
|
||||
#include "brave/components/time_period_storage/weekly_storage.h"
|
||||
#include "chrome/browser/resource_coordinator/usage_clock.h"
|
||||
#include "chrome/browser/ui/browser_list_observer.h"
|
||||
|
||||
@@ -40,15 +37,22 @@ class BraveUptimeTracker {
|
||||
static void CreateInstance(PrefService* local_state);
|
||||
|
||||
static void RegisterPrefs(PrefRegistrySimple* registry);
|
||||
static void RegisterPrefsForMigration(PrefRegistrySimple* registry);
|
||||
static void MigrateObsoletePrefs(PrefService* local_state);
|
||||
|
||||
private:
|
||||
void RecordUsage();
|
||||
void RecordP3A();
|
||||
|
||||
void ResetReportFrame();
|
||||
|
||||
raw_ptr<PrefService> local_state_;
|
||||
resource_coordinator::UsageClock usage_clock_;
|
||||
base::RepeatingTimer timer_;
|
||||
base::TimeDelta current_total_usage_;
|
||||
WeeklyStorage state_;
|
||||
|
||||
base::Time report_frame_start_time_;
|
||||
base::TimeDelta report_frame_time_sum_;
|
||||
};
|
||||
|
||||
// BraveWindowTracker is under !OS_ANDROID guard because
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "third_party/widevine/cdm/buildflags.h"
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
#include "brave/browser/p3a/p3a_core_metrics.h"
|
||||
#include "brave/browser/search_engines/search_engine_provider_util.h"
|
||||
#endif
|
||||
|
||||
@@ -262,6 +263,7 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) {
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Added 10/2022
|
||||
local_state->ClearPref(kDefaultBrowserPromptEnabled);
|
||||
brave::BraveUptimeTracker::MigrateObsoletePrefs(local_state);
|
||||
#endif
|
||||
|
||||
brave_search_conversion::p3a::MigrateObsoleteLocalStatePrefs(local_state);
|
||||
|
||||
@@ -92,7 +92,6 @@ constexpr inline auto kCollectedTypicalHistograms =
|
||||
"Brave.Toolbar.MenuOpens",
|
||||
"Brave.Sync.Status.2",
|
||||
"Brave.Sync.ProgressTokenEverReset",
|
||||
"Brave.Uptime.BrowserOpenMinutes",
|
||||
"Brave.VerticalTabs.GroupTabs",
|
||||
"Brave.VerticalTabs.OpenTabs",
|
||||
"Brave.VerticalTabs.PinnedTabs",
|
||||
@@ -221,6 +220,7 @@ constexpr inline auto kCollectedExpressHistograms =
|
||||
"Brave.Rewards.EnabledInstallationTime",
|
||||
"Brave.Today.IsEnabled",
|
||||
"Brave.Today.UsageDaily",
|
||||
"Brave.Uptime.BrowserOpenTime",
|
||||
"Brave.Wallet.UsageDaily"
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user