diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-12 23:45:15 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-12 23:45:15 +0000 |
commit | 0e6f56d09ae4323ce7a8ac65f367524b05d22e11 (patch) | |
tree | 62be0d0889b41eb05d8768404cdc0e8abe3b2ef2 /chrome/browser/browser_main.cc | |
parent | 9a55bb981e5f390f796912bab0f58f5443112674 (diff) | |
download | chromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.zip chromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.tar.gz chromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.tar.bz2 |
Updated about_flags and command-line switch handling for prerender/prefetch
The second half of http://codereview.chromium.org/6410082/ , which
cbentzel suggested be landed in two halves.
This upload addresses comments from that review (improved description,
unified options, no more contradictory option possibilities).
BUG=70610
TEST=lots of manual testing, http://browserspy.dk/prefetch.php
Review URL: http://codereview.chromium.org/6480002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@74740 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_main.cc')
-rw-r--r-- | chrome/browser/browser_main.cc | 95 |
1 files changed, 66 insertions, 29 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index b813a17..9ef2054 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -429,39 +429,76 @@ void BrowserMainParts::SpdyFieldTrial() { } } -// If any of --enable-prerender, --enable-content-prefetch or -// --disable-content-prefetch are set, use those to determine if -// prefetch is enabled. Otherwise, randomly assign users to an A/B test for -// prefetching. +// Parse the --prerender= command line switch, which controls both prerendering +// and prefetching. If the switch is unset, or is set to "auto", then the user +// is assigned to a field trial. void BrowserMainParts::PrefetchAndPrerenderFieldTrial() { - if (parsed_command_line().HasSwitch(switches::kEnableContentPrefetch) || - parsed_command_line().HasSwitch(switches::kEnablePagePrerender)) - ResourceDispatcherHost::set_is_prefetch_enabled(true); - else if (parsed_command_line().HasSwitch(switches::kDisableContentPrefetch)) { - ResourceDispatcherHost::set_is_prefetch_enabled(false); - } else { - const base::FieldTrial::Probability kPrefetchDivisor = 1000; - const base::FieldTrial::Probability no_prefetch_probability = 500; - // After June 30, 2011 builds, it will always be in default group. - scoped_refptr<base::FieldTrial> trial( - new base::FieldTrial("Prefetch", kPrefetchDivisor, - "ContentPrefetchEnabled", 2011, 6, 30)); - const int yes_prefetch_grp = trial->kDefaultGroupNumber; - trial->AppendGroup("ContentPrefetchDisabled", no_prefetch_probability); - const int trial_grp = trial->group(); - ResourceDispatcherHost::set_is_prefetch_enabled( - trial_grp == yes_prefetch_grp); + enum PrerenderOption { + PRERENDER_OPTION_AUTO, + PRERENDER_OPTION_DISABLED, + PRERENDER_OPTION_ENABLED, + PRERENDER_OPTION_PREFETCH_ONLY, + }; + + PrerenderOption prerender_option = PRERENDER_OPTION_AUTO; + if (parsed_command_line().HasSwitch(switches::kPrerender)) { + const std::string switch_value = + parsed_command_line().GetSwitchValueASCII(switches::kPrerender); + + if (switch_value == switches::kPrerenderSwitchValueAuto) { + prerender_option = PRERENDER_OPTION_AUTO; + } else if (switch_value == switches::kPrerenderSwitchValueDisabled) { + prerender_option = PRERENDER_OPTION_DISABLED; + } else if (switch_value.empty() || + switch_value == switches::kPrerenderSwitchValueEnabled) { + // The empty string means the option was provided with no value, and that + // means enable. + prerender_option = PRERENDER_OPTION_ENABLED; + } else if (switch_value == switches::kPrerenderSwitchValuePrefetchOnly) { + prerender_option = PRERENDER_OPTION_PREFETCH_ONLY; + } else { + prerender_option = PRERENDER_OPTION_DISABLED; + LOG(ERROR) << "Invalid --prerender option received on command line: " + << switch_value; + LOG(ERROR) << "Disabling prerendering!"; + } } - PrerenderManager::PrerenderManagerMode prerender_mode = - PrerenderManager::PRERENDER_MODE_DISABLED; - if (parsed_command_line().HasSwitch(switches::kEnablePagePrerender)) - prerender_mode = PrerenderManager::PRERENDER_MODE_ENABLED; - else - prerender_mode = PrerenderManager::PRERENDER_MODE_DISABLED; - PrerenderManager::SetMode(prerender_mode); + switch (prerender_option) { + case PRERENDER_OPTION_AUTO: { + const base::FieldTrial::Probability kPrefetchDivisor = 1000; + const base::FieldTrial::Probability no_prefetch_probability = 500; + // After June 30, 2011 builds, it will always be in default group. + scoped_refptr<base::FieldTrial> trial( + new base::FieldTrial("Prefetch", kPrefetchDivisor, + "ContentPrefetchEnabled", 2011, 6, 30)); + const int yes_prefetch_grp = trial->kDefaultGroupNumber; + trial->AppendGroup("ContentPrefetchDisabled", no_prefetch_probability); + const int trial_grp = trial->group(); + ResourceDispatcherHost::set_is_prefetch_enabled( + trial_grp == yes_prefetch_grp); + + // There is currently no prerendering field trial. + PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED); + break; + } + case PRERENDER_OPTION_DISABLED: + ResourceDispatcherHost::set_is_prefetch_enabled(false); + PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED); + break; + case PRERENDER_OPTION_ENABLED: + ResourceDispatcherHost::set_is_prefetch_enabled(true); + PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_ENABLED); + break; + case PRERENDER_OPTION_PREFETCH_ONLY: + ResourceDispatcherHost::set_is_prefetch_enabled(true); + PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED); + break; + default: + NOTREACHED(); + } - UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", prerender_mode, + UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", PrerenderManager::GetMode(), PrerenderManager::PRERENDER_MODE_MAX); } |