Merge pull request #20426 from brave/browser-open-time-daily

Add daily browser session time P3A metric
This commit is contained in:
Darnell Andries
2023-10-07 16:04:25 -07:00
committed by GitHub
5 changed files with 67 additions and 25 deletions
+1
View File
@@ -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);
+55 -20
View File
@@ -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) {
+8 -4
View File
@@ -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);
+1 -1
View File
@@ -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"
});