1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ 6 #define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ 7 8 #include "base/time/time.h" 9 #include "url/gurl.h" 10 11 class Profile; 12 13 namespace content { 14 class WebContents; 15 } 16 17 namespace predictors { 18 19 struct ResourcePrefetchPredictorConfig; 20 21 // Returns true if prefetching is enabled. And will initilize the |config| 22 // fields to the appropritate values. 23 bool IsSpeculativeResourcePrefetchingEnabled( 24 Profile* profile, 25 ResourcePrefetchPredictorConfig* config); 26 27 // Represents the type of key based on which prefetch data is stored. 28 enum PrefetchKeyType { 29 PREFETCH_KEY_TYPE_HOST, 30 PREFETCH_KEY_TYPE_URL 31 }; 32 33 // Represents a single navigation for a render view. 34 struct NavigationID { 35 // TODO(shishir): Maybe take process_id, view_id and url as input in 36 // constructor. 37 NavigationID(); 38 NavigationID(const NavigationID& other); 39 explicit NavigationID(const content::WebContents& web_contents); 40 bool operator<(const NavigationID& rhs) const; 41 bool operator==(const NavigationID& rhs) const; 42 43 bool IsSameRenderer(const NavigationID& other) const; 44 45 // Returns true iff the render_process_id_, render_view_id_ and 46 // main_frame_url_ has been set correctly. 47 bool is_valid() const; 48 49 int render_process_id; 50 int render_view_id; 51 GURL main_frame_url; 52 53 // NOTE: Even though we store the creation time here, it is not used during 54 // comparison of two NavigationIDs because it cannot always be determined 55 // correctly. 56 base::TimeTicks creation_time; 57 }; 58 59 // Represents the config for the resource prefetch prediction algorithm. It is 60 // useful for running experiments. 61 struct ResourcePrefetchPredictorConfig { 62 // Initializes the config with default values. 63 ResourcePrefetchPredictorConfig(); 64 ~ResourcePrefetchPredictorConfig(); 65 66 // The mode the prefetcher is running in. Forms a bit map. 67 enum Mode { 68 URL_LEARNING = 1 << 0, 69 HOST_LEARNING = 1 << 1, 70 URL_PREFETCHING = 1 << 2, // Should also turn on URL_LEARNING. 71 HOST_PRFETCHING = 1 << 3 // Should also turn on HOST_LEARNING. 72 }; 73 int mode; 74 75 // Helpers to deal with mode. 76 bool IsLearningEnabled() const; 77 bool IsPrefetchingEnabled() const; 78 bool IsURLLearningEnabled() const; 79 bool IsHostLearningEnabled() const; 80 bool IsURLPrefetchingEnabled() const; 81 bool IsHostPrefetchingEnabled() const; 82 83 // If a navigation hasn't seen a load complete event in this much time, it 84 // is considered abandoned. 85 int max_navigation_lifetime_seconds; 86 87 // Size of LRU caches for the URL and host data. 88 int max_urls_to_track; 89 int max_hosts_to_track; 90 91 // The number of times we should have seen a visit to this URL in history 92 // to start tracking it. This is to ensure we don't bother with oneoff 93 // entries. For hosts we track each one. 94 int min_url_visit_count; 95 96 // The maximum number of resources to store per entry. 97 int max_resources_per_entry; 98 // The number of consecutive misses after we stop tracking a resource URL. 99 int max_consecutive_misses; 100 101 // The minimum confidence (accuracy of hits) required for a resource to be 102 // prefetched. 103 float min_resource_confidence_to_trigger_prefetch; 104 // The minimum number of times we must have a URL on record to prefetch it. 105 int min_resource_hits_to_trigger_prefetch; 106 107 // Maximum number of prefetches that can be inflight for a single navigation. 108 int max_prefetches_inflight_per_navigation; 109 // Maximum number of prefetches that can be inflight for a host for a single 110 // navigation. 111 int max_prefetches_inflight_per_host_per_navigation; 112 }; 113 114 } // namespace predictors 115 116 #endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ 117