Home | History | Annotate | Download | only in predictors
      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
      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 frame.
     34 struct NavigationID {
     35   // TODO(shishir): Maybe take process_id, frame_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_frame_id_ and
     46   // frame_url_ has been set correctly.
     47   bool is_valid() const;
     48 
     49   int render_process_id;
     50   int render_frame_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   size_t max_navigation_lifetime_seconds;
     86 
     87   // Size of LRU caches for the URL and host data.
     88   size_t max_urls_to_track;
     89   size_t 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   size_t min_url_visit_count;
     95 
     96   // The maximum number of resources to store per entry.
     97   size_t max_resources_per_entry;
     98   // The number of consecutive misses after we stop tracking a resource URL.
     99   size_t 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   size_t min_resource_hits_to_trigger_prefetch;
    106 
    107   // Maximum number of prefetches that can be inflight for a single navigation.
    108   size_t max_prefetches_inflight_per_navigation;
    109   // Maximum number of prefetches that can be inflight for a host for a single
    110   // navigation.
    111   size_t max_prefetches_inflight_per_host_per_navigation;
    112 };
    113 
    114 }  // namespace predictors
    115 
    116 #endif  // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_COMMON_H_
    117