summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-08 03:09:09 +0000
committervangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-08 03:09:09 +0000
commit4abe58dfd60869a3c5f35760f081eee86c21d910 (patch)
treea9a888b5b22966cc375a57ac0b5d19a226b707c8
parenta3d60283510e47412fad6684f7bdc1f1af45baba (diff)
downloadchromium_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.cc1
-rw-r--r--chrome/browser/chrome_content_browser_client.cc4
-rw-r--r--chrome/browser/gpu_util.cc78
-rw-r--r--chrome/browser/gpu_util.h7
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_