Add Rewards conversion P3A metrics for Android only

This commit is contained in:
Darnell Andries
2023-11-09 17:33:28 -08:00
parent ca55a44821
commit 90adee3719
12 changed files with 110 additions and 8 deletions
@@ -541,6 +541,12 @@ public class BraveRewardsNativeWorker {
}
}
public void RecordPanelTrigger() {
synchronized (lock) {
BraveRewardsNativeWorkerJni.get().recordPanelTrigger(mNativeBraveRewardsNativeWorker);
}
}
public void SetAutoContributeEnabled(boolean isSetAutoContributeEnabled) {
synchronized(lock) {
BraveRewardsNativeWorkerJni.get().setAutoContributeEnabled(
@@ -839,6 +845,9 @@ public class BraveRewardsNativeWorker {
void getAvailableCountries(long nativeBraveRewardsNativeWorker);
void disconnectWallet(long nativeBraveRewardsNativeWorker);
void refreshPublisher(long nativeBraveRewardsNativeWorker, String publisherKey);
void recordPanelTrigger(long nativeBraveRewardsNativeWorker);
void createRewardsWallet(long nativeBraveRewardsNativeWorker, String countryCode);
void getRewardsParameters(long nativeBraveRewardsNativeWorker);
double getVbatDeadline(long nativeBraveRewardsNativeWorker);
@@ -324,6 +324,7 @@ public class BraveRewardsPanel
mPopupWindow.showAsDropDown(mAnchorView, 0, 0);
mBraveRewardsNativeWorker.GetExternalWallet();
mBraveRewardsNativeWorker.RecordPanelTrigger();
}
private void setUpViews() {
@@ -25,6 +25,7 @@
#include "brave/components/brave_adaptive_captcha/server_util.h"
#include "brave/components/brave_ads/browser/ads_service.h"
#include "brave/components/brave_ads/core/public/prefs/pref_names.h"
#include "brave/components/brave_rewards/browser/rewards_p3a.h"
#include "brave/components/brave_rewards/browser/rewards_service.h"
#include "brave/components/brave_rewards/common/pref_names.h"
#include "brave/components/brave_rewards/common/rewards_util.h"
@@ -1018,6 +1019,13 @@ void BraveRewardsNativeWorker::SetAutoContributeEnabled(
}
}
void BraveRewardsNativeWorker::RecordPanelTrigger(JNIEnv* env) {
if (brave_rewards_service_) {
brave_rewards_service_->GetP3AConversionMonitor()->RecordPanelTrigger(
brave_rewards::p3a::PanelTrigger::kToolbarButton);
}
}
static void JNI_BraveRewardsNativeWorker_Init(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller) {
@@ -180,6 +180,8 @@ class BraveRewardsNativeWorker
JNIEnv* env,
const base::android::JavaParamRef<jstring>& publisher_key);
void RecordPanelTrigger(JNIEnv* env);
void OnCreateRewardsWallet(
brave_rewards::mojom::CreateRewardsWalletResult result);
@@ -16,7 +16,6 @@
namespace brave_rewards {
namespace p3a {
#if !BUILDFLAG(IS_ANDROID)
namespace {
// The maximum time difference allowed between the rewards panel opening action
@@ -25,8 +24,11 @@ namespace {
// enabling.
constexpr base::TimeDelta kMaxEnabledCauseTriggerTime = base::Minutes(1);
#if BUILDFLAG(IS_ANDROID)
constexpr base::TimeDelta kReportInterval = base::Days(1);
#endif
} // namespace
#endif // !BUILDFLAG(IS_ANDROID)
const char kEnabledSourceHistogramName[] = "Brave.Rewards.EnabledSource";
const char kToolbarButtonTriggerHistogramName[] =
@@ -35,8 +37,16 @@ const char kTipsSentHistogramName[] = "Brave.Rewards.TipsSent.2";
const char kAutoContributionsStateHistogramName[] =
"Brave.Rewards.AutoContributionsState.3";
const char kAdTypesEnabledHistogramName[] = "Brave.Rewards.AdTypesEnabled";
const char kMobileConversionHistogramName[] = "Brave.Rewards.MobileConversion";
const char kMobilePanelCountHistogramName[] = "Brave.Rewards.MobilePanelCount";
const int kTipsSentBuckets[] = {0, 1, 3};
#if BUILDFLAG(IS_ANDROID)
const int kMobilePanelCountBuckets[] = {5, 10, 50};
#endif
void RecordAutoContributionsState(bool ac_enabled) {
UMA_HISTOGRAM_EXACT_LINEAR(kAutoContributionsStateHistogramName, ac_enabled,
2);
@@ -76,7 +86,16 @@ void RecordAdTypesEnabled(PrefService* prefs) {
UMA_HISTOGRAM_ENUMERATION(kAdTypesEnabledHistogramName, answer);
}
ConversionMonitor::ConversionMonitor() = default;
#if BUILDFLAG(IS_ANDROID)
ConversionMonitor::ConversionMonitor(PrefService* prefs)
: prefs_(prefs),
mobile_panel_trigger_count_(prefs, prefs::kP3APanelTriggerCount) {
ReportPeriodicMetrics();
}
#else
ConversionMonitor::ConversionMonitor(PrefService* prefs) {}
#endif
ConversionMonitor::~ConversionMonitor() = default;
void ConversionMonitor::RecordPanelTrigger(PanelTrigger trigger) {
@@ -86,7 +105,17 @@ void ConversionMonitor::RecordPanelTrigger(PanelTrigger trigger) {
}
last_trigger_ = trigger;
last_trigger_time_ = base::Time::Now();
#endif // !BUILDFLAG(IS_ANDROID)
#else
if (prefs_->GetBoolean(prefs::kEnabled)) {
mobile_panel_trigger_count_.AddDelta(1u);
ReportMobilePanelTriggerCount();
} else {
mobile_trigger_timer_.Start(
FROM_HERE, kMaxEnabledCauseTriggerTime,
base::BindOnce(&ConversionMonitor::OnMobileTriggerTimer,
base::Unretained(this)));
}
#endif
}
void ConversionMonitor::RecordRewardsEnable() {
@@ -105,8 +134,35 @@ void ConversionMonitor::RecordRewardsEnable() {
last_trigger_.reset();
last_trigger_time_ = base::Time();
#endif // !BUILDFLAG(IS_ANDROID)
#else
mobile_trigger_timer_.Stop();
OnMobileTriggerTimer();
#endif
}
#if BUILDFLAG(IS_ANDROID)
void ConversionMonitor::ReportPeriodicMetrics() {
ReportMobilePanelTriggerCount();
daily_timer_.Start(FROM_HERE, base::Time::Now() + kReportInterval,
base::BindOnce(&ConversionMonitor::ReportPeriodicMetrics,
base::Unretained(this)));
}
void ConversionMonitor::OnMobileTriggerTimer() {
UMA_HISTOGRAM_BOOLEAN(kMobileConversionHistogramName,
prefs_->GetBoolean(prefs::kEnabled));
}
void ConversionMonitor::ReportMobilePanelTriggerCount() {
uint64_t total = mobile_panel_trigger_count_.GetWeeklySum();
if (total == 0) {
return;
}
p3a_utils::RecordToHistogramBucket(kMobilePanelCountHistogramName,
kMobilePanelCountBuckets, total);
}
#endif
} // namespace p3a
} // namespace brave_rewards
+18 -1
View File
@@ -6,7 +6,11 @@
#ifndef BRAVE_COMPONENTS_BRAVE_REWARDS_BROWSER_REWARDS_P3A_H_
#define BRAVE_COMPONENTS_BRAVE_REWARDS_BROWSER_REWARDS_P3A_H_
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "base/timer/wall_clock_timer.h"
#include "brave/components/time_period_storage/weekly_storage.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
class PrefService;
@@ -19,6 +23,8 @@ extern const char kToolbarButtonTriggerHistogramName[];
extern const char kTipsSentHistogramName[];
extern const char kAutoContributionsStateHistogramName[];
extern const char kAdTypesEnabledHistogramName[];
extern const char kMobileConversionHistogramName[];
extern const char kMobilePanelCountHistogramName[];
enum class AutoContributionsState {
kNoWallet,
@@ -52,7 +58,7 @@ void RecordAdTypesEnabled(PrefService* prefs);
class ConversionMonitor {
public:
ConversionMonitor();
explicit ConversionMonitor(PrefService* prefs);
~ConversionMonitor();
ConversionMonitor(const ConversionMonitor&) = delete;
@@ -67,8 +73,19 @@ class ConversionMonitor {
void RecordRewardsEnable();
private:
#if BUILDFLAG(IS_ANDROID)
void ReportPeriodicMetrics();
void OnMobileTriggerTimer();
void ReportMobilePanelTriggerCount();
raw_ptr<PrefService> prefs_;
WeeklyStorage mobile_panel_trigger_count_;
base::OneShotTimer mobile_trigger_timer_;
base::WallClockTimer daily_timer_;
#else
absl::optional<PanelTrigger> last_trigger_;
base::Time last_trigger_time_;
#endif
};
} // namespace p3a
@@ -292,7 +292,8 @@ RewardsServiceImpl::RewardsServiceImpl(Profile* profile)
new DiagnosticLog(profile_->GetPath().Append(kDiagnosticLogPath),
kDiagnosticLogMaxFileSize,
kDiagnosticLogKeepNumLines)),
notification_service_(new RewardsNotificationServiceImpl(profile)) {
notification_service_(new RewardsNotificationServiceImpl(profile)),
conversion_monitor_(profile->GetPrefs()) {
// Set up the rewards data source
content::URLDataSource::Add(profile_,
std::make_unique<BraveRewardsSource>(profile_));
@@ -24,6 +24,7 @@
#include "brave/components/brave_rewards/common/pref_names.h"
#include "brave/components/constants/brave_paths.h"
#include "brave/components/ntp_background_images/common/pref_names.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "components/network_session_configurator/common/network_switches.h"
@@ -185,7 +186,7 @@ IN_PROC_BROWSER_TEST_F(RewardsP3ABrowserTest, ToggleAdTypes) {
#if !BUILDFLAG(IS_ANDROID)
IN_PROC_BROWSER_TEST_F(RewardsP3ABrowserTest, Conversion) {
p3a::ConversionMonitor conversion_monitor;
p3a::ConversionMonitor conversion_monitor(g_browser_process->local_state());
histogram_tester_->ExpectTotalCount(p3a::kEnabledSourceHistogramName, 0);
@@ -38,6 +38,7 @@ const char kUpholdAnonAddress[] =
const char kBadgeText[] = "brave.rewards.badge_text";
const char kUseRewardsStagingServer[] = "brave.rewards.use_staging_server";
const char kExternalWalletType[] = "brave.rewards.external_wallet_type";
const char kP3APanelTriggerCount[] = "brave.rewards.p3a_panel_trigger_count";
const char kPromotionLastFetchStamp[] =
"brave.rewards.promotion_last_fetch_stamp";
const char kPromotionCorruptedMigrated[] =
@@ -35,6 +35,7 @@ extern const char kExternalWallets[]; // DEPRECATED
extern const char kBadgeText[];
extern const char kUseRewardsStagingServer[];
extern const char kExternalWalletType[];
extern const char kP3APanelTriggerCount[];
// Defined in core
extern const char kServerPublisherListStamp[];
@@ -26,6 +26,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
registry->RegisterStringPref(prefs::kDeclaredGeo, "");
registry->RegisterStringPref(prefs::kUserVersion, "");
registry->RegisterDictionaryPref(prefs::kExternalWallets);
registry->RegisterListPref(prefs::kP3APanelTriggerCount);
registry->RegisterUint64Pref(prefs::kServerPublisherListStamp, 0ull);
registry->RegisterStringPref(prefs::kUpholdAnonAddress, "");
registry->RegisterStringPref(prefs::kBadgeText, "1");
+4
View File
@@ -58,6 +58,8 @@ constexpr inline auto kCollectedTypicalHistograms =
"Brave.Rewards.AdTypesEnabled",
"Brave.Rewards.AutoContributionsState.3",
"Brave.Rewards.EnabledSource",
"Brave.Rewards.MobileConversion",
"Brave.Rewards.MobilePanelCount",
"Brave.Rewards.TipsState.2",
"Brave.Rewards.ToolbarButtonTrigger",
"Brave.Rewards.WalletBalance.3",
@@ -245,6 +247,8 @@ constexpr inline auto kEphemeralHistograms =
"Brave.PrivacyHub.Views",
"Brave.Rewards.EnabledInstallationTime",
"Brave.Rewards.EnabledSource",
"Brave.Rewards.MobileConversion",
"Brave.Rewards.MobilePanelCount",
"Brave.Rewards.TipsSent",
"Brave.Rewards.ToolbarButtonTrigger",
"Brave.Search.QueriesBeforeChurn",