Index: components/omnibox/browser/omnibox_field_trial.cc |
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc |
index 75527959f1ab1eecb51c8ce7293ebc8eeed92dac..5c665852108c03deb77ced9d6b1282d83b759f36 100644 |
--- a/components/omnibox/browser/omnibox_field_trial.cc |
+++ b/components/omnibox/browser/omnibox_field_trial.cc |
@@ -45,10 +45,30 @@ std::string DynamicFieldTrialName(int id) { |
return base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, id); |
} |
+void InitializeBucketsFromString(const std::string& bucket_string, |
+ ScoreBuckets* score_buckets) { |
+ // Clear the buckets. |
+ score_buckets->buckets().clear(); |
+ base::StringPairs kv_pairs; |
+ if (base::SplitStringIntoKeyValuePairs(bucket_string, ':', ',', &kv_pairs)) { |
+ for (base::StringPairs::const_iterator it = kv_pairs.begin(); |
+ it != kv_pairs.end(); ++it) { |
+ ScoreBuckets::CountMaxRelevance bucket; |
+ base::StringToDouble(it->first, &bucket.first); |
+ base::StringToInt(it->second, &bucket.second); |
+ score_buckets->buckets().push_back(bucket); |
+ } |
+ std::sort(score_buckets->buckets().begin(), |
+ score_buckets->buckets().end(), |
+ std::greater<ScoreBuckets::CountMaxRelevance>()); |
+ } |
+} |
+ |
void InitializeScoreBuckets(const VariationParams& params, |
const char* relevance_cap_param, |
const char* half_life_param, |
const char* score_buckets_param, |
+ const char* use_decay_factor_param, |
ScoreBuckets* score_buckets) { |
VariationParams::const_iterator it = params.find(relevance_cap_param); |
if (it != params.end()) { |
@@ -57,6 +77,13 @@ void InitializeScoreBuckets(const VariationParams& params, |
score_buckets->set_relevance_cap(relevance_cap); |
} |
+ it = params.find(use_decay_factor_param); |
+ if (it != params.end()) { |
+ int use_decay_factor; |
+ if (base::StringToInt(it->second, &use_decay_factor)) |
+ score_buckets->set_use_decay_factor(use_decay_factor != 0); |
+ } |
+ |
it = params.find(half_life_param); |
if (it != params.end()) { |
int half_life_days; |
@@ -67,20 +94,8 @@ void InitializeScoreBuckets(const VariationParams& params, |
it = params.find(score_buckets_param); |
if (it != params.end()) { |
// The value of the score bucket is a comma-separated list of |
- // {DecayedCount + ":" + MaxRelevance}. |
- base::StringPairs kv_pairs; |
- if (base::SplitStringIntoKeyValuePairs(it->second, ':', ',', &kv_pairs)) { |
- for (base::StringPairs::const_iterator it = kv_pairs.begin(); |
- it != kv_pairs.end(); ++it) { |
- ScoreBuckets::CountMaxRelevance bucket; |
- base::StringToDouble(it->first, &bucket.first); |
- base::StringToInt(it->second, &bucket.second); |
- score_buckets->buckets().push_back(bucket); |
- } |
- std::sort(score_buckets->buckets().begin(), |
- score_buckets->buckets().end(), |
- std::greater<ScoreBuckets::CountMaxRelevance>()); |
- } |
+ // {DecayedCount/DecayedFactor + ":" + MaxRelevance}. |
+ InitializeBucketsFromString(it->second, score_buckets); |
} |
} |
@@ -262,6 +277,31 @@ void OmniboxFieldTrial::GetDemotionsByType( |
} |
} |
+void OmniboxFieldTrial::GetDefaultHUPScoringParams( |
+ HUPScoringParams* scoring_params) { |
+ ScoreBuckets* type_score_buckets = &scoring_params->typed_count_buckets; |
+ type_score_buckets->set_half_life_days(30); |
+ type_score_buckets->set_use_decay_factor(false); |
+ // Default typed count buckets based on decayed typed count. The |
+ // values here are based on the results of field trials to determine what |
+ // maximized overall result quality. |
+ const std::string& typed_count_score_buckets_str = |
+ "1.0:1413,0.97:1390,0.93:1360,0.85:1340,0.72:1320,0.50:1250,0.0:1203"; |
+ InitializeBucketsFromString(typed_count_score_buckets_str, |
+ type_score_buckets); |
+ |
+ ScoreBuckets* visit_score_buckets = &scoring_params->visited_count_buckets; |
+ visit_score_buckets->set_half_life_days(30); |
+ visit_score_buckets->set_use_decay_factor(false); |
+ // Buckets based on visit count. Like the typed count buckets above, the |
+ // values here were chosen based on field trials. Note that when a URL hasn't |
+ // been visited in the last 30 days, we clamp its score to 100, which |
+ // basically demotes it below any other results in the dropdown. |
+ const std::string& visit_count_score_buckets_str = "4.0:790,0.5:590,0.0:100"; |
+ InitializeBucketsFromString(visit_count_score_buckets_str, |
+ visit_score_buckets); |
+} |
+ |
void OmniboxFieldTrial::GetExperimentalHUPScoringParams( |
HUPScoringParams* scoring_params) { |
scoring_params->experimental_scoring_enabled = false; |
@@ -281,10 +321,12 @@ void OmniboxFieldTrial::GetExperimentalHUPScoringParams( |
InitializeScoreBuckets(params, kHUPNewScoringTypedCountRelevanceCapParam, |
kHUPNewScoringTypedCountHalfLifeTimeParam, |
kHUPNewScoringTypedCountScoreBucketsParam, |
+ kHUPNewScoringTypedCountUseDecayFactorParam, |
&scoring_params->typed_count_buckets); |
InitializeScoreBuckets(params, kHUPNewScoringVisitedCountRelevanceCapParam, |
kHUPNewScoringVisitedCountHalfLifeTimeParam, |
kHUPNewScoringVisitedCountScoreBucketsParam, |
+ kHUPNewScoringVisitedCountUseDecayFactorParam, |
&scoring_params->visited_count_buckets); |
} |
@@ -435,12 +477,16 @@ const char OmniboxFieldTrial::kHUPNewScoringTypedCountHalfLifeTimeParam[] = |
"TypedCountHalfLifeTime"; |
const char OmniboxFieldTrial::kHUPNewScoringTypedCountScoreBucketsParam[] = |
"TypedCountScoreBuckets"; |
+const char OmniboxFieldTrial::kHUPNewScoringTypedCountUseDecayFactorParam[] = |
+ "TypedCountUseDecayFactor"; |
const char OmniboxFieldTrial::kHUPNewScoringVisitedCountRelevanceCapParam[] = |
"VisitedCountRelevanceCap"; |
const char OmniboxFieldTrial::kHUPNewScoringVisitedCountHalfLifeTimeParam[] = |
"VisitedCountHalfLifeTime"; |
const char OmniboxFieldTrial::kHUPNewScoringVisitedCountScoreBucketsParam[] = |
"VisitedCountScoreBuckets"; |
+const char OmniboxFieldTrial::kHUPNewScoringVisitedCountUseDecayFactorParam[] = |
+ "VisitedCountUseDecayFactor"; |
const char OmniboxFieldTrial::kHQPExperimentalScoringEnabledParam[] = |
"HQPExperimentalScoringEnabled"; |