Chromium Code Reviews| Index: chrome/browser/predictors/resource_prefetch_predictor.cc |
| diff --git a/chrome/browser/predictors/resource_prefetch_predictor.cc b/chrome/browser/predictors/resource_prefetch_predictor.cc |
| index 58d01b5df36a23eabb6ebf86be8c50d4a700047b..ca2bd630fa772a8cdfc8a568e6d69ecc05cd0f35 100644 |
| --- a/chrome/browser/predictors/resource_prefetch_predictor.cc |
| +++ b/chrome/browser/predictors/resource_prefetch_predictor.cc |
| @@ -978,6 +978,8 @@ bool ResourcePrefetchPredictor::PopulateFromManifest( |
| base::Optional<std::vector<bool>> not_no_store = precache::GetResourceBitset( |
| manifest, internal::kNoStoreRemovedExperiment); |
| + std::vector<const precache::PrecacheResource*> filtered_resources; |
| + |
| bool has_prefetchable_resource = false; |
| for (int i = 0; i < manifest.resource_size(); ++i) { |
| const precache::PrecacheResource& resource = manifest.resource(i); |
| @@ -987,10 +989,24 @@ bool ResourcePrefetchPredictor::PopulateFromManifest( |
| (!not_no_store.has_value() || not_no_store.value()[i])) { |
| has_prefetchable_resource = true; |
| if (urls) |
| - urls->emplace_back(resource.url()); |
| + filtered_resources.push_back(&resource); |
| } |
| } |
| + if (urls) { |
| + std::sort( |
| + filtered_resources.begin(), filtered_resources.end(), |
| + [](const precache::PrecacheResource* x, |
| + const precache::PrecacheResource* y) { |
| + return ResourcePrefetchPredictorTables::ComputePrecacheResourceScore( |
|
Benoit L
2017/04/25 08:59:21
nit: use a local "using" to make this a bit easier
alexilin
2017/04/25 13:04:25
C++ doesn't have using declaration for static clas
Benoit L
2017/04/25 15:12:39
Ah, too bad. Let's keep it simple then.
alexilin
2017/04/25 17:37:05
Acknowledged.
|
| + *x) > |
| + ResourcePrefetchPredictorTables::ComputePrecacheResourceScore( |
| + *y); |
| + }); |
| + for (auto* resource : filtered_resources) |
| + urls->emplace_back(resource->url()); |
| + } |
| + |
| return has_prefetchable_resource; |
| } |
| @@ -1722,18 +1738,18 @@ void ResourcePrefetchPredictor::OnManifestFetched( |
| if (cache_entry == manifest_table_cache_->end()) { |
| if (manifest_table_cache_->size() >= config_.max_hosts_to_track) |
| RemoveOldestEntryInManifestDataMap(manifest_table_cache_.get()); |
| - cache_entry = |
| - manifest_table_cache_->insert(std::make_pair(host, manifest)).first; |
| + cache_entry = manifest_table_cache_->insert({host, manifest}).first; |
| } else { |
| cache_entry->second = manifest; |
| } |
| - precache::RemoveUnknownFields(&cache_entry->second); |
| + auto& data = cache_entry->second; |
| + precache::RemoveUnknownFields(&data); |
| BrowserThread::PostTask( |
| BrowserThread::DB, FROM_HERE, |
| base::BindOnce(&ResourcePrefetchPredictorTables::UpdateManifestData, |
| - tables_, host, cache_entry->second)); |
| + tables_, host, data)); |
| } |
| void ResourcePrefetchPredictor::UpdatePrefetchDataByManifest( |