Index: cc/trees/layer_tree_host_unittest_context.cc |
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc |
index 17b9f1dd173770a2833eda5090982634fd6d8336..c484ae651d7afc37e8021d25adb4a1970d6d0cd1 100644 |
--- a/cc/trees/layer_tree_host_unittest_context.cc |
+++ b/cc/trees/layer_tree_host_unittest_context.cc |
@@ -76,39 +76,29 @@ class LayerTreeHostContextTest : public LayerTreeTest { |
context3d_ = nullptr; |
} |
- virtual std::unique_ptr<TestWebGraphicsContext3D> CreateContext3d() { |
danakj
2016/10/06 20:50:35
Oh cool nothing overrides this anymore.
|
- return TestWebGraphicsContext3D::Create(); |
- } |
- |
std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
scoped_refptr<ContextProvider> compositor_context_provider, |
scoped_refptr<ContextProvider> worker_context_provider) override { |
- if (times_to_fail_create_) { |
- --times_to_fail_create_; |
- ExpectCreateToFail(); |
- auto test_compositor_context_provider = TestContextProvider::Create(); |
- test_compositor_context_provider->UnboundTestContext3d() |
- ->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
- GL_INNOCENT_CONTEXT_RESET_ARB); |
- compositor_context_provider = std::move(test_compositor_context_provider); |
- } |
- return LayerTreeTest::CreateCompositorFrameSink( |
- std::move(compositor_context_provider), |
- std::move(worker_context_provider)); |
- } |
+ base::AutoLock lock(context3d_lock_); |
- std::unique_ptr<OutputSurface> CreateDisplayOutputSurface( |
- scoped_refptr<ContextProvider> compositor_context_provider) override { |
- std::unique_ptr<TestWebGraphicsContext3D> context3d = CreateContext3d(); |
+ std::unique_ptr<TestWebGraphicsContext3D> context3d = |
danakj
2016/10/06 20:50:35
nit: compositor_context3d
sunnyps
2016/10/06 21:31:53
Done.
|
+ TestWebGraphicsContext3D::Create(); |
if (context_should_support_io_surface_) { |
context3d->set_have_extension_io_surface(true); |
context3d->set_have_extension_egl_image(true); |
} |
- |
- base::AutoLock lock(context3d_lock_); |
context3d_ = context3d.get(); |
- return LayerTreeTest::CreateDisplayOutputSurface( |
- TestContextProvider::Create(std::move(context3d))); |
+ |
+ if (times_to_fail_create_) { |
+ --times_to_fail_create_; |
+ ExpectCreateToFail(); |
+ context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
+ GL_INNOCENT_CONTEXT_RESET_ARB); |
+ } |
+ |
+ return LayerTreeTest::CreateCompositorFrameSink( |
+ TestContextProvider::Create(std::move(context3d)), |
+ std::move(worker_context_provider)); |
} |
DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
@@ -484,7 +474,9 @@ class FailedCreateDoesNotCreateExtraCompositorFrameSink |
: public LayerTreeHostContextTest { |
public: |
FailedCreateDoesNotCreateExtraCompositorFrameSink() |
- : LayerTreeHostContextTest(), num_requests_(0), has_failed_(false) {} |
+ : LayerTreeHostContextTest(), num_requests_(0), has_failed_(false) { |
+ times_to_fail_create_ = 1; |
+ } |
void InitializeSettings(LayerTreeSettings* settings) override { |
settings->single_thread_proxy_scheduler = false; |
@@ -503,19 +495,6 @@ class FailedCreateDoesNotCreateExtraCompositorFrameSink |
LayerTreeHostContextTest::RequestNewCompositorFrameSink(); |
} |
- std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
- scoped_refptr<ContextProvider> compositor_context_provider, |
- scoped_refptr<ContextProvider> worker_context_provider) override { |
- ExpectCreateToFail(); |
- auto test_compositor_context_provider = TestContextProvider::Create(); |
- test_compositor_context_provider->UnboundTestContext3d() |
- ->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
- GL_INNOCENT_CONTEXT_RESET_ARB); |
- return LayerTreeTest::CreateCompositorFrameSink( |
- std::move(test_compositor_context_provider), |
- std::move(worker_context_provider)); |
- } |
- |
void BeginTest() override { |
// First composite tries to create a surface. |
layer_tree_host()->Composite(base::TimeTicks::FromInternalValue(1)); |
@@ -729,7 +708,7 @@ class LayerTreeHostContextTestLostContextAndEvictTextures |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, |
base::Bind(&LayerTreeHostContextTestLostContextAndEvictTextures:: |
- EvictTexturesOnImplThread, |
+ EvictTexturesOnImplThread, |
base::Unretained(this))); |
} else { |
DebugScopedSetImplThread impl(task_runner_provider()); |
@@ -906,16 +885,12 @@ class LayerTreeHostContextTestDontUseLostResources |
std::unique_ptr<RenderPass> pass_for_quad = RenderPass::Create(); |
pass_for_quad->SetNew( |
// AppendOneOfEveryQuadType() makes a RenderPass quad with this id. |
- RenderPassId(2, 1), |
- gfx::Rect(0, 0, 10, 10), |
- gfx::Rect(0, 0, 10, 10), |
+ RenderPassId(2, 1), gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10), |
gfx::Transform()); |
std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
- pass->SetNew(RenderPassId(1, 1), |
- gfx::Rect(0, 0, 10, 10), |
- gfx::Rect(0, 0, 10, 10), |
- gfx::Transform()); |
+ pass->SetNew(RenderPassId(1, 1), gfx::Rect(0, 0, 10, 10), |
+ gfx::Rect(0, 0, 10, 10), gfx::Transform()); |
gpu::SyncToken mailbox_sync_token; |
AddOneOfEveryQuadType(pass.get(), child_resource_provider_.get(), |
RenderPassId(2, 1), &mailbox_sync_token); |
@@ -1198,9 +1173,8 @@ class UIResourceLostTest : public LayerTreeHostContextTest { |
void PostLoseContextToImplThread() { |
EXPECT_TRUE(layer_tree_host()->GetTaskRunnerProvider()->IsMainThread()); |
ImplThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&LayerTreeHostContextTest::LoseContext, |
- base::Unretained(this))); |
+ FROM_HERE, base::Bind(&LayerTreeHostContextTest::LoseContext, |
+ base::Unretained(this))); |
} |
protected: |
@@ -1591,9 +1565,7 @@ SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostEviction); |
class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
: public LayerTreeHostContextTest { |
protected: |
- void BeginTest() override { |
- PostSetNeedsCommitToMainThread(); |
- } |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
void WillBeginMainFrame() override { |
// Don't begin a frame with a lost surface. |
@@ -1641,5 +1613,48 @@ class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
SINGLE_AND_MULTI_THREAD_TEST_F( |
LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); |
+class LayerTreeHostContextTestLoseWorkerContextDuringPrepareTiles |
+ : public LayerTreeTest { |
+ protected: |
+ void SetupTree() override { |
+ // Paint non-solid color. |
danakj
2016/10/06 20:50:35
client_.set_fill_with_nonsolid_color(true) is less
sunnyps
2016/10/06 21:31:53
Done.
|
+ SkPaint paint; |
+ paint.setColor(SkColorSetARGB(100, 80, 200, 200)); |
+ client_.add_draw_rect(gfx::Rect(5, 5), paint); |
+ |
+ scoped_refptr<FakePictureLayer> picture_layer = |
+ FakePictureLayer::Create(&client_); |
+ picture_layer->SetBounds(gfx::Size(10, 20)); |
+ client_.set_bounds(picture_layer->bounds()); |
+ layer_tree()->SetRootLayer(picture_layer); |
+ |
+ LayerTreeTest::SetupTree(); |
+ } |
+ |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ void WillPrepareTilesOnThread(LayerTreeHostImpl* host_impl) override { |
+ ContextProvider::ScopedContextLock scoped_context( |
+ host_impl->compositor_frame_sink()->worker_context_provider()); |
+ gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL(); |
+ gl->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
danakj
2016/10/06 20:50:35
Can you leave some comments in this test saying wh
sunnyps
2016/10/06 21:31:53
Done.
|
+ GL_INNOCENT_CONTEXT_RESET_ARB); |
+ } |
+ |
+ void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
+ ++num_draws_; |
+ } |
+ |
+ void DidCommitAndDrawFrame() override { EndTest(); } |
+ |
+ void AfterTest() override { EXPECT_EQ(1, num_draws_); } |
+ |
+ FakeContentLayerClient client_; |
+ int num_draws_ = 0; |
+}; |
+ |
+MULTI_THREAD_TEST_F( |
+ LayerTreeHostContextTestLoseWorkerContextDuringPrepareTiles); |
+ |
} // namespace |
} // namespace cc |