diff options
author | skaslev@chromium.org <skaslev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 21:39:49 +0000 |
---|---|---|
committer | skaslev@chromium.org <skaslev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 21:39:49 +0000 |
commit | 3b2b7677a27b49d675e28e1447b377e5240001ce (patch) | |
tree | 3b7b51d5aaed035d1ad141441984e4a9e040265f /content/browser | |
parent | 6f9cb61fcd9e5b76b105bcfaed590f756f8a86b9 (diff) | |
download | chromium_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')
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( |