OLD | NEW |
| (Empty) |
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(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_ | |
OLD | NEW |