| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ | 5 #ifndef CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ |
| 6 #define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ | 6 #define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
| 11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "components/sessions/core/session_id.h" | 12 #include "components/sessions/core/session_id.h" |
| 13 #include "url/gurl.h" | 13 #include "url/gurl.h" |
| 14 | 14 |
| 15 class Profile; | 15 class Profile; |
| 16 | 16 |
| 17 namespace content { | 17 namespace content { |
| 18 class WebContents; | 18 class WebContents; |
| 19 } | 19 } |
| 20 | 20 |
| 21 namespace predictors { | 21 namespace predictors { |
| 22 | 22 |
| 23 namespace internal { |
| 24 |
| 25 bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask); |
| 26 |
| 27 } // namespace internal |
| 28 |
| 23 extern const char kSpeculativeResourcePrefetchingFeatureName[]; | 29 extern const char kSpeculativeResourcePrefetchingFeatureName[]; |
| 24 extern const char kModeParamName[]; | 30 extern const char kModeParamName[]; |
| 25 extern const char kLearningMode[]; | 31 extern const char kLearningMode[]; |
| 26 extern const char kExternalPrefetchingMode[]; | 32 extern const char kExternalPrefetchingMode[]; |
| 27 extern const char kPrefetchingMode[]; | 33 extern const char kPrefetchingMode[]; |
| 28 extern const char kEnableUrlLearningParamName[]; | 34 extern const char kEnableUrlLearningParamName[]; |
| 29 extern const char kEnableManifestsParamName[]; | 35 extern const char kEnableManifestsParamName[]; |
| 30 extern const char kEnableOriginLearningParamName[]; | 36 extern const char kEnableOriginLearningParamName[]; |
| 31 extern const base::Feature kSpeculativeResourcePrefetchingFeature; | 37 extern const base::Feature kSpeculativeResourcePrefetchingFeature; |
| 32 | 38 |
| 33 struct ResourcePrefetchPredictorConfig; | 39 struct LoadingPredictorConfig; |
| 34 | 40 |
| 35 // Returns true if prefetching is enabled. And will initilize the |config| | 41 // Returns true if prefetching is enabled, and initializes |config|, if not |
| 36 // fields to the appropritate values. | 42 // nullptr. |
| 37 bool IsSpeculativeResourcePrefetchingEnabled( | 43 bool IsSpeculativeResourcePrefetchingEnabled(Profile* profile, |
| 38 Profile* profile, | 44 LoadingPredictorConfig* config); |
| 39 ResourcePrefetchPredictorConfig* config); | |
| 40 | 45 |
| 41 // Represents the type of key based on which prefetch data is stored. | 46 // Represents the type of key based on which prefetch data is stored. |
| 42 enum PrefetchKeyType { | 47 enum PrefetchKeyType { |
| 43 PREFETCH_KEY_TYPE_HOST, | 48 PREFETCH_KEY_TYPE_HOST, |
| 44 PREFETCH_KEY_TYPE_URL | 49 PREFETCH_KEY_TYPE_URL |
| 45 }; | 50 }; |
| 46 | 51 |
| 47 // Indicates what caused the prefetch request. | |
| 48 enum class PrefetchOrigin { NAVIGATION, EXTERNAL }; | |
| 49 | |
| 50 // Represents a single navigation for a render frame. | 52 // Represents a single navigation for a render frame. |
| 51 struct NavigationID { | 53 struct NavigationID { |
| 52 NavigationID(); | 54 NavigationID(); |
| 53 explicit NavigationID(content::WebContents* web_contents); | 55 explicit NavigationID(content::WebContents* web_contents); |
| 54 NavigationID(content::WebContents* web_contents, | 56 NavigationID(content::WebContents* web_contents, |
| 55 const GURL& main_frame_url, | 57 const GURL& main_frame_url, |
| 56 const base::TimeTicks& creation_time); | 58 const base::TimeTicks& creation_time); |
| 57 NavigationID(const NavigationID& other); | 59 NavigationID(const NavigationID& other); |
| 58 | 60 |
| 59 bool operator<(const NavigationID& rhs) const; | 61 bool operator<(const NavigationID& rhs) const; |
| 60 bool operator==(const NavigationID& rhs) const; | 62 bool operator==(const NavigationID& rhs) const; |
| 61 | 63 |
| 62 // Returns true iff the tab_id is valid and the Main frame URL is set. | 64 // Returns true iff the tab_id is valid and the Main frame URL is set. |
| 63 bool is_valid() const; | 65 bool is_valid() const; |
| 64 | 66 |
| 65 SessionID::id_type tab_id; | 67 SessionID::id_type tab_id; |
| 66 GURL main_frame_url; | 68 GURL main_frame_url; |
| 67 | 69 |
| 68 // NOTE: Even though we store the creation time here, it is not used during | 70 // NOTE: Even though we store the creation time here, it is not used during |
| 69 // comparison of two NavigationIDs because it cannot always be determined | 71 // comparison of two NavigationIDs because it cannot always be determined |
| 70 // correctly. | 72 // correctly. |
| 71 base::TimeTicks creation_time; | 73 base::TimeTicks creation_time; |
| 72 }; | 74 }; |
| 73 | 75 |
| 74 // Represents the config for the resource prefetch prediction algorithm. | |
| 75 struct ResourcePrefetchPredictorConfig { | |
| 76 // Initializes the config with default values. | |
| 77 ResourcePrefetchPredictorConfig(); | |
| 78 ResourcePrefetchPredictorConfig(const ResourcePrefetchPredictorConfig& other); | |
| 79 ~ResourcePrefetchPredictorConfig(); | |
| 80 | |
| 81 // The mode the prefetcher is running in. Forms a bit map. | |
| 82 enum Mode { | |
| 83 LEARNING = 1 << 0, | |
| 84 PREFETCHING_FOR_NAVIGATION = 1 << 2, // Should also turn on LEARNING. | |
| 85 PREFETCHING_FOR_EXTERNAL = 1 << 3 // Should also turn on LEARNING. | |
| 86 }; | |
| 87 int mode; | |
| 88 | |
| 89 // Helpers to deal with mode. | |
| 90 bool IsLearningEnabled() const; | |
| 91 bool IsPrefetchingEnabledForSomeOrigin(Profile* profile) const; | |
| 92 bool IsPrefetchingEnabledForOrigin(Profile* profile, | |
| 93 PrefetchOrigin origin) const; | |
| 94 | |
| 95 bool IsLowConfidenceForTest() const; | |
| 96 bool IsHighConfidenceForTest() const; | |
| 97 bool IsMoreResourcesEnabledForTest() const; | |
| 98 bool IsSmallDBEnabledForTest() const; | |
| 99 | |
| 100 // If a navigation hasn't seen a load complete event in this much time, it | |
| 101 // is considered abandoned. | |
| 102 size_t max_navigation_lifetime_seconds; | |
| 103 | |
| 104 // Size of LRU caches for the URL and host data. | |
| 105 size_t max_urls_to_track; | |
| 106 size_t max_hosts_to_track; | |
| 107 | |
| 108 // The number of times we should have seen a visit to this URL in history | |
| 109 // to start tracking it. This is to ensure we don't bother with oneoff | |
| 110 // entries. For hosts we track each one. | |
| 111 size_t min_url_visit_count; | |
| 112 | |
| 113 // The maximum number of resources to store per entry. | |
| 114 size_t max_resources_per_entry; | |
| 115 // The maximum number of origins to store per entry. | |
| 116 size_t max_origins_per_entry; | |
| 117 // The number of consecutive misses after which we stop tracking a resource | |
| 118 // URL. | |
| 119 size_t max_consecutive_misses; | |
| 120 // The number of consecutive misses after which we stop tracking a redirect | |
| 121 // endpoint. | |
| 122 size_t max_redirect_consecutive_misses; | |
| 123 | |
| 124 // The minimum confidence (accuracy of hits) required for a resource to be | |
| 125 // prefetched. | |
| 126 float min_resource_confidence_to_trigger_prefetch; | |
| 127 // The minimum number of times we must have a URL on record to prefetch it. | |
| 128 size_t min_resource_hits_to_trigger_prefetch; | |
| 129 | |
| 130 // Maximum number of prefetches that can be inflight for a single navigation. | |
| 131 size_t max_prefetches_inflight_per_navigation; | |
| 132 // Maximum number of prefetches that can be inflight for a host for a single | |
| 133 // navigation. | |
| 134 size_t max_prefetches_inflight_per_host_per_navigation; | |
| 135 // True iff the predictor could use a url-based database. | |
| 136 bool is_url_learning_enabled; | |
| 137 // True iff the predictor could use manifests. | |
| 138 bool is_manifests_enabled; | |
| 139 // True iff origin-based learning is enabled. | |
| 140 bool is_origin_learning_enabled; | |
| 141 }; | |
| 142 | |
| 143 } // namespace predictors | 76 } // namespace predictors |
| 144 | 77 |
| 145 #endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ | 78 #endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_ |
| OLD | NEW |