Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/omnibox/browser/history_url_provider.h" | 5 #include "components/omnibox/browser/history_url_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 } | 107 } |
| 108 | 108 |
| 109 // Calculates a new relevance score applying half-life time decaying to |count| | 109 // Calculates a new relevance score applying half-life time decaying to |count| |
| 110 // using |time_since_last_visit| and |score_buckets|. This function will never | 110 // using |time_since_last_visit| and |score_buckets|. This function will never |
| 111 // return a score higher than |undecayed_relevance|; in other words, it can only | 111 // return a score higher than |undecayed_relevance|; in other words, it can only |
| 112 // demote the old score. | 112 // demote the old score. |
| 113 double CalculateRelevanceUsingScoreBuckets( | 113 double CalculateRelevanceUsingScoreBuckets( |
| 114 const HUPScoringParams::ScoreBuckets& score_buckets, | 114 const HUPScoringParams::ScoreBuckets& score_buckets, |
| 115 const base::TimeDelta& time_since_last_visit, | 115 const base::TimeDelta& time_since_last_visit, |
| 116 int undecayed_relevance, | 116 int undecayed_relevance, |
| 117 int count) { | 117 int undecayed_count) { |
| 118 // Back off if above relevance cap. | 118 // Back off if above relevance cap. |
| 119 if ((score_buckets.relevance_cap() != -1) && | 119 if ((score_buckets.relevance_cap() != -1) && |
| 120 (undecayed_relevance >= score_buckets.relevance_cap())) | 120 (undecayed_relevance >= score_buckets.relevance_cap())) |
| 121 return undecayed_relevance; | 121 return undecayed_relevance; |
| 122 | 122 |
| 123 // Time based decay using half-life time. | 123 // Time based decay using half-life time. |
| 124 double decayed_count = count; | 124 double decayed_count = undecayed_count; |
| 125 double decay_factor = score_buckets.HalfLifeTimeDecay(time_since_last_visit); | |
| 125 if (decayed_count > 0) | 126 if (decayed_count > 0) |
| 126 decayed_count *= score_buckets.HalfLifeTimeDecay(time_since_last_visit); | 127 decayed_count *= decay_factor; |
| 127 | 128 |
| 128 // Find a threshold where decayed_count >= bucket. | 129 // Find a threshold where decayed_count >= bucket. If buckets are based on |
| 130 // decay factor, then use it correspondingly. | |
|
Peter Kasting
2015/08/27 00:50:44
Nit: After updating the comments in the .h file (s
Ashok vardhan
2015/08/27 19:09:27
Done.
| |
| 129 const HUPScoringParams::ScoreBuckets::CountMaxRelevance* score_bucket = NULL; | 131 const HUPScoringParams::ScoreBuckets::CountMaxRelevance* score_bucket = NULL; |
| 132 const double factor = (score_buckets.use_decay_factor() ? decay_factor : | |
| 133 decayed_count); | |
| 130 for (size_t i = 0; i < score_buckets.buckets().size(); ++i) { | 134 for (size_t i = 0; i < score_buckets.buckets().size(); ++i) { |
| 131 score_bucket = &score_buckets.buckets()[i]; | 135 score_bucket = &score_buckets.buckets()[i]; |
| 132 if (decayed_count >= score_bucket->first) | 136 if (factor >= score_bucket->first) |
| 133 break; // Buckets are in descending order, so we can ignore the rest. | 137 break; |
| 134 } | 138 } |
| 135 | 139 |
| 136 return (score_bucket && (undecayed_relevance > score_bucket->second)) ? | 140 return (score_bucket && (undecayed_relevance > score_bucket->second)) ? |
| 137 score_bucket->second : undecayed_relevance; | 141 score_bucket->second : undecayed_relevance; |
| 138 } | 142 } |
| 139 | 143 |
| 140 // Returns a new relevance score for the given |match| based on the | 144 // Returns a new relevance score for the given |match| based on the |
| 141 // |old_relevance| score and |scoring_params|. The new relevance score is | 145 // |old_relevance| score and |scoring_params|. The new relevance score is |
| 142 // guaranteed to be less than or equal to |old_relevance|. In other words, this | 146 // guaranteed to be less than or equal to |old_relevance|. In other words, this |
| 143 // function can only demote a score, never boost it. Returns |old_relevance| if | 147 // function can only demote a score, never boost it. Returns |old_relevance| if |
| 144 // experimental scoring is disabled. | 148 // experimental scoring is disabled. |
| 145 int CalculateRelevanceScoreUsingScoringParams( | 149 int CalculateRelevanceScoreUsingScoringParams( |
| 146 const history::HistoryMatch& match, | 150 const history::HistoryMatch& match, |
| 147 int old_relevance, | 151 int old_relevance, |
| 148 const HUPScoringParams& scoring_params) { | 152 const HUPScoringParams& scoring_params) { |
| 149 if (!scoring_params.experimental_scoring_enabled) | |
| 150 return old_relevance; | |
| 151 | |
| 152 const base::TimeDelta time_since_last_visit = | 153 const base::TimeDelta time_since_last_visit = |
| 153 base::Time::Now() - match.url_info.last_visit(); | 154 base::Time::Now() - match.url_info.last_visit(); |
| 154 | 155 |
| 155 int relevance = CalculateRelevanceUsingScoreBuckets( | 156 int relevance = CalculateRelevanceUsingScoreBuckets( |
| 156 scoring_params.typed_count_buckets, time_since_last_visit, old_relevance, | 157 scoring_params.typed_count_buckets, time_since_last_visit, old_relevance, |
| 157 match.url_info.typed_count()); | 158 match.url_info.typed_count()); |
| 158 | 159 |
| 159 // Additional demotion (on top of typed_count demotion) of URLs that were | 160 // Additional demotion (on top of typed_count demotion) of URLs that were |
| 160 // never typed. | 161 // never typed. |
| 161 if (match.url_info.typed_count() == 0) { | 162 if (match.url_info.typed_count() == 0) { |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 456 } | 457 } |
| 457 | 458 |
| 458 HistoryURLProviderParams::~HistoryURLProviderParams() { | 459 HistoryURLProviderParams::~HistoryURLProviderParams() { |
| 459 } | 460 } |
| 460 | 461 |
| 461 HistoryURLProvider::HistoryURLProvider(AutocompleteProviderClient* client, | 462 HistoryURLProvider::HistoryURLProvider(AutocompleteProviderClient* client, |
| 462 AutocompleteProviderListener* listener) | 463 AutocompleteProviderListener* listener) |
| 463 : HistoryProvider(AutocompleteProvider::TYPE_HISTORY_URL, client), | 464 : HistoryProvider(AutocompleteProvider::TYPE_HISTORY_URL, client), |
| 464 listener_(listener), | 465 listener_(listener), |
| 465 params_(NULL) { | 466 params_(NULL) { |
| 467 // Initialize the default HUP scoring params. | |
| 468 OmniboxFieldTrial::GetDefaultHUPScoringParams(&scoring_params_); | |
| 466 // Initialize HUP scoring params based on the current experiment. | 469 // Initialize HUP scoring params based on the current experiment. |
| 467 OmniboxFieldTrial::GetExperimentalHUPScoringParams(&scoring_params_); | 470 OmniboxFieldTrial::GetExperimentalHUPScoringParams(&scoring_params_); |
| 468 } | 471 } |
| 469 | 472 |
| 470 void HistoryURLProvider::Start(const AutocompleteInput& input, | 473 void HistoryURLProvider::Start(const AutocompleteInput& input, |
| 471 bool minimal_changes) { | 474 bool minimal_changes) { |
| 472 // NOTE: We could try hard to do less work in the |minimal_changes| case | 475 // NOTE: We could try hard to do less work in the |minimal_changes| case |
| 473 // here; some clever caching would let us reuse the raw matches from the | 476 // here; some clever caching would let us reuse the raw matches from the |
| 474 // history DB without re-querying. However, we'd still have to go back to | 477 // history DB without re-querying. However, we'd still have to go back to |
| 475 // the history thread to mark these up properly, and if pass 2 is currently | 478 // the history thread to mark these up properly, and if pass 2 is currently |
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1199 AutocompleteMatch::ClassifyLocationInString(base::string16::npos, 0, | 1202 AutocompleteMatch::ClassifyLocationInString(base::string16::npos, 0, |
| 1200 match.contents.length(), ACMatchClassification::URL, | 1203 match.contents.length(), ACMatchClassification::URL, |
| 1201 &match.contents_class); | 1204 &match.contents_class); |
| 1202 } | 1205 } |
| 1203 match.description = info.title(); | 1206 match.description = info.title(); |
| 1204 match.description_class = | 1207 match.description_class = |
| 1205 ClassifyDescription(params.input.text(), match.description); | 1208 ClassifyDescription(params.input.text(), match.description); |
| 1206 RecordAdditionalInfoFromUrlRow(info, &match); | 1209 RecordAdditionalInfoFromUrlRow(info, &match); |
| 1207 return match; | 1210 return match; |
| 1208 } | 1211 } |
| OLD | NEW |