summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chrome_browser_field_trials_desktop.cc2
-rw-r--r--chrome/browser/chrome_browser_main.cc1
-rw-r--r--chrome/browser/gpu/chrome_gpu_util.cc112
-rw-r--r--chrome/browser/gpu/chrome_gpu_util.h16
-rw-r--r--chrome/chrome_browser.gypi2
5 files changed, 133 insertions, 0 deletions
diff --git a/chrome/browser/chrome_browser_field_trials_desktop.cc b/chrome/browser/chrome_browser_field_trials_desktop.cc
index e76120b..c723802 100644
--- a/chrome/browser/chrome_browser_field_trials_desktop.cc
+++ b/chrome/browser/chrome_browser_field_trials_desktop.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/apps/app_launcher_util.h"
#include "chrome/browser/auto_launch_trial.h"
#include "chrome/browser/google/google_util.h"
+#include "chrome/browser/gpu/chrome_gpu_util.h"
#include "chrome/browser/omnibox/omnibox_field_trial.h"
#include "chrome/browser/prerender/prerender_field_trial.h"
#include "chrome/browser/profiles/profiles_state.h"
@@ -129,6 +130,7 @@ void SetupDesktopFieldTrials(const CommandLine& parsed_command_line,
PrefService* local_state) {
prerender::ConfigurePrefetchAndPrerender(parsed_command_line);
AutoLaunchChromeFieldTrial();
+ gpu_util::InitializeCompositingFieldTrial();
OmniboxFieldTrial::ActivateStaticTrials();
SetupInfiniteCacheFieldTrial();
DisableShowProfileSwitcherTrialIfNecessary();
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index cfd30c3..1319412 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -60,6 +60,7 @@
#include "chrome/browser/first_run/upgrade_util.h"
#include "chrome/browser/google/google_search_counter.h"
#include "chrome/browser/google/google_util.h"
+#include "chrome/browser/gpu/chrome_gpu_util.h"
#include "chrome/browser/gpu/gl_string_manager.h"
#include "chrome/browser/jankometer.h"
#include "chrome/browser/language_usage_metrics.h"
diff --git a/chrome/browser/gpu/chrome_gpu_util.cc b/chrome/browser/gpu/chrome_gpu_util.cc
new file mode 100644
index 0000000..5904713
--- /dev/null
+++ b/chrome/browser/gpu/chrome_gpu_util.cc
@@ -0,0 +1,112 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/gpu/chrome_gpu_util.h"
+
+#include "base/command_line.h"
+#if defined(OS_MACOSX)
+#include "base/mac/mac_util.h"
+#endif
+#include "base/metrics/field_trial.h"
+#include "base/metrics/histogram.h"
+#include "base/version.h"
+#if defined(OS_WIN)
+#include "base/win/windows_version.h"
+#endif
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_list_observer.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/chrome_version_info.h"
+#include "content/public/browser/gpu_data_manager.h"
+#include "content/public/common/content_constants.h"
+#include "content/public/common/content_switches.h"
+
+using content::GpuDataManager;
+
+namespace gpu_util {
+
+void DisableCompositingFieldTrial() {
+ base::FieldTrial* trial =
+ base::FieldTrialList::Find(content::kGpuCompositingFieldTrialName);
+ if (trial)
+ trial->Disable();
+}
+
+bool ShouldRunCompositingFieldTrial() {
+// Enable the field trial only on desktop OS's.
+#if !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
+ return false;
+#endif
+
+// Necessary for linux_chromeos build since it defines both OS_LINUX
+// and OS_CHROMEOS.
+#if defined(OS_CHROMEOS)
+ return false;
+#endif
+
+ // Don't activate the field trial if force-compositing-mode has been
+ // explicitly disabled from the command line.
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableForceCompositingMode) ||
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableAcceleratedCompositing))
+ return false;
+
+ return true;
+}
+
+// Note 1: The compositing field trial may be created at startup time via the
+// Finch framework. In that case, all the Groups and probability values are
+// set before this function is called and any Field Trial setup calls
+// made here are simply ignored.
+// Note 2: Compositing field trials will be overwritten if accelerated
+// compositing is blacklisted. That check takes place in
+// IsThreadedCompositingEnabled() and IsForceCompositingModeEnabled() as
+// the blacklist information isn't available at the time the field trials
+// are initialized.
+// Early outs from this function intended to bypass activation of the field
+// trial must call DisableCompositingFieldTrial() before returning.
+void InitializeCompositingFieldTrial() {
+ // Early out in configurations that should not run the compositing
+ // field trial.
+ if (!ShouldRunCompositingFieldTrial()) {
+ DisableCompositingFieldTrial();
+ return;
+ }
+
+ const base::FieldTrial::Probability kDivisor = 3;
+ scoped_refptr<base::FieldTrial> trial(
+ base::FieldTrialList::FactoryGetFieldTrial(
+ content::kGpuCompositingFieldTrialName, kDivisor, "disable",
+ 2013, 12, 31, base::FieldTrial::ONE_TIME_RANDOMIZED, NULL));
+
+ base::FieldTrial::Probability force_compositing_mode_probability = 0;
+ base::FieldTrial::Probability threaded_compositing_probability = 0;
+
+ // Note: Threaded compositing mode isn't feature complete on mac or linux yet:
+ // http://crbug.com/133602 for mac
+ // http://crbug.com/140866 for linux
+
+#if defined(OS_WIN) || defined(OS_MACOSX)
+ // Enable threaded compositing on Windows and Mac.
+ threaded_compositing_probability = kDivisor;
+#endif
+
+ int force_compositing_group = trial->AppendGroup(
+ content::kGpuCompositingFieldTrialForceCompositingEnabledName,
+ force_compositing_mode_probability);
+ int thread_group = trial->AppendGroup(
+ content::kGpuCompositingFieldTrialThreadEnabledName,
+ threaded_compositing_probability);
+
+ bool force_compositing = (trial->group() == force_compositing_group);
+ bool thread = (trial->group() == thread_group);
+ UMA_HISTOGRAM_BOOLEAN("GPU.InForceCompositingModeFieldTrial",
+ force_compositing);
+ UMA_HISTOGRAM_BOOLEAN("GPU.InCompositorThreadFieldTrial", thread);
+}
+
+} // namespace gpu_util
+
diff --git a/chrome/browser/gpu/chrome_gpu_util.h b/chrome/browser/gpu/chrome_gpu_util.h
new file mode 100644
index 0000000..1edff61
--- /dev/null
+++ b/chrome/browser/gpu/chrome_gpu_util.h
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_GPU_CHROME_GPU_UTIL_H_
+#define CHROME_BROWSER_GPU_CHROME_GPU_UTIL_H_
+
+namespace gpu_util {
+
+// Sets up force-compositing-mode and threaded compositing field trials.
+void InitializeCompositingFieldTrial();
+
+} // namespace gpu_util
+
+#endif // CHROME_BROWSER_GPU_CHROME_GPU_UTIL_H_
+
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 334f75e..a1e3bd2 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -703,6 +703,8 @@
'browser/google_apis/task_util.h',
'browser/google_apis/time_util.cc',
'browser/google_apis/time_util.h',
+ 'browser/gpu/chrome_gpu_util.cc',
+ 'browser/gpu/chrome_gpu_util.h',
'browser/gpu/gl_string_manager.cc',
'browser/gpu/gl_string_manager.h',
'browser/gpu/gpu_feature_checker.cc',