summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
authorskaslev@chromium.org <skaslev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-10 21:39:49 +0000
committerskaslev@chromium.org <skaslev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-10 21:39:49 +0000
commit3b2b7677a27b49d675e28e1447b377e5240001ce (patch)
tree3b7b51d5aaed035d1ad141441984e4a9e040265f /content/browser
parent6f9cb61fcd9e5b76b105bcfaed590f756f8a86b9 (diff)
downloadchromium_src-3b2b7677a27b49d675e28e1447b377e5240001ce.zip
chromium_src-3b2b7677a27b49d675e28e1447b377e5240001ce.tar.gz
chromium_src-3b2b7677a27b49d675e28e1447b377e5240001ce.tar.bz2
Reland "Clean up software compositing switches" patch.
After this patch just --disable-gpu should be enough to put Chrome in software compositing mode for Aura builds. TBR=piman@chromium.org,jamesr@chromium.org,jochen@chromium.org BUG=229712, 230120 Review URL: https://codereview.chromium.org/15048003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199551 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser')
-rw-r--r--content/browser/gpu/gpu_data_manager_impl.cc5
-rw-r--r--content/browser/gpu/gpu_data_manager_impl.h1
-rw-r--r--content/browser/gpu/gpu_data_manager_impl_private.cc25
-rw-r--r--content/browser/gpu/gpu_data_manager_impl_private.h5
-rw-r--r--content/browser/renderer_host/image_transport_factory.cc2
-rw-r--r--content/browser/renderer_host/render_process_host_impl.cc2
-rw-r--r--content/browser/renderer_host/render_widget_host_view_guest.cc11
7 files changed, 49 insertions, 2 deletions
diff --git a/content/browser/gpu/gpu_data_manager_impl.cc b/content/browser/gpu/gpu_data_manager_impl.cc
index f53094e..765cc18 100644
--- a/content/browser/gpu/gpu_data_manager_impl.cc
+++ b/content/browser/gpu/gpu_data_manager_impl.cc
@@ -112,6 +112,11 @@ void GpuDataManagerImpl::DisableHardwareAcceleration() {
private_->DisableHardwareAcceleration();
}
+void GpuDataManagerImpl::EnableSoftwareCompositing() {
+ base::AutoLock auto_lock(lock_);
+ private_->EnableSoftwareCompositing();
+}
+
void GpuDataManagerImpl::Initialize() {
base::AutoLock auto_lock(lock_);
private_->Initialize();
diff --git a/content/browser/gpu/gpu_data_manager_impl.h b/content/browser/gpu/gpu_data_manager_impl.h
index 9e609b5..9e1b261 100644
--- a/content/browser/gpu/gpu_data_manager_impl.h
+++ b/content/browser/gpu/gpu_data_manager_impl.h
@@ -79,6 +79,7 @@ class CONTENT_EXPORT GpuDataManagerImpl
std::string* gl_renderer,
std::string* gl_version) OVERRIDE;
virtual void DisableHardwareAcceleration() OVERRIDE;
+ virtual void EnableSoftwareCompositing() OVERRIDE;
// This collects preliminary GPU info, load GpuBlacklist, and compute the
// preliminary blacklisted features; it should only be called at browser
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 74fff17..6796141 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -20,6 +20,7 @@
#include "base/strings/string_piece.h"
#include "base/sys_info.h"
#include "base/version.h"
+#include "cc/base/switches.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/gpu/gpu_util.h"
#include "content/common/gpu/gpu_messages.h"
@@ -421,6 +422,11 @@ void GpuDataManagerImplPrivate::AppendRendererCommandLine(
command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode);
if (ShouldUseSwiftShader())
command_line->AppendSwitch(switches::kDisableFlashFullscreen3d);
+
+ if (card_blacklisted_ && use_software_compositor_) {
+ command_line->AppendSwitch(switches::kEnableSoftwareCompositing);
+ command_line->AppendSwitch(cc::switches::kEnableCompositorFrameMessage);
+ }
}
void GpuDataManagerImplPrivate::AppendGpuCommandLine(
@@ -567,6 +573,12 @@ void GpuDataManagerImplPrivate::UpdateRendererWebPrefs(
prefs->accelerated_compositing_for_3d_transforms_enabled = false;
prefs->accelerated_compositing_for_plugins_enabled = false;
}
+
+ if (card_blacklisted_ && use_software_compositor_) {
+ prefs->accelerated_compositing_enabled = true;
+ prefs->accelerated_compositing_for_3d_transforms_enabled = true;
+ prefs->accelerated_compositing_for_animation_enabled = true;
+ }
}
GpuSwitchingOption GpuDataManagerImplPrivate::GetGpuSwitchingOption() const {
@@ -696,6 +708,11 @@ GpuDataManagerImplPrivate::GpuDataManagerImplPrivate()
: complete_gpu_info_already_requested_(false),
gpu_switching_(GPU_SWITCHING_OPTION_AUTOMATIC),
observer_list_(new GpuDataManagerObserverList),
+#if defined(USE_AURA)
+ use_software_compositor_(true),
+#else
+ use_software_compositor_(false),
+#endif
use_swiftshader_(false),
card_blacklisted_(false),
update_histograms_(true),
@@ -703,6 +720,10 @@ GpuDataManagerImplPrivate::GpuDataManagerImplPrivate()
domain_blocking_enabled_(true),
owner_(NULL) {
CommandLine* command_line = CommandLine::ForCurrentProcess();
+
+ use_software_compositor_ |=
+ command_line->HasSwitch(switches::kEnableSoftwareCompositing);
+
if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) {
command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
command_line->AppendSwitch(switches::kDisableAcceleratedLayers);
@@ -819,6 +840,10 @@ void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() {
}
}
+void GpuDataManagerImplPrivate::EnableSoftwareCompositing() {
+ use_software_compositor_ = true;
+}
+
std::string GpuDataManagerImplPrivate::GetDomainFromURL(
const GURL& url) const {
// For the moment, we just use the host, or its IP address, as the
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h
index d8fc042..8d40303 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.h
+++ b/content/browser/gpu/gpu_data_manager_impl_private.h
@@ -48,6 +48,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
std::string* gl_renderer,
std::string* gl_version);
void DisableHardwareAcceleration();
+ void EnableSoftwareCompositing();
void Initialize();
@@ -209,6 +210,10 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
ListValue log_messages_;
+ // TODO(skaslev) Remove this after all legacy s/w rendering paths are removed.
+ // Then use_software_compositor_ will be implicitly always true.
+ bool use_software_compositor_;
+
bool use_swiftshader_;
base::FilePath swiftshader_path_;
diff --git a/content/browser/renderer_host/image_transport_factory.cc b/content/browser/renderer_host/image_transport_factory.cc
index 1e566ac..79f3836 100644
--- a/content/browser/renderer_host/image_transport_factory.cc
+++ b/content/browser/renderer_host/image_transport_factory.cc
@@ -747,7 +747,7 @@ void ImageTransportFactory::Initialize() {
}
if (ui::IsTestCompositorEnabled()) {
g_factory = new NoTransportFactory(new ui::TestContextFactory);
- } else if (command_line->HasSwitch(switches::kUIEnableSoftwareCompositing)) {
+ } else if (command_line->HasSwitch(switches::kDisableGpu)) {
g_factory = new NoTransportFactory(new SoftwareContextFactory);
} else {
g_factory = new GpuProcessTransportFactory;
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 399de15..20db99f 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -871,7 +871,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
// Allow this to be set when invoking the browser and relayed along.
switches::kEnableSandboxLogging,
#endif
- switches::kEnableSoftwareCompositingGLAdapter,
+ switches::kEnableSoftwareCompositing,
switches::kEnableStatsTable,
switches::kEnableThreadedCompositing,
switches::kEnableCompositingForFixedPosition,
diff --git a/content/browser/renderer_host/render_widget_host_view_guest.cc b/content/browser/renderer_host/render_widget_host_view_guest.cc
index 6f02367..6919a58 100644
--- a/content/browser/renderer_host/render_widget_host_view_guest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_guest.cc
@@ -169,6 +169,17 @@ void RenderWidgetHostViewGuest::AcceleratedSurfacePostSubBuffer(
void RenderWidgetHostViewGuest::OnSwapCompositorFrame(
scoped_ptr<cc::CompositorFrame> frame) {
+ // TODO(skaslev) Implement this path for software compositing.
+ // For now we immediately acknowledge software frames to avoid
+ // blocking the renderer and breaking unittests.
+ if (frame->software_frame_data) {
+ cc::CompositorFrameAck ack;
+ ack.last_dib_id = frame->software_frame_data->dib_id;
+ RenderWidgetHostImpl::SendSwapCompositorFrameAck(
+ host_->GetRoutingID(), host_->GetProcess()->GetID(), ack);
+ return;
+ }
+
guest_->clear_damage_buffer();
guest_->SendMessageToEmbedder(
new BrowserPluginMsg_CompositorFrameSwapped(