Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: chrome/browser/predictors/resource_prefetch_common.cc

Issue 2729563002: predictors: Disable URL-based learning by default. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "chrome/browser/predictors/resource_prefetch_common.h" 5 #include "chrome/browser/predictors/resource_prefetch_common.h"
6 6
7 #include <string> 7 #include <string>
8 #include <tuple> 8 #include <tuple>
9 9
10 #include "base/command_line.h" 10 #include "base/feature_list.h"
11 #include "base/metrics/field_trial.h" 11 #include "base/metrics/field_trial_params.h"
12 #include "chrome/browser/net/prediction_options.h" 12 #include "chrome/browser/net/prediction_options.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/sessions/session_tab_helper.h" 14 #include "chrome/browser/sessions/session_tab_helper.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "components/prefs/pref_service.h" 15 #include "components/prefs/pref_service.h"
17 #include "components/variations/variations_associated_data.h"
18 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
19 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
20 18
21 namespace predictors { 19 namespace predictors {
22 20
23 const char kSpeculativeResourcePrefetchingFeatureName[] = 21 const char kSpeculativeResourcePrefetchingFeatureName[] =
24 "SpeculativeResourcePrefetching"; 22 "SpeculativeResourcePrefetching";
25 const char kModeParamName[] = "mode"; 23 const char kModeParamName[] = "mode";
26 const char kLearningMode[] = "learning"; 24 const char kLearningMode[] = "learning";
27 const char kExternalPrefetchingMode[] = "external-prefetching"; 25 const char kExternalPrefetchingMode[] = "external-prefetching";
28 const char kPrefetchingMode[] = "prefetching"; 26 const char kPrefetchingMode[] = "prefetching";
27 const char kKeyTypeParamName[] = "key-type";
28 const char kUrlKeyType[] = "url";
29 const char kHostKeyType[] = "host";
30 const char kBothKeyType[] = "both";
29 31
30 namespace { 32 namespace {
31 33
32 const base::Feature kSpeculativeResourcePrefetchingFeature{ 34 const base::Feature kSpeculativeResourcePrefetchingFeature{
33 kSpeculativeResourcePrefetchingFeatureName, 35 kSpeculativeResourcePrefetchingFeatureName,
34 base::FEATURE_DISABLED_BY_DEFAULT}; 36 base::FEATURE_DISABLED_BY_DEFAULT};
35 37
36 bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask) { 38 bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask) {
37 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 39 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
38 if ((mode & mask) == 0) 40 if ((mode & mask) == 0)
(...skipping 15 matching lines...) Expand all
54 ResourcePrefetchPredictorConfig* config) { 56 ResourcePrefetchPredictorConfig* config) {
55 DCHECK(config); 57 DCHECK(config);
56 58
57 // Disabled for of-the-record. Policy choice, not a technical limitation. 59 // Disabled for of-the-record. Policy choice, not a technical limitation.
58 if (!profile || profile->IsOffTheRecord()) 60 if (!profile || profile->IsOffTheRecord())
59 return false; 61 return false;
60 62
61 if (!base::FeatureList::IsEnabled(kSpeculativeResourcePrefetchingFeature)) 63 if (!base::FeatureList::IsEnabled(kSpeculativeResourcePrefetchingFeature))
62 return false; 64 return false;
63 65
64 std::string mode_value = variations::GetVariationParamValueByFeature( 66 std::string key_type_value = base::GetFieldTrialParamValueByFeature(
Benoit L 2017/03/01 16:04:41 Do we really want URL-only? If not, can we simpli
alexilin 2017/03/01 16:55:56 Done.
67 kSpeculativeResourcePrefetchingFeature, kKeyTypeParamName);
68 if (key_type_value == kUrlKeyType) {
69 config->mode |= ResourcePrefetchPredictorConfig::URL_LEARNING;
70 } else if (key_type_value == kHostKeyType) {
71 config->mode |= ResourcePrefetchPredictorConfig::HOST_LEARNING;
72 } else if (key_type_value == kBothKeyType) {
73 config->mode |= ResourcePrefetchPredictorConfig::URL_LEARNING |
74 ResourcePrefetchPredictorConfig::HOST_LEARNING;
75 } else {
76 // Only host learning by default.
77 config->mode |= ResourcePrefetchPredictorConfig::HOST_LEARNING;
78 }
79
80 std::string mode_value = base::GetFieldTrialParamValueByFeature(
65 kSpeculativeResourcePrefetchingFeature, kModeParamName); 81 kSpeculativeResourcePrefetchingFeature, kModeParamName);
66 if (mode_value == kLearningMode) { 82 if (mode_value == kLearningMode) {
67 config->mode |= ResourcePrefetchPredictorConfig::LEARNING;
68 return true; 83 return true;
69 } else if (mode_value == kExternalPrefetchingMode) { 84 } else if (mode_value == kExternalPrefetchingMode) {
70 config->mode |= ResourcePrefetchPredictorConfig::LEARNING | 85 config->mode |= ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL;
71 ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL;
72 return true; 86 return true;
73 } else if (mode_value == kPrefetchingMode) { 87 } else if (mode_value == kPrefetchingMode) {
74 config->mode |= ResourcePrefetchPredictorConfig::LEARNING | 88 config->mode |= ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL |
75 ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL |
76 ResourcePrefetchPredictorConfig::PREFETCHING_FOR_NAVIGATION; 89 ResourcePrefetchPredictorConfig::PREFETCHING_FOR_NAVIGATION;
77 return true; 90 return true;
78 } 91 }
79 92
80 return false; 93 return false;
81 } 94 }
82 95
83 NavigationID::NavigationID() : tab_id(-1) {} 96 NavigationID::NavigationID() : tab_id(-1) {}
84 97
85 NavigationID::NavigationID(const NavigationID& other) 98 NavigationID::NavigationID(const NavigationID& other)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 max_prefetches_inflight_per_host_per_navigation(3) { 141 max_prefetches_inflight_per_host_per_navigation(3) {
129 } 142 }
130 143
131 ResourcePrefetchPredictorConfig::ResourcePrefetchPredictorConfig( 144 ResourcePrefetchPredictorConfig::ResourcePrefetchPredictorConfig(
132 const ResourcePrefetchPredictorConfig& other) = default; 145 const ResourcePrefetchPredictorConfig& other) = default;
133 146
134 ResourcePrefetchPredictorConfig::~ResourcePrefetchPredictorConfig() { 147 ResourcePrefetchPredictorConfig::~ResourcePrefetchPredictorConfig() {
135 } 148 }
136 149
137 bool ResourcePrefetchPredictorConfig::IsLearningEnabled() const { 150 bool ResourcePrefetchPredictorConfig::IsLearningEnabled() const {
138 return (mode & LEARNING) > 0; 151 return IsURLLearningEnabled() || IsHostLearningEnabled();
152 }
153
154 bool ResourcePrefetchPredictorConfig::IsURLLearningEnabled() const {
155 return (mode & URL_LEARNING) > 0;
156 }
157
158 bool ResourcePrefetchPredictorConfig::IsHostLearningEnabled() const {
159 return (mode & HOST_LEARNING) > 0;
139 } 160 }
140 161
141 bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForSomeOrigin( 162 bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForSomeOrigin(
142 Profile* profile) const { 163 Profile* profile) const {
143 int mask = PREFETCHING_FOR_NAVIGATION | PREFETCHING_FOR_EXTERNAL; 164 int mask = PREFETCHING_FOR_NAVIGATION | PREFETCHING_FOR_EXTERNAL;
144 return IsPrefetchingEnabledInternal(profile, mode, mask); 165 return IsPrefetchingEnabledInternal(profile, mode, mask);
145 } 166 }
146 167
147 bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForOrigin( 168 bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForOrigin(
148 Profile* profile, 169 Profile* profile,
(...skipping 24 matching lines...) Expand all
173 194
174 bool ResourcePrefetchPredictorConfig::IsMoreResourcesEnabledForTest() const { 195 bool ResourcePrefetchPredictorConfig::IsMoreResourcesEnabledForTest() const {
175 return max_resources_per_entry == 100; 196 return max_resources_per_entry == 100;
176 } 197 }
177 198
178 bool ResourcePrefetchPredictorConfig::IsSmallDBEnabledForTest() const { 199 bool ResourcePrefetchPredictorConfig::IsSmallDBEnabledForTest() const {
179 return max_urls_to_track == 200 && max_hosts_to_track == 100; 200 return max_urls_to_track == 200 && max_hosts_to_track == 100;
180 } 201 }
181 202
182 } // namespace predictors 203 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698