Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Unified Diff: chrome/browser/engagement/site_engagement_service.cc

Issue 1373453002: Allow the site engagement service thresholds to be varied via field trial. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@time-on-site-uma
Patch Set: Reviewer nits Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/engagement/site_engagement_service.cc
diff --git a/chrome/browser/engagement/site_engagement_service.cc b/chrome/browser/engagement/site_engagement_service.cc
index 83617b36e15f379c5e499bf2d7c1cc8d22381374..9f74a9a99201a556d716b825dd82dad97b138733 100644
--- a/chrome/browser/engagement/site_engagement_service.cc
+++ b/chrome/browser/engagement/site_engagement_service.cc
@@ -9,6 +9,7 @@
#include <vector>
#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
#include "base/time/clock.h"
#include "base/time/default_clock.h"
#include "base/values.h"
@@ -18,11 +19,23 @@
#include "chrome/common/chrome_switches.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
+#include "components/variations/variations_associated_data.h"
#include "content/public/browser/browser_thread.h"
#include "url/gurl.h"
namespace {
+// Global bool to ensure we only update the parameters from variations once.
+bool g_updated_from_variations = false;
+
+// Keys used in the variations params.
+const char kEngagementParams[] = "SiteEngagement";
+const char kMaxPointsPerDayParam[] = "max_points_per_day";
+const char kNavigationPointsParam[] = "navigation_points";
+const char kUserInputPointsParam[] = "user_input_points";
+const char kDecayPeriodInDaysParam[] = "decay_period_in_days";
+const char kDecayPointsParam[] = "decay_points";
+
// Length of time between metrics logging.
const base::TimeDelta metrics_interval = base::TimeDelta::FromMinutes(60);
@@ -88,16 +101,55 @@ scoped_ptr<base::DictionaryValue> GetScoreDictForOrigin(
} // namespace
+const double SiteEngagementScore::kMaxPoints = 100;
+double SiteEngagementScore::g_max_points_per_day = 5;
+double SiteEngagementScore::g_navigation_points = 0.5;
+double SiteEngagementScore::g_user_input_points = 0.05;
+int SiteEngagementScore::g_decay_period_in_days = 7;
+double SiteEngagementScore::g_decay_points = 5;
+
const char* SiteEngagementScore::kRawScoreKey = "rawScore";
const char* SiteEngagementScore::kPointsAddedTodayKey = "pointsAddedToday";
const char* SiteEngagementScore::kLastEngagementTimeKey = "lastEngagementTime";
-const double SiteEngagementScore::kMaxPoints = 100;
-const double SiteEngagementScore::kMaxPointsPerDay = 5;
-const double SiteEngagementScore::kNavigationPoints = 0.5;
-const double SiteEngagementScore::kUserInputPoints = 0.05;
-const int SiteEngagementScore::kDecayPeriodInDays = 7;
-const double SiteEngagementScore::kDecayPoints = 5;
+void SiteEngagementScore::UpdateFromVariations() {
+ std::string max_points_per_day_param = variations::GetVariationParamValue(
+ kEngagementParams, kMaxPointsPerDayParam);
+ std::string navigation_points_param = variations::GetVariationParamValue(
+ kEngagementParams, kNavigationPointsParam);
+ std::string user_input_points_param = variations::GetVariationParamValue(
+ kEngagementParams, kUserInputPointsParam);
+ std::string decay_period_in_days_param = variations::GetVariationParamValue(
+ kEngagementParams, kDecayPeriodInDaysParam);
+ std::string decay_points_param = variations::GetVariationParamValue(
+ kEngagementParams, kDecayPointsParam);
+
+ if (!max_points_per_day_param.empty() && !navigation_points_param.empty() &&
+ !user_input_points_param.empty() && !decay_period_in_days_param.empty() &&
+ !decay_points_param.empty()) {
+ double max_points_per_day = 0;
+ double navigation_points = 0;
+ double user_input_points = 0;
+ int decay_period_in_days = 0;
+ double decay_points = 0;
+
+ if (base::StringToDouble(max_points_per_day_param, &max_points_per_day) &&
+ base::StringToDouble(navigation_points_param, &navigation_points) &&
+ base::StringToDouble(user_input_points_param, &user_input_points) &&
+ base::StringToInt(decay_period_in_days_param, &decay_period_in_days) &&
+ base::StringToDouble(decay_points_param, &decay_points) &&
+ max_points_per_day >= navigation_points &&
+ max_points_per_day >= user_input_points && navigation_points >= 0 &&
+ user_input_points >= 0 && decay_period_in_days > 0 &&
+ decay_points >= 0) {
+ g_max_points_per_day = max_points_per_day;
+ g_navigation_points = navigation_points;
+ g_user_input_points = user_input_points;
+ g_decay_period_in_days = decay_period_in_days;
+ g_decay_points = decay_points;
+ }
+ }
+}
SiteEngagementScore::SiteEngagementScore(
base::Clock* clock,
@@ -128,8 +180,8 @@ void SiteEngagementScore::AddPoints(double points) {
points_added_today_ = 0;
}
- double to_add =
- std::min(kMaxPoints - raw_score_, kMaxPointsPerDay - points_added_today_);
+ double to_add = std::min(kMaxPoints - raw_score_,
+ g_max_points_per_day - points_added_today_);
to_add = std::min(to_add, points);
points_added_today_ += to_add;
@@ -144,7 +196,7 @@ bool SiteEngagementScore::MaxPointsPerDayAdded() {
return false;
}
- return points_added_today_ == kMaxPointsPerDay;
+ return points_added_today_ == g_max_points_per_day;
}
bool SiteEngagementScore::UpdateScoreDict(base::DictionaryValue* score_dict) {
@@ -190,8 +242,8 @@ double SiteEngagementScore::DecayedScore() const {
if (days_since_engagement < 0)
return raw_score_;
- int periods = days_since_engagement / kDecayPeriodInDays;
- double decayed_score = raw_score_ - periods * kDecayPoints;
+ int periods = days_since_engagement / g_decay_period_in_days;
+ double decayed_score = raw_score_ - periods * g_decay_points;
return std::max(0.0, decayed_score);
}
@@ -213,6 +265,11 @@ SiteEngagementService::SiteEngagementService(Profile* profile)
content::BrowserThread::UI),
base::Bind(&SiteEngagementService::AfterStartupTask,
weak_factory_.GetWeakPtr()));
+
+ if (!g_updated_from_variations) {
+ SiteEngagementScore::UpdateFromVariations();
+ g_updated_from_variations = true;
+ }
}
SiteEngagementService::~SiteEngagementService() {
@@ -223,7 +280,7 @@ void SiteEngagementService::HandleNavigation(const GURL& url,
if (IsEngagementNavigation(transition)) {
SiteEngagementMetrics::RecordEngagement(
SiteEngagementMetrics::ENGAGEMENT_NAVIGATION);
- AddPoints(url, SiteEngagementScore::kNavigationPoints);
+ AddPoints(url, SiteEngagementScore::g_navigation_points);
RecordMetrics();
}
}
@@ -232,7 +289,7 @@ void SiteEngagementService::HandleUserInput(
const GURL& url,
SiteEngagementMetrics::EngagementType type) {
SiteEngagementMetrics::RecordEngagement(type);
- AddPoints(url, SiteEngagementScore::kUserInputPoints);
+ AddPoints(url, SiteEngagementScore::g_user_input_points);
RecordMetrics();
}
« no previous file with comments | « chrome/browser/engagement/site_engagement_service.h ('k') | chrome/browser/engagement/site_engagement_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698