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

Side by Side Diff: chrome/browser/ui/app_list/search/mixer.cc

Issue 15875007: app_list: Search result launch history and boost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix win7_aura unit_test Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/ui/app_list/search/mixer.h" 5 #include "chrome/browser/ui/app_list/search/mixer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 Group(size_t max_results, double boost) 99 Group(size_t max_results, double boost)
100 : max_results_(max_results), 100 : max_results_(max_results),
101 boost_(boost) { 101 boost_(boost) {
102 } 102 }
103 ~Group() {} 103 ~Group() {}
104 104
105 void AddProvider(SearchProvider* provider) { 105 void AddProvider(SearchProvider* provider) {
106 providers_.push_back(provider); 106 providers_.push_back(provider);
107 } 107 }
108 108
109 void FetchResults() { 109 void FetchResults(const KnownResults& known_results) {
110 results_.clear(); 110 results_.clear();
111 111
112 for (Providers::const_iterator provider_it = providers_.begin(); 112 for (Providers::const_iterator provider_it = providers_.begin();
113 provider_it != providers_.end(); 113 provider_it != providers_.end();
114 ++provider_it) { 114 ++provider_it) {
115 for (SearchProvider::Results::const_iterator 115 for (SearchProvider::Results::const_iterator
116 result_it = (*provider_it)->results().begin(); 116 result_it = (*provider_it)->results().begin();
117 result_it != (*provider_it)->results().end(); 117 result_it != (*provider_it)->results().end();
118 ++result_it) { 118 ++result_it) {
119 DCHECK_GE((*result_it)->relevance(), 0.0); 119 DCHECK_GE((*result_it)->relevance(), 0.0);
120 DCHECK_LE((*result_it)->relevance(), 1.0); 120 DCHECK_LE((*result_it)->relevance(), 1.0);
121 DCHECK(!(*result_it)->id().empty()); 121 DCHECK(!(*result_it)->id().empty());
122 122
123 double boost = boost_;
124 KnownResults::const_iterator known_it =
125 known_results.find((*result_it)->id());
126 if (known_it != known_results.end()) {
127 switch (known_it->second) {
128 case PERFECT_PRIMARY:
129 boost = 4.0;
130 break;
131 case PREFIX_PRIMARY:
132 boost = 3.75;
133 break;
134 case PERFECT_SECONDARY:
135 boost = 3.25;
136 break;
137 case PREFIX_SECONDARY:
138 boost = 3.0;
139 break;
140 case UNKNOWN_RESULT:
141 NOTREACHED() << "Unknown result in KnownResults?";
142 break;
143 }
144 }
145
123 results_.push_back( 146 results_.push_back(
124 SortData(*result_it, (*result_it)->relevance() + boost_)); 147 SortData(*result_it, (*result_it)->relevance() + boost));
125 } 148 }
126 } 149 }
127 150
128 std::sort(results_.begin(), results_.end()); 151 std::sort(results_.begin(), results_.end());
129 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_) 152 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_)
130 results_.resize(max_results_); 153 results_.resize(max_results_);
131 } 154 }
132 155
133 const SortedResults& results() const { return results_; } 156 const SortedResults& results() const { return results_; }
134 157
(...skipping 16 matching lines...) Expand all
151 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); 174 groups_.push_back(new Group(kMaxMainGroupResults, 2.0));
152 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); 175 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0));
153 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); 176 groups_.push_back(new Group(kMaxWebstoreResults, 0.0));
154 } 177 }
155 178
156 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { 179 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) {
157 size_t group_index = static_cast<size_t>(group); 180 size_t group_index = static_cast<size_t>(group);
158 groups_[group_index]->AddProvider(provider); 181 groups_[group_index]->AddProvider(provider);
159 } 182 }
160 183
161 void Mixer::MixAndPublish() { 184 void Mixer::MixAndPublish(const KnownResults& known_results) {
162 FetchResults(); 185 FetchResults(known_results);
163 186
164 SortedResults results; 187 SortedResults results;
165 results.reserve(kMaxResults); 188 results.reserve(kMaxResults);
166 189
167 // Adds main group and web store results first. 190 // Adds main group and web store results first.
168 results.insert(results.end(), 191 results.insert(results.end(),
169 groups_[MAIN_GROUP]->results().begin(), 192 groups_[MAIN_GROUP]->results().begin(),
170 groups_[MAIN_GROUP]->results().end()); 193 groups_[MAIN_GROUP]->results().end());
171 results.insert(results.end(), 194 results.insert(results.end(),
172 groups_[WEBSTORE_GROUP]->results().begin(), 195 groups_[WEBSTORE_GROUP]->results().begin(),
(...skipping 17 matching lines...) Expand all
190 groups_[OMNIBOX_GROUP]->results().begin() + remaining_slots); 213 groups_[OMNIBOX_GROUP]->results().begin() + remaining_slots);
191 214
192 std::sort(results.begin(), results.end()); 215 std::sort(results.begin(), results.end());
193 RemoveDuplicates(&results); 216 RemoveDuplicates(&results);
194 if (results.size() > kMaxResults) 217 if (results.size() > kMaxResults)
195 results.resize(kMaxResults); 218 results.resize(kMaxResults);
196 219
197 Publish(results, ui_results_); 220 Publish(results, ui_results_);
198 } 221 }
199 222
200 void Mixer::FetchResults() { 223 void Mixer::FetchResults(const KnownResults& known_results) {
201 for (Groups::iterator group_it = groups_.begin(); 224 for (Groups::iterator group_it = groups_.begin();
202 group_it != groups_.end(); 225 group_it != groups_.end();
203 ++group_it) { 226 ++group_it) {
204 (*group_it)->FetchResults(); 227 (*group_it)->FetchResults(known_results);
205 } 228 }
206 } 229 }
207 230
208 } // namespace app_list 231 } // namespace app_list
OLDNEW
« no previous file with comments | « chrome/browser/ui/app_list/search/mixer.h ('k') | chrome/browser/ui/app_list/search/mixer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698