| 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 "chrome/browser/predictors/autocomplete_action_predictor.h" | 5 #include "chrome/browser/predictors/autocomplete_action_predictor.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 return false; | 68 return false; |
| 69 } | 69 } |
| 70 } | 70 } |
| 71 | 71 |
| 72 } // namespace | 72 } // namespace |
| 73 | 73 |
| 74 namespace predictors { | 74 namespace predictors { |
| 75 | 75 |
| 76 const int AutocompleteActionPredictor::kMaximumDaysToKeepEntry = 14; | 76 const int AutocompleteActionPredictor::kMaximumDaysToKeepEntry = 14; |
| 77 | 77 |
| 78 double AutocompleteActionPredictor::hit_weight_ = 1.0; | |
| 79 | |
| 80 AutocompleteActionPredictor::AutocompleteActionPredictor(Profile* profile) | 78 AutocompleteActionPredictor::AutocompleteActionPredictor(Profile* profile) |
| 81 : profile_(profile), | 79 : profile_(profile), |
| 82 table_(PredictorDatabaseFactory::GetForProfile( | 80 table_(PredictorDatabaseFactory::GetForProfile( |
| 83 profile)->autocomplete_table()), | 81 profile)->autocomplete_table()), |
| 84 initialized_(false) { | 82 initialized_(false) { |
| 85 // Request the in-memory database from the history to force it to load so it's | 83 // Request the in-memory database from the history to force it to load so it's |
| 86 // available as soon as possible. | 84 // available as soon as possible. |
| 87 HistoryService* history_service = | 85 HistoryService* history_service = |
| 88 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); | 86 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); |
| 89 if (history_service) | 87 if (history_service) |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 } | 233 } |
| 236 | 234 |
| 237 void AutocompleteActionPredictor::OnOmniboxOpenedUrl( | 235 void AutocompleteActionPredictor::OnOmniboxOpenedUrl( |
| 238 const AutocompleteLog& log) { | 236 const AutocompleteLog& log) { |
| 239 if (log.text.length() < kMinimumUserTextLength) | 237 if (log.text.length() < kMinimumUserTextLength) |
| 240 return; | 238 return; |
| 241 | 239 |
| 242 const AutocompleteMatch& match = log.result.match_at(log.selected_index); | 240 const AutocompleteMatch& match = log.result.match_at(log.selected_index); |
| 243 | 241 |
| 244 UMA_HISTOGRAM_BOOLEAN( | 242 UMA_HISTOGRAM_BOOLEAN( |
| 245 StringPrintf("Prerender.OmniboxNavigationsCouldPrerender_%.1f%s", | 243 StringPrintf("Prerender.OmniboxNavigationsCouldPrerender_%s", |
| 246 get_hit_weight(), | |
| 247 prerender::PrerenderManager::GetModeString()).c_str(), | 244 prerender::PrerenderManager::GetModeString()).c_str(), |
| 248 prerender::IsOmniboxEnabled(profile_)); | 245 prerender::IsOmniboxEnabled(profile_)); |
| 249 | 246 |
| 250 const GURL& opened_url = match.destination_url; | 247 const GURL& opened_url = match.destination_url; |
| 251 | 248 |
| 252 // If the Omnibox triggered a prerender but the URL doesn't match the one the | 249 // If the Omnibox triggered a prerender but the URL doesn't match the one the |
| 253 // user is navigating to, cancel the prerender. | 250 // user is navigating to, cancel the prerender. |
| 254 prerender::PrerenderManager* prerender_manager = | 251 prerender::PrerenderManager* prerender_manager = |
| 255 prerender::PrerenderManagerFactory::GetForProfile(profile_); | 252 prerender::PrerenderManagerFactory::GetForProfile(profile_); |
| 256 // |prerender_manager| can be NULL in incognito mode or if prerendering is | 253 // |prerender_manager| can be NULL in incognito mode or if prerendering is |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 *is_in_db = true; | 414 *is_in_db = true; |
| 418 return CalculateConfidenceForDbEntry(iter); | 415 return CalculateConfidenceForDbEntry(iter); |
| 419 } | 416 } |
| 420 | 417 |
| 421 double AutocompleteActionPredictor::CalculateConfidenceForDbEntry( | 418 double AutocompleteActionPredictor::CalculateConfidenceForDbEntry( |
| 422 DBCacheMap::const_iterator iter) const { | 419 DBCacheMap::const_iterator iter) const { |
| 423 const DBCacheValue& value = iter->second; | 420 const DBCacheValue& value = iter->second; |
| 424 if (value.number_of_hits < kMinimumNumberOfHits) | 421 if (value.number_of_hits < kMinimumNumberOfHits) |
| 425 return 0.0; | 422 return 0.0; |
| 426 | 423 |
| 427 const double number_of_hits = value.number_of_hits * hit_weight_; | 424 const double number_of_hits = static_cast<double>(value.number_of_hits); |
| 428 return number_of_hits / (number_of_hits + value.number_of_misses); | 425 return number_of_hits / (number_of_hits + value.number_of_misses); |
| 429 } | 426 } |
| 430 | 427 |
| 431 void AutocompleteActionPredictor::AddAndUpdateRows( | 428 void AutocompleteActionPredictor::AddAndUpdateRows( |
| 432 const AutocompleteActionPredictorTable::Rows& rows_to_add, | 429 const AutocompleteActionPredictorTable::Rows& rows_to_add, |
| 433 const AutocompleteActionPredictorTable::Rows& rows_to_update) { | 430 const AutocompleteActionPredictorTable::Rows& rows_to_update) { |
| 434 if (!initialized_) | 431 if (!initialized_) |
| 435 return; | 432 return; |
| 436 | 433 |
| 437 for (AutocompleteActionPredictorTable::Rows::const_iterator it = | 434 for (AutocompleteActionPredictorTable::Rows::const_iterator it = |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 DATABASE_ACTION_DELETE_SOME, DATABASE_ACTION_COUNT); | 504 DATABASE_ACTION_DELETE_SOME, DATABASE_ACTION_COUNT); |
| 508 } | 505 } |
| 509 | 506 |
| 510 AutocompleteActionPredictor::TransitionalMatch::TransitionalMatch() { | 507 AutocompleteActionPredictor::TransitionalMatch::TransitionalMatch() { |
| 511 } | 508 } |
| 512 | 509 |
| 513 AutocompleteActionPredictor::TransitionalMatch::~TransitionalMatch() { | 510 AutocompleteActionPredictor::TransitionalMatch::~TransitionalMatch() { |
| 514 } | 511 } |
| 515 | 512 |
| 516 } // namespace predictors | 513 } // namespace predictors |
| OLD | NEW |