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

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

Issue 796293002: App list voice searches now prioritize exact-match web results. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed MixerTest and add MixerTest.VoiceQuery. Created 6 years 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
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 "ui/app_list/search/mixer.h" 5 #include "ui/app_list/search/mixer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 // Used to group relevant providers together fox mixing their results. 50 // Used to group relevant providers together fox mixing their results.
51 class Mixer::Group { 51 class Mixer::Group {
52 public: 52 public:
53 Group(size_t max_results, double boost) 53 Group(size_t max_results, double boost)
54 : max_results_(max_results), boost_(boost) {} 54 : max_results_(max_results), boost_(boost) {}
55 ~Group() {} 55 ~Group() {}
56 56
57 void AddProvider(SearchProvider* provider) { providers_.push_back(provider); } 57 void AddProvider(SearchProvider* provider) { providers_.push_back(provider); }
58 58
59 void FetchResults(const KnownResults& known_results) { 59 void FetchResults(bool is_voice_query, const KnownResults& known_results) {
60 results_.clear(); 60 results_.clear();
61 61
62 for (Providers::const_iterator provider_it = providers_.begin(); 62 for (Providers::const_iterator provider_it = providers_.begin();
63 provider_it != providers_.end(); 63 provider_it != providers_.end();
64 ++provider_it) { 64 ++provider_it) {
65 for (SearchProvider::Results::const_iterator result_it = 65 for (SearchProvider::Results::const_iterator result_it =
66 (*provider_it)->results().begin(); 66 (*provider_it)->results().begin();
67 result_it != (*provider_it)->results().end(); 67 result_it != (*provider_it)->results().end();
68 ++result_it) { 68 ++result_it) {
69 DCHECK_GE((*result_it)->relevance(), 0.0); 69 DCHECK_GE((*result_it)->relevance(), 0.0);
(...skipping 16 matching lines...) Expand all
86 break; 86 break;
87 case PREFIX_SECONDARY: 87 case PREFIX_SECONDARY:
88 boost = 3.0; 88 boost = 3.0;
89 break; 89 break;
90 case UNKNOWN_RESULT: 90 case UNKNOWN_RESULT:
91 NOTREACHED() << "Unknown result in KnownResults?"; 91 NOTREACHED() << "Unknown result in KnownResults?";
92 break; 92 break;
93 } 93 }
94 } 94 }
95 95
96 // If this is a voice query, voice results receive a massive boost.
97 if (is_voice_query && (*result_it)->voice_result())
98 boost += 4.0;
99
96 results_.push_back( 100 results_.push_back(
97 SortData(*result_it, (*result_it)->relevance() + boost)); 101 SortData(*result_it, (*result_it)->relevance() + boost));
98 } 102 }
99 } 103 }
100 104
101 std::sort(results_.begin(), results_.end()); 105 std::sort(results_.begin(), results_.end());
102 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_) 106 if (max_results_ != kNoMaxResultsLimit && results_.size() > max_results_)
103 results_.resize(max_results_); 107 results_.resize(max_results_);
104 } 108 }
105 109
(...skipping 20 matching lines...) Expand all
126 groups_[MAIN_GROUP].reset(new Group(kMaxMainGroupResults, 3.0)); 130 groups_[MAIN_GROUP].reset(new Group(kMaxMainGroupResults, 3.0));
127 groups_[OMNIBOX_GROUP].reset(new Group(kNoMaxResultsLimit, 2.0)); 131 groups_[OMNIBOX_GROUP].reset(new Group(kNoMaxResultsLimit, 2.0));
128 groups_[WEBSTORE_GROUP].reset(new Group(kMaxWebstoreResults, 1.0)); 132 groups_[WEBSTORE_GROUP].reset(new Group(kMaxWebstoreResults, 1.0));
129 groups_[PEOPLE_GROUP].reset(new Group(kMaxPeopleResults, 0.0)); 133 groups_[PEOPLE_GROUP].reset(new Group(kMaxPeopleResults, 0.0));
130 } 134 }
131 135
132 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { 136 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) {
133 groups_[group]->AddProvider(provider); 137 groups_[group]->AddProvider(provider);
134 } 138 }
135 139
136 void Mixer::MixAndPublish(const KnownResults& known_results) { 140 void Mixer::MixAndPublish(bool is_voice_query,
137 FetchResults(known_results); 141 const KnownResults& known_results) {
142 FetchResults(is_voice_query, known_results);
138 143
139 SortedResults results; 144 SortedResults results;
140 results.reserve(kMaxResults); 145 results.reserve(kMaxResults);
141 146
142 const Group& main_group = *groups_[MAIN_GROUP]; 147 const Group& main_group = *groups_[MAIN_GROUP];
143 const Group& omnibox_group = *groups_[OMNIBOX_GROUP]; 148 const Group& omnibox_group = *groups_[OMNIBOX_GROUP];
144 const Group& webstore_group = *groups_[WEBSTORE_GROUP]; 149 const Group& webstore_group = *groups_[WEBSTORE_GROUP];
145 const Group& people_group = *groups_[PEOPLE_GROUP]; 150 const Group& people_group = *groups_[PEOPLE_GROUP];
146 151
147 // Adds main group and web store results first. 152 // Adds main group and web store results first.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 if (id_set.find(id) != id_set.end()) 240 if (id_set.find(id) != id_set.end())
236 continue; 241 continue;
237 242
238 id_set.insert(id); 243 id_set.insert(id);
239 final.push_back(*it); 244 final.push_back(*it);
240 } 245 }
241 246
242 results->swap(final); 247 results->swap(final);
243 } 248 }
244 249
245 void Mixer::FetchResults(const KnownResults& known_results) { 250 void Mixer::FetchResults(bool is_voice_query,
251 const KnownResults& known_results) {
246 for (const auto& item : groups_) 252 for (const auto& item : groups_)
247 item.second->FetchResults(known_results); 253 item.second->FetchResults(is_voice_query, known_results);
248 } 254 }
249 255
250 } // namespace app_list 256 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698