Index: components/precache/core/precache_fetcher.cc |
diff --git a/components/precache/core/precache_fetcher.cc b/components/precache/core/precache_fetcher.cc |
index 1a372c8dd152cf6d6d3b0c00a6f017e468c928a0..fd3ea88c7c3a5046116a29a3b583be44fcb04fa8 100644 |
--- a/components/precache/core/precache_fetcher.cc |
+++ b/components/precache/core/precache_fetcher.cc |
@@ -28,7 +28,6 @@ |
#include "components/data_use_measurement/core/data_use_user_data.h" |
#include "components/precache/core/precache_database.h" |
#include "components/precache/core/precache_switches.h" |
-#include "components/precache/core/proto/precache.pb.h" |
#include "components/precache/core/proto/quota.pb.h" |
#include "components/precache/core/proto/unfinished_work.pb.h" |
#include "net/base/completion_callback.h" |
@@ -229,12 +228,31 @@ bool IsQuotaTimeExpired(const PrecacheQuota& quota, |
start_time + base::TimeDelta::FromDays(1) < time_now; |
} |
-double ResourceWeight(const PrecacheResource& resource, int64_t host_visits) { |
- return resource.weight_ratio() * host_visits; |
+// Models the expected number of requests for the resource. |
bengr
2017/01/12 18:48:01
Please describe the parameters here and at lines 2
twifkak
2017/01/12 20:53:39
Done.
|
+double NaiveResourceWeight(double resource_weight_ratio, int64_t host_visits) { |
+ return resource_weight_ratio * host_visits; |
+} |
+ |
+// Models the probability of at least one request for the resource. |
+double GeometricResourceWeight(double resource_weight_ratio, |
+ int64_t host_visits) { |
+ return 1 - pow(1 - resource_weight_ratio, host_visits); |
} |
} // namespace |
+double ResourceWeight( |
+ PrecacheConfigurationSettings::ResourceWeightFunction function, |
+ double resource_weight_ratio, |
+ int64_t host_visits) { |
+ switch (function) { |
+ case PrecacheConfigurationSettings::FUNCTION_NAIVE: |
+ return NaiveResourceWeight(resource_weight_ratio, host_visits); |
+ case PrecacheConfigurationSettings::FUNCTION_GEOMETRIC: |
+ return GeometricResourceWeight(resource_weight_ratio, host_visits); |
+ } |
+} |
+ |
PrecacheFetcher::Fetcher::Fetcher( |
net::URLRequestContextGetter* request_context, |
const GURL& url, |
@@ -717,7 +735,9 @@ void PrecacheFetcher::OnManifestFetchComplete(int64_t host_visits, |
manifest.resource(i).has_url()) { |
GURL url(manifest.resource(i).url()); |
if (url.is_valid()) { |
- double weight = ResourceWeight(manifest.resource(i), host_visits); |
+ double weight = ResourceWeight( |
+ unfinished_work_->config_settings().resource_weight_function(), |
+ manifest.resource(i).weight_ratio(), host_visits); |
if (weight >= unfinished_work_->config_settings().min_weight()) |
resources_to_rank_.emplace_back(url, source.referrer(), weight); |
} |