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(); |