diff options
author | vangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-08 03:09:09 +0000 |
---|---|---|
committer | vangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-08 03:09:09 +0000 |
commit | 4abe58dfd60869a3c5f35760f081eee86c21d910 (patch) | |
tree | a9a888b5b22966cc375a57ac0b5d19a226b707c8 | |
parent | a3d60283510e47412fad6684f7bdc1f1af45baba (diff) | |
download | chromium_src-4abe58dfd60869a3c5f35760f081eee86c21d910.zip chromium_src-4abe58dfd60869a3c5f35760f081eee86c21d910.tar.gz chromium_src-4abe58dfd60869a3c5f35760f081eee86c21d910.tar.bz2 |
Adding a field trial for testing --force-compositing-mode on 50% of
canary users.
BUG=114549
Review URL: https://chromiumcodereview.appspot.com/10541019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141164 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chrome_browser_main.cc | 1 | ||||
-rw-r--r-- | chrome/browser/chrome_content_browser_client.cc | 4 | ||||
-rw-r--r-- | chrome/browser/gpu_util.cc | 78 | ||||
-rw-r--r-- | chrome/browser/gpu_util.h | 7 |
4 files changed, 79 insertions, 11 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index da98a69..11e8200 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc @@ -1104,6 +1104,7 @@ void ChromeBrowserMainParts::SetupFieldTrials(bool metrics_recording_enabled, DefaultAppsFieldTrial(); AutoLaunchChromeFieldTrial(); DomainBoundCertsFieldTrial(); + gpu_util::InitializeForceCompositingModeFieldTrial(); SetupUniformityFieldTrials(); AutocompleteFieldTrial::Activate(); } diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 5c0142a..4f8f1ed 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -37,6 +37,7 @@ #include "chrome/browser/extensions/extension_webkit_preferences.h" #include "chrome/browser/geolocation/chrome_access_token_store.h" #include "chrome/browser/google/google_util.h" +#include "chrome/browser/gpu_util.h" #include "chrome/browser/infobars/infobar_tab_helper.h" #include "chrome/browser/media/media_internals.h" #include "chrome/browser/net/chrome_net_log.h" @@ -1433,6 +1434,9 @@ void ChromeContentBrowserClient::OverrideWebkitPrefs( extension, view_type, web_prefs); } + if (gpu_util::InForceCompositingModeTrial()) + web_prefs->force_compositing_mode = true; + if (view_type == chrome::VIEW_TYPE_NOTIFICATION) { web_prefs->allow_scripts_to_close_windows = true; } else if (view_type == chrome::VIEW_TYPE_BACKGROUND_CONTENTS) { diff --git a/chrome/browser/gpu_util.cc b/chrome/browser/gpu_util.cc index edf935c..9c990b8 100644 --- a/chrome/browser/gpu_util.cc +++ b/chrome/browser/gpu_util.cc @@ -7,6 +7,7 @@ #include <vector> #include "base/command_line.h" +#include "base/metrics/field_trial.h" #include "base/metrics/histogram.h" #include "base/string_number_conversions.h" #include "base/string_util.h" @@ -15,10 +16,17 @@ #include "base/values.h" #include "base/version.h" #include "chrome/browser/gpu_blacklist.h" +#include "chrome/common/chrome_version_info.h" #include "content/public/browser/gpu_data_manager.h" #include "content/public/common/content_switches.h" #include "content/public/common/gpu_info.h" +#if defined(OS_WIN) +#include "base/win/windows_version.h" +#elif defined(OS_MACOSX) +#include "base/mac/mac_util.h" +#endif + using content::GpuDataManager; using content::GpuFeatureType; @@ -162,6 +170,53 @@ int GetGpuBlacklistHistogramValueWin(GpuFeatureStatus status) { namespace gpu_util { +const char kForceCompositingModeFieldTrialName[] = "ForceCompositingMode"; +const char kFieldTrialEnabledName[] = "enabled"; + +void InitializeForceCompositingModeFieldTrial() { +// Enable the field trial only on desktop OS's. +#if !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)) + return; +#endif + chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); + // Only run the trial on the Canary channel. + if (channel != chrome::VersionInfo::CHANNEL_CANARY) + return; +#if defined(OS_WIN) + // Don't run the trial on Windows XP. + if (base::win::GetVersion() < base::win::VERSION_VISTA) + return; +#elif defined(OS_MACOSX) + // Accelerated compositing is only implemented on Mac OSX 10.6 or later. + if (base::mac::IsOSLeopardOrEarlier()) + return; +#endif + + const base::FieldTrial::Probability kDivisor = 100; + scoped_refptr<base::FieldTrial> trial( + base::FieldTrialList::FactoryGetFieldTrial( + kForceCompositingModeFieldTrialName, kDivisor, + "disable", 2012, 12, 31, NULL)); + + // Produce the same result on every run of this client. + trial->UseOneTimeRandomization(); + // 50% probability of being in the enabled group. + const base::FieldTrial::Probability kEnableProbability = 50; + int enable_group = trial->AppendGroup( + kFieldTrialEnabledName, kEnableProbability); + + bool enabled = (trial->group() == enable_group); + UMA_HISTOGRAM_BOOLEAN("GPU.InForceCompositingModeFieldTrial", enabled); +} + +bool InForceCompositingModeTrial() { + base::FieldTrial* trial = + base::FieldTrialList::Find(kForceCompositingModeFieldTrialName); + if (!trial) + return false; + return trial->group_name() == kFieldTrialEnabledName; +} + GpuFeatureType StringToGpuFeatureType(const std::string& feature_string) { if (feature_string == kGpuFeatureNameAccelerated2dCanvas) return content::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS; @@ -309,17 +364,18 @@ Value* GetFeatureStatus() { (command_line.HasSwitch(switches::kDisableAcceleratedCompositing) || (flags & content::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING))) status += "_readback"; - bool has_thread = CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableThreadedCompositing) && - (!CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableThreadedCompositing)); - if (kGpuFeatureInfo[i].name == "compositing" && - CommandLine::ForCurrentProcess()->HasSwitch( - switches::kForceCompositingMode)) - status += "_force"; - if (kGpuFeatureInfo[i].name == "compositing" && - has_thread) - status += "_threaded"; + bool has_thread = + command_line.HasSwitch(switches::kEnableThreadedCompositing) && + !command_line.HasSwitch(switches::kDisableThreadedCompositing); + if (kGpuFeatureInfo[i].name == "compositing") { + bool force_compositing = + command_line.HasSwitch(switches::kForceCompositingMode) || + InForceCompositingModeTrial(); + if (force_compositing) + status += "_force"; + if (has_thread) + status += "_threaded"; + } if (kGpuFeatureInfo[i].name == "css_animation") { if (has_thread) status = "accelerated_threaded"; diff --git a/chrome/browser/gpu_util.h b/chrome/browser/gpu_util.h index 5432c98..5edc6c7 100644 --- a/chrome/browser/gpu_util.h +++ b/chrome/browser/gpu_util.h @@ -69,6 +69,13 @@ base::DictionaryValue* GpuInfoAsDictionaryValue(); // Send UMA histograms about the enabled features. void UpdateStats(); +// Returs whether this client has been selected for the force-compositing-mode +// trial. +bool InForceCompositingModeTrial(); + +// Sets up the force-compositing-mode field trial. +void InitializeForceCompositingModeFieldTrial(); + } // namespace gpu_util #endif // CHROME_BROWSER_GPU_UTIL_H_ |