summaryrefslogtreecommitdiffstats
path: root/ui/compositor
diff options
context:
space:
mode:
authorjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-08 09:33:44 +0000
committerjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-08 09:33:44 +0000
commitbdb68b9997cf50d1ad4803ca830ae4dc4530e502 (patch)
tree6acd291c6ff5c1c1c0a719ff0cd321ee2ae8095c /ui/compositor
parent683ef50ad3bd599cd09a52f11900cfd484fd3407 (diff)
downloadchromium_src-bdb68b9997cf50d1ad4803ca830ae4dc4530e502.zip
chromium_src-bdb68b9997cf50d1ad4803ca830ae4dc4530e502.tar.gz
chromium_src-bdb68b9997cf50d1ad4803ca830ae4dc4530e502.tar.bz2
Use software renderer for windows with an initial size less than 64x64
If the width or height of a window is less than 64 pixels then some AMD drivers have problems presenting from them, so composite those windows in software. BUG=286609 Review URL: https://codereview.chromium.org/59913008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233845 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/compositor')
-rw-r--r--ui/compositor/compositor.cc4
-rw-r--r--ui/compositor/compositor.h8
-rw-r--r--ui/compositor/layer_unittest.cc2
-rw-r--r--ui/compositor/test/test_compositor_host_win.cc2
-rw-r--r--ui/compositor/test/test_compositor_host_x11.cc2
5 files changed, 13 insertions, 5 deletions
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 43cee8d..e65855b 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -231,7 +231,8 @@ PendingSwap::~PendingSwap() {
namespace ui {
-Compositor::Compositor(gfx::AcceleratedWidget widget)
+Compositor::Compositor(bool use_software_renderer,
+ gfx::AcceleratedWidget widget)
: root_layer_(NULL),
widget_(widget),
posted_swaps_(new PostedSwapQueue()),
@@ -240,6 +241,7 @@ Compositor::Compositor(gfx::AcceleratedWidget widget)
last_ended_frame_(0),
next_draw_is_resize_(false),
disable_schedule_composite_(false),
+ use_software_renderer_(use_software_renderer),
compositor_lock_(NULL),
defer_draw_scheduling_(false),
waiting_on_compositing_end_(false),
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 662c47b..c3d79a4 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -223,7 +223,7 @@ class COMPOSITOR_EXPORT Compositor
NON_EXPORTED_BASE(public cc::LayerTreeHostSingleThreadClient),
public base::SupportsWeakPtr<Compositor> {
public:
- explicit Compositor(gfx::AcceleratedWidget widget);
+ Compositor(bool use_software_renderer, gfx::AcceleratedWidget widget);
virtual ~Compositor();
static void Initialize();
@@ -339,6 +339,10 @@ class COMPOSITOR_EXPORT Compositor
const cc::LayerTreeDebugState& GetLayerTreeDebugState() const;
void SetLayerTreeDebugState(const cc::LayerTreeDebugState& debug_state);
+ // Should the compositor use a software output device. If false, it may still
+ // use a software output device if no GPU is available.
+ bool use_software_renderer() const { return use_software_renderer_; }
+
private:
friend class base::RefCounted<Compositor>;
friend class CompositorLock;
@@ -377,6 +381,8 @@ class COMPOSITOR_EXPORT Compositor
bool disable_schedule_composite_;
+ bool use_software_renderer_;
+
CompositorLock* compositor_lock_;
// Prevent more than one draw from being scheduled.
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index 2d94d35..0c2f2e1 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -355,7 +355,7 @@ class LayerWithDelegateTest : public testing::Test {
bool allow_test_contexts = true;
InitializeContextFactoryForTests(allow_test_contexts);
Compositor::Initialize();
- compositor_.reset(new Compositor(gfx::kNullAcceleratedWidget));
+ compositor_.reset(new Compositor(false, gfx::kNullAcceleratedWidget));
compositor_->SetScaleAndSize(1.0f, gfx::Size(1000, 1000));
}
diff --git a/ui/compositor/test/test_compositor_host_win.cc b/ui/compositor/test/test_compositor_host_win.cc
index 5c7cdb4..140b0cd 100644
--- a/ui/compositor/test/test_compositor_host_win.cc
+++ b/ui/compositor/test/test_compositor_host_win.cc
@@ -16,7 +16,7 @@ class TestCompositorHostWin : public TestCompositorHost,
public:
TestCompositorHostWin(const gfx::Rect& bounds) {
Init(NULL, bounds);
- compositor_.reset(new ui::Compositor(hwnd()));
+ compositor_.reset(new ui::Compositor(false, hwnd()));
compositor_->SetScaleAndSize(1.0f, GetSize());
}
diff --git a/ui/compositor/test/test_compositor_host_x11.cc b/ui/compositor/test/test_compositor_host_x11.cc
index 4215e27..578df6a 100644
--- a/ui/compositor/test/test_compositor_host_x11.cc
+++ b/ui/compositor/test/test_compositor_host_x11.cc
@@ -69,7 +69,7 @@ void TestCompositorHostX11::Show() {
if (event.type == MapNotify && event.xmap.window == window_)
break;
}
- compositor_.reset(new ui::Compositor(window_));
+ compositor_.reset(new ui::Compositor(false, window_));
compositor_->SetScaleAndSize(1.0f, bounds_.size());
}