Chromium Code Reviews| Index: content/renderer/gpu/render_widget_compositor_unittest.cc |
| diff --git a/content/renderer/gpu/render_widget_compositor_unittest.cc b/content/renderer/gpu/render_widget_compositor_unittest.cc |
| index 3f7f33750f4ede172a312a3a1bb3e1f93b640155..f6b752649615ba41da216b31890e06087e6133b7 100644 |
| --- a/content/renderer/gpu/render_widget_compositor_unittest.cc |
| +++ b/content/renderer/gpu/render_widget_compositor_unittest.cc |
| @@ -127,19 +127,37 @@ class RenderWidgetCompositorOutputSurface : public RenderWidgetCompositor { |
| using RenderWidgetCompositor::Initialize; |
| + void FinalizeSettings(cc::LayerTreeSettings* settings) const override { |
| + // Required in order to call the synchronous LayerTreeHost::Composite. |
| + settings->single_thread_proxy_scheduler = false; |
|
danakj
2015/01/27 01:46:37
You could add a function to CompositorDependencies
enne (OOO)
2015/01/27 01:59:42
Done. PTAL.
|
| + } |
| + |
| scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback) { |
| EXPECT_EQ(num_requests_since_last_success_ > |
| OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK, |
| fallback); |
| last_create_was_fallback_ = fallback; |
| bool success = num_failures_ >= num_failures_before_success_; |
| - if (success) |
| - return cc::FakeOutputSurface::Create3d(); |
| + if (success) { |
| + scoped_ptr<cc::TestWebGraphicsContext3D> context = |
| + cc::TestWebGraphicsContext3D::Create(); |
| + // Image support required for synchronous compositing. |
| + context->set_support_image(true); |
| + return cc::FakeOutputSurface::Create3d(context.Pass()); |
| + } |
| return use_null_output_surface_ |
| ? nullptr |
| : make_scoped_ptr(new cc::FailureOutputSurface(false)); |
| } |
| + // Force a new output surface to be created. |
| + void SynchronousComposite() { |
| + layer_tree_host()->DidLoseOutputSurface(); |
| + |
| + base::TimeTicks some_time; |
| + layer_tree_host()->Composite(some_time); |
| + } |
| + |
| void RequestNewOutputSurface() override { |
| ++num_requests_; |
| ++num_requests_since_last_success_; |
| @@ -157,8 +175,12 @@ class RenderWidgetCompositorOutputSurface : public RenderWidgetCompositor { |
| } else { |
| num_requests_since_last_success_ = 0; |
| RenderWidgetCompositor::DidInitializeOutputSurface(); |
| - layer_tree_host()->DidLoseOutputSurface(); |
| - RequestNewOutputSurface(); |
| + // Post the synchronous composite task so that it is not called |
| + // reentrantly as a part of RequestNewOutputSurface. |
| + base::MessageLoop::current()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&RenderWidgetCompositorOutputSurface::SynchronousComposite, |
| + base::Unretained(this))); |
| } |
| } |
| @@ -228,9 +250,10 @@ class RenderWidgetCompositorOutputSurfaceTest : public testing::Test { |
| render_widget_compositor_->SetUp( |
| use_null_output_surface, num_failures_before_success, |
| expected_successes, expected_fallback_succeses); |
| + render_widget_compositor_->StartCompositor(); |
| base::MessageLoop::current()->PostTask( |
| FROM_HERE, |
| - base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface, |
| + base::Bind(&RenderWidgetCompositorOutputSurface::SynchronousComposite, |
| base::Unretained(render_widget_compositor_.get()))); |
| base::MessageLoop::current()->Run(); |
| render_widget_compositor_->AfterTest(); |