Index: chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
index a300d5b0f2921d6dd316954579df3e6fdf583691..34d3ccf43f61f7f24f0bd9559bb4694801d4f470 100644 |
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
@@ -134,6 +134,7 @@ void ResourcePrefetchPredictorTables::SortResources( |
std::vector<ResourceData>* resources) { |
std::sort(resources->begin(), resources->end(), |
[](const ResourceData& x, const ResourceData& y) { |
+ // Decreasing score ordering. |
return ComputeResourceScore(x) > ComputeResourceScore(y); |
}); |
} |
@@ -143,6 +144,7 @@ void ResourcePrefetchPredictorTables::SortRedirects( |
std::vector<RedirectStat>* redirects) { |
std::sort(redirects->begin(), redirects->end(), |
[](const RedirectStat& x, const RedirectStat& y) { |
+ // Decreasing score ordering. |
return ComputeRedirectScore(x) > ComputeRedirectScore(y); |
}); |
} |
@@ -478,21 +480,46 @@ bool ResourcePrefetchPredictorTables::StringsAreSmallerThanDBLimit( |
// static |
float ResourcePrefetchPredictorTables::ComputeResourceScore( |
const ResourceData& data) { |
- // The score is calculated so that when the rows are sorted, stylesheets, |
- // scripts and fonts appear first, sorted by position(ascending) and then the |
- // rest of the resources sorted by position (ascending). |
- static const int kMaxResourcesPerType = 100; |
+ // The ranking is done by considering, in this order: |
+ // 1. Resource Priority |
+ // 2. Request resource type |
+ // 3. Finally, the average position, giving a higher priotity to earlier |
+ // resources. |
+ |
+ int priority_multiplier; |
+ switch (data.priority()) { |
+ case ResourceData::REQUEST_PRIORITY_HIGHEST: |
+ priority_multiplier = 3; |
+ break; |
+ case ResourceData::REQUEST_PRIORITY_MEDIUM: |
+ priority_multiplier = 2; |
+ break; |
+ case ResourceData::REQUEST_PRIORITY_LOW: |
+ case ResourceData::REQUEST_PRIORITY_LOWEST: |
+ case ResourceData::REQUEST_PRIORITY_IDLE: |
+ default: |
+ priority_multiplier = 1; |
+ break; |
+ } |
+ |
+ int type_multiplier; |
switch (data.resource_type()) { |
case ResourceData::RESOURCE_TYPE_STYLESHEET: |
case ResourceData::RESOURCE_TYPE_SCRIPT: |
+ type_multiplier = 3; |
+ break; |
case ResourceData::RESOURCE_TYPE_FONT_RESOURCE: |
- return (2 * kMaxResourcesPerType) - data.average_position(); |
- |
+ type_multiplier = 2; |
+ break; |
case ResourceData::RESOURCE_TYPE_IMAGE: |
default: |
- return kMaxResourcesPerType - data.average_position(); |
+ type_multiplier = 1; |
} |
- // TODO(lizeb): Take priority into account. |
+ |
+ constexpr int kMaxResourcesPerType = 100; |
+ return kMaxResourcesPerType * |
+ (priority_multiplier * 100 + type_multiplier * 10) - |
+ data.average_position(); |
} |
// static |