OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |