Add Rewards conversion P3A metrics for Android only
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user