Chromium Code Reviews| Index: chrome/browser/predictors/resource_prefetch_predictor.h |
| diff --git a/chrome/browser/predictors/resource_prefetch_predictor.h b/chrome/browser/predictors/resource_prefetch_predictor.h |
| index cec2207d48f5d4d8e62642162e41a75cbbbdb7e7..ad2a031e529e64fef62428ac86e227dc51191f1d 100644 |
| --- a/chrome/browser/predictors/resource_prefetch_predictor.h |
| +++ b/chrome/browser/predictors/resource_prefetch_predictor.h |
| @@ -104,6 +104,17 @@ class ResourcePrefetchPredictor |
| public base::SupportsWeakPtr<ResourcePrefetchPredictor>, |
| public precache::PrecacheManager::Delegate { |
| public: |
| + struct OriginRequestSummary { |
|
alexilin
2017/04/12 13:53:08
Oh, and a comment to this class would be nice.
|
| + OriginRequestSummary(); |
| + OriginRequestSummary(const OriginRequestSummary& other); |
| + ~OriginRequestSummary(); |
| + |
| + GURL origin; |
| + bool always_access_network; |
| + bool accessed_network; |
| + int first_occurrence; |
| + }; |
| + |
| // Stores the data that we need to get from the URLRequest. |
| struct URLRequestSummary { |
| URLRequestSummary(); |
| @@ -112,6 +123,7 @@ class ResourcePrefetchPredictor |
| NavigationID navigation_id; |
| GURL resource_url; |
| + GURL request_url; // URL after all redirects. |
|
alexilin
2017/04/12 13:44:05
I'd say it's last issued URL comparing that resour
|
| content::ResourceType resource_type; |
| net::RequestPriority priority; |
| @@ -122,6 +134,8 @@ class ResourcePrefetchPredictor |
| bool has_validators; |
| bool always_revalidate; |
| + bool is_no_store; |
| + bool network_accessed; |
| // Initializes a |URLRequestSummary| from a |URLRequest| response. |
| // Returns true for success. Note: NavigationID is NOT initialized |
| @@ -142,6 +156,9 @@ class ResourcePrefetchPredictor |
| // Stores all subresource requests within a single navigation, from initial |
| // main frame request to navigation completion. |
| std::vector<URLRequestSummary> subresource_requests; |
| + // Map of origin -> OriginRequestSummary. Only one instance of each origin |
| + // is kept per navigation, but the summary is updated several times. |
| + std::map<GURL, OriginRequestSummary> origins; |
| }; |
| // Stores a result of prediction. Essentially, |subresource_urls| is main |
| @@ -280,6 +297,7 @@ class ResourcePrefetchPredictor |
| typedef ResourcePrefetchPredictorTables::PrefetchDataMap PrefetchDataMap; |
| typedef ResourcePrefetchPredictorTables::RedirectDataMap RedirectDataMap; |
| typedef ResourcePrefetchPredictorTables::ManifestDataMap ManifestDataMap; |
| + typedef ResourcePrefetchPredictorTables::OriginDataMap OriginDataMap; |
| typedef std::map<NavigationID, std::unique_ptr<PageRequestSummary>> |
| NavigationMap; |
| @@ -296,7 +314,7 @@ class ResourcePrefetchPredictor |
| const std::string& mime_type); |
| // Returns true if the request (should have a response in it) is "no-store". |
| - static bool IsNoStore(const net::URLRequest* request); |
| + static bool IsNoStore(const net::URLRequest& request); |
| // Returns true iff |redirect_data_map| contains confident redirect endpoint |
| // for |entry_point| and assigns it to the |redirect_endpoint|. |
| @@ -315,6 +333,7 @@ class ResourcePrefetchPredictor |
| void OnMainFrameResponse(const URLRequestSummary& response); |
| void OnMainFrameRedirect(const URLRequestSummary& response); |
| void OnSubresourceResponse(const URLRequestSummary& response); |
| + void OnSubresourceRedirect(const URLRequestSummary& response); |
| // Called when onload completes for a navigation. We treat this point as the |
| // "completion" of the navigation. The resources requested by the page up to |
| @@ -341,7 +360,8 @@ class ResourcePrefetchPredictor |
| std::unique_ptr<PrefetchDataMap> host_data_map, |
| std::unique_ptr<RedirectDataMap> url_redirect_data_map, |
| std::unique_ptr<RedirectDataMap> host_redirect_data_map, |
| - std::unique_ptr<ManifestDataMap> manifest_data_map); |
| + std::unique_ptr<ManifestDataMap> manifest_data_map, |
| + std::unique_ptr<OriginDataMap> origin_data_map); |
| // Called during initialization when history is read and the predictor |
| // database has been read. |
| @@ -371,6 +391,7 @@ class ResourcePrefetchPredictor |
| RedirectDataMap* data_map); |
| void RemoveOldestEntryInManifestDataMap(ManifestDataMap* data_map); |
| + void RemoveOldestEntryInOriginDataMap(OriginDataMap* data_map); |
| // Merges resources in |new_resources| into the |data_map| and correspondingly |
| // updates the predictor database. Also calls LearnRedirect if relevant. |
| @@ -390,6 +411,11 @@ class ResourcePrefetchPredictor |
| size_t max_redirect_map_size, |
| RedirectDataMap* redirect_map); |
| + void LearnOrigins(const std::string& host, |
| + const std::map<GURL, OriginRequestSummary>& summaries, |
| + size_t max_data_map_size, |
| + OriginDataMap* data_map); |
| + |
| // Reports database readiness metric defined as percentage of navigated hosts |
| // found in DB for last X entries in history. |
| void ReportDatabaseReadiness(const history::TopHostsList& top_hosts) const; |
| @@ -426,6 +452,7 @@ class ResourcePrefetchPredictor |
| std::unique_ptr<RedirectDataMap> url_redirect_table_cache_; |
| std::unique_ptr<RedirectDataMap> host_redirect_table_cache_; |
| std::unique_ptr<ManifestDataMap> manifest_table_cache_; |
| + std::unique_ptr<OriginDataMap> origin_table_cache_; |
| std::map<GURL, base::TimeTicks> inflight_prefetches_; |
| NavigationMap inflight_navigations_; |