Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(520)

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 99253004: cc: Allow copy requests to provide a texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mailbox: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/test/test_web_graphics_context_3d.cc ('k') | cc/trees/layer_tree_host_unittest_copyrequest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_unittest.cc
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index fa70d9581d2b9bfca00b1566dbe7307e3d3a8e67..9b301e2cf77bb3d2705639e5a4a2b5ec869009fc 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -2927,660 +2927,6 @@ class LayerTreeHostTestIOSurfaceDrawing : public LayerTreeHostTest {
SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
LayerTreeHostTestIOSurfaceDrawing);
-class LayerTreeHostTestAsyncReadback : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root = FakeContentLayer::Create(&client_);
- root->SetBounds(gfx::Size(20, 20));
-
- child = FakeContentLayer::Create(&client_);
- child->SetBounds(gfx::Size(10, 10));
- root->AddChild(child);
-
- layer_tree_host()->SetRootLayer(root);
- LayerTreeHostTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- PostSetNeedsCommitToMainThread();
- }
-
- virtual void DidCommitAndDrawFrame() OVERRIDE {
- WaitForCallback();
- }
-
- void WaitForCallback() {
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(
- &LayerTreeHostTestAsyncReadback::NextStep,
- base::Unretained(this)));
- }
-
- void NextStep() {
- int frame = layer_tree_host()->source_frame_number();
- switch (frame) {
- case 1:
- child->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
- base::Bind(&LayerTreeHostTestAsyncReadback::CopyOutputCallback,
- base::Unretained(this))));
- EXPECT_EQ(0u, callbacks_.size());
- break;
- case 2:
- if (callbacks_.size() < 1u) {
- WaitForCallback();
- return;
- }
- EXPECT_EQ(1u, callbacks_.size());
- EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[0].ToString());
-
- child->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
- base::Bind(&LayerTreeHostTestAsyncReadback::CopyOutputCallback,
- base::Unretained(this))));
- root->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
- base::Bind(&LayerTreeHostTestAsyncReadback::CopyOutputCallback,
- base::Unretained(this))));
- child->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
- base::Bind(&LayerTreeHostTestAsyncReadback::CopyOutputCallback,
- base::Unretained(this))));
- EXPECT_EQ(1u, callbacks_.size());
- break;
- case 3:
- if (callbacks_.size() < 4u) {
- WaitForCallback();
- return;
- }
- EXPECT_EQ(4u, callbacks_.size());
- // The child was copied to a bitmap and passed back twice.
- EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[1].ToString());
- EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[2].ToString());
- // The root was copied to a bitmap and passed back also.
- EXPECT_EQ(gfx::Size(20, 20).ToString(), callbacks_[3].ToString());
- EndTest();
- break;
- }
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_TRUE(result->HasBitmap());
- scoped_ptr<SkBitmap> bitmap = result->TakeBitmap().Pass();
- EXPECT_EQ(result->size().ToString(),
- gfx::Size(bitmap->width(), bitmap->height()).ToString());
- callbacks_.push_back(result->size());
- }
-
- virtual void AfterTest() OVERRIDE {
- EXPECT_EQ(4u, callbacks_.size());
- }
-
- virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
- OVERRIDE {
- scoped_ptr<FakeOutputSurface> output_surface;
- if (use_gl_renderer_) {
- output_surface = FakeOutputSurface::Create3d().Pass();
- } else {
- output_surface = FakeOutputSurface::CreateSoftware(
- make_scoped_ptr(new SoftwareOutputDevice)).Pass();
- }
- return output_surface.PassAs<OutputSurface>();
- }
-
- bool use_gl_renderer_;
- std::vector<gfx::Size> callbacks_;
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root;
- scoped_refptr<FakeContentLayer> child;
-};
-
-// Readback can't be done with a delegating renderer.
-TEST_F(LayerTreeHostTestAsyncReadback, GLRenderer_RunSingleThread) {
- use_gl_renderer_ = true;
- RunTest(false, false, false);
-}
-
-TEST_F(LayerTreeHostTestAsyncReadback,
- GLRenderer_RunMultiThread_MainThreadPainting) {
- use_gl_renderer_ = true;
- RunTest(true, false, false);
-}
-
-TEST_F(LayerTreeHostTestAsyncReadback, SoftwareRenderer_RunSingleThread) {
- use_gl_renderer_ = false;
- RunTest(false, false, false);
-}
-
-TEST_F(LayerTreeHostTestAsyncReadback,
- SoftwareRenderer_RunMultiThread_MainThreadPainting) {
- use_gl_renderer_ = false;
- RunTest(true, false, false);
-}
-
-class LayerTreeHostTestAsyncReadbackLayerDestroyed : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- main_destroyed_ = FakeContentLayer::Create(&client_);
- main_destroyed_->SetBounds(gfx::Size(15, 15));
- root_->AddChild(main_destroyed_);
-
- impl_destroyed_ = FakeContentLayer::Create(&client_);
- impl_destroyed_->SetBounds(gfx::Size(10, 10));
- root_->AddChild(impl_destroyed_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- callback_count_ = 0;
- PostSetNeedsCommitToMainThread();
- }
-
- virtual void DidCommit() OVERRIDE {
- int frame = layer_tree_host()->source_frame_number();
- switch (frame) {
- case 1:
- main_destroyed_->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestAsyncReadbackLayerDestroyed::
- CopyOutputCallback,
- base::Unretained(this))));
- impl_destroyed_->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestAsyncReadbackLayerDestroyed::
- CopyOutputCallback,
- base::Unretained(this))));
- EXPECT_EQ(0, callback_count_);
-
- // Destroy the main thread layer right away.
- main_destroyed_->RemoveFromParent();
- main_destroyed_ = NULL;
-
- // Should callback with a NULL bitmap.
- EXPECT_EQ(1, callback_count_);
-
- // Prevent drawing so we can't make a copy of the impl_destroyed layer.
- layer_tree_host()->SetViewportSize(gfx::Size());
- break;
- case 2:
- // Flush the message loops and make sure the callbacks run.
- layer_tree_host()->SetNeedsCommit();
- break;
- case 3:
- // No drawing means no readback yet.
- EXPECT_EQ(1, callback_count_);
-
- // Destroy the impl thread layer.
- impl_destroyed_->RemoveFromParent();
- impl_destroyed_ = NULL;
-
- // No callback yet because it's on the impl side.
- EXPECT_EQ(1, callback_count_);
- break;
- case 4:
- // Flush the message loops and make sure the callbacks run.
- layer_tree_host()->SetNeedsCommit();
- break;
- case 5:
- // We should get another callback with a NULL bitmap.
- EXPECT_EQ(2, callback_count_);
- EndTest();
- break;
- }
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_TRUE(result->IsEmpty());
- ++callback_count_;
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- int callback_count_;
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> main_destroyed_;
- scoped_refptr<FakeContentLayer> impl_destroyed_;
-};
-
-SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncReadbackLayerDestroyed);
-
-class LayerTreeHostTestAsyncReadbackInHiddenSubtree : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- grand_parent_layer_ = FakeContentLayer::Create(&client_);
- grand_parent_layer_->SetBounds(gfx::Size(15, 15));
- root_->AddChild(grand_parent_layer_);
-
- // parent_layer_ owns a render surface.
- parent_layer_ = FakeContentLayer::Create(&client_);
- parent_layer_->SetBounds(gfx::Size(15, 15));
- parent_layer_->SetForceRenderSurface(true);
- grand_parent_layer_->AddChild(parent_layer_);
-
- copy_layer_ = FakeContentLayer::Create(&client_);
- copy_layer_->SetBounds(gfx::Size(10, 10));
- parent_layer_->AddChild(copy_layer_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- void AddCopyRequest(Layer* layer) {
- layer->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestAsyncReadbackInHiddenSubtree::CopyOutputCallback,
- base::Unretained(this))));
- }
-
- virtual void BeginTest() OVERRIDE {
- callback_count_ = 0;
- PostSetNeedsCommitToMainThread();
-
- AddCopyRequest(copy_layer_.get());
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_EQ(copy_layer_->bounds().ToString(), result->size().ToString());
- ++callback_count_;
-
- switch (callback_count_) {
- case 1:
- // Hide the copy request layer.
- grand_parent_layer_->SetHideLayerAndSubtree(false);
- parent_layer_->SetHideLayerAndSubtree(false);
- copy_layer_->SetHideLayerAndSubtree(true);
- AddCopyRequest(copy_layer_.get());
- break;
- case 2:
- // Hide the copy request layer's parent only.
- grand_parent_layer_->SetHideLayerAndSubtree(false);
- parent_layer_->SetHideLayerAndSubtree(true);
- copy_layer_->SetHideLayerAndSubtree(false);
- AddCopyRequest(copy_layer_.get());
- break;
- case 3:
- // Hide the copy request layer's grand parent only.
- grand_parent_layer_->SetHideLayerAndSubtree(true);
- parent_layer_->SetHideLayerAndSubtree(false);
- copy_layer_->SetHideLayerAndSubtree(false);
- AddCopyRequest(copy_layer_.get());
- break;
- case 4:
- // Hide the copy request layer's parent and grandparent.
- grand_parent_layer_->SetHideLayerAndSubtree(true);
- parent_layer_->SetHideLayerAndSubtree(true);
- copy_layer_->SetHideLayerAndSubtree(false);
- AddCopyRequest(copy_layer_.get());
- break;
- case 5:
- // Hide the copy request layer as well as its parent and grandparent.
- grand_parent_layer_->SetHideLayerAndSubtree(true);
- parent_layer_->SetHideLayerAndSubtree(true);
- copy_layer_->SetHideLayerAndSubtree(true);
- AddCopyRequest(copy_layer_.get());
- break;
- case 6:
- EndTest();
- break;
- }
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- int callback_count_;
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> grand_parent_layer_;
- scoped_refptr<FakeContentLayer> parent_layer_;
- scoped_refptr<FakeContentLayer> copy_layer_;
-};
-
-// No output to copy for delegated renderers.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(
- LayerTreeHostTestAsyncReadbackInHiddenSubtree);
-
-class LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest
- : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- grand_parent_layer_ = FakeContentLayer::Create(&client_);
- grand_parent_layer_->SetBounds(gfx::Size(15, 15));
- grand_parent_layer_->SetHideLayerAndSubtree(true);
- root_->AddChild(grand_parent_layer_);
-
- // parent_layer_ owns a render surface.
- parent_layer_ = FakeContentLayer::Create(&client_);
- parent_layer_->SetBounds(gfx::Size(15, 15));
- parent_layer_->SetForceRenderSurface(true);
- grand_parent_layer_->AddChild(parent_layer_);
-
- copy_layer_ = FakeContentLayer::Create(&client_);
- copy_layer_->SetBounds(gfx::Size(10, 10));
- parent_layer_->AddChild(copy_layer_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- did_draw_ = false;
- PostSetNeedsCommitToMainThread();
-
- copy_layer_->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest::
- CopyOutputCallback,
- base::Unretained(this))));
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_EQ(copy_layer_->bounds().ToString(), result->size().ToString());
- EndTest();
- }
-
- virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
- Renderer* renderer = host_impl->renderer();
-
- LayerImpl* root = host_impl->active_tree()->root_layer();
- LayerImpl* grand_parent = root->children()[0];
- LayerImpl* parent = grand_parent->children()[0];
- LayerImpl* copy_layer = parent->children()[0];
-
- // |parent| owns a surface, but it was hidden and not part of the copy
- // request so it should not allocate any resource.
- EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting(
- parent->render_surface()->RenderPassId()));
-
- // |copy_layer| should have been rendered to a texture since it was needed
- // for a copy request.
- EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting(
- copy_layer->render_surface()->RenderPassId()));
-
- did_draw_ = true;
- }
-
- virtual void AfterTest() OVERRIDE { EXPECT_TRUE(did_draw_); }
-
- FakeContentLayerClient client_;
- bool did_draw_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> grand_parent_layer_;
- scoped_refptr<FakeContentLayer> parent_layer_;
- scoped_refptr<FakeContentLayer> copy_layer_;
-};
-
-// No output to copy for delegated renderers.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
- LayerTreeHostTestHiddenSurfaceNotAllocatedForSubtreeCopyRequest);
-
-class LayerTreeHostTestAsyncReadbackClippedOut : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- parent_layer_ = FakeContentLayer::Create(&client_);
- parent_layer_->SetBounds(gfx::Size(15, 15));
- parent_layer_->SetMasksToBounds(true);
- root_->AddChild(parent_layer_);
-
- copy_layer_ = FakeContentLayer::Create(&client_);
- copy_layer_->SetPosition(gfx::Point(15, 15));
- copy_layer_->SetBounds(gfx::Size(10, 10));
- parent_layer_->AddChild(copy_layer_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- PostSetNeedsCommitToMainThread();
-
- copy_layer_->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestAsyncReadbackClippedOut::CopyOutputCallback,
- base::Unretained(this))));
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- // We should still get a callback with no output if the copy requested layer
- // was completely clipped away.
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_EQ(gfx::Size().ToString(), result->size().ToString());
- EndTest();
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> parent_layer_;
- scoped_refptr<FakeContentLayer> copy_layer_;
-};
-
-// No output to copy for delegated renderers.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
- LayerTreeHostTestAsyncReadbackClippedOut);
-
-class LayerTreeHostTestAsyncTwoReadbacksWithoutDraw : public LayerTreeHostTest {
- protected:
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- copy_layer_ = FakeContentLayer::Create(&client_);
- copy_layer_->SetBounds(gfx::Size(10, 10));
- root_->AddChild(copy_layer_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- void AddCopyRequest(Layer* layer) {
- layer->RequestCopyOfOutput(
- CopyOutputRequest::CreateBitmapRequest(base::Bind(
- &LayerTreeHostTestAsyncTwoReadbacksWithoutDraw::CopyOutputCallback,
- base::Unretained(this))));
- }
-
- virtual void BeginTest() OVERRIDE {
- saw_copy_request_ = false;
- callback_count_ = 0;
- PostSetNeedsCommitToMainThread();
-
- // Prevent drawing.
- layer_tree_host()->SetViewportSize(gfx::Size(0, 0));
-
- AddCopyRequest(copy_layer_.get());
- }
-
- virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
- if (impl->active_tree()->source_frame_number() == 0) {
- LayerImpl* root = impl->active_tree()->root_layer();
- EXPECT_TRUE(root->children()[0]->HasCopyRequest());
- saw_copy_request_ = true;
- }
- }
-
- virtual void DidCommit() OVERRIDE {
- if (layer_tree_host()->source_frame_number() == 1) {
- // Allow drawing.
- layer_tree_host()->SetViewportSize(gfx::Size(root_->bounds()));
-
- AddCopyRequest(copy_layer_.get());
- }
- }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_EQ(copy_layer_->bounds().ToString(), result->size().ToString());
- ++callback_count_;
-
- if (callback_count_ == 2)
- EndTest();
- }
-
- virtual void AfterTest() OVERRIDE { EXPECT_TRUE(saw_copy_request_); }
-
- bool saw_copy_request_;
- int callback_count_;
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> copy_layer_;
-};
-
-// No output to copy for delegated renderers.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(
- LayerTreeHostTestAsyncTwoReadbacksWithoutDraw);
-
-class LayerTreeHostTestAsyncReadbackLostOutputSurface
- : public LayerTreeHostTest {
- protected:
- virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
- OVERRIDE {
- if (!first_context_provider_.get()) {
- first_context_provider_ = TestContextProvider::Create();
- return FakeOutputSurface::Create3d(first_context_provider_)
- .PassAs<OutputSurface>();
- }
-
- EXPECT_FALSE(second_context_provider_.get());
- second_context_provider_ = TestContextProvider::Create();
- return FakeOutputSurface::Create3d(second_context_provider_)
- .PassAs<OutputSurface>();
- }
-
- virtual void SetupTree() OVERRIDE {
- root_ = FakeContentLayer::Create(&client_);
- root_->SetBounds(gfx::Size(20, 20));
-
- copy_layer_ = FakeContentLayer::Create(&client_);
- copy_layer_->SetBounds(gfx::Size(10, 10));
- root_->AddChild(copy_layer_);
-
- layer_tree_host()->SetRootLayer(root_);
- LayerTreeHostTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
-
- void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
- EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- EXPECT_EQ(gfx::Size(10, 10).ToString(), result->size().ToString());
- EXPECT_TRUE(result->HasTexture());
-
- // Save the result for later.
- EXPECT_FALSE(result_);
- result_ = result.Pass();
-
- // Post a commit to lose the output surface.
- layer_tree_host()->SetNeedsCommit();
- }
-
- virtual void DidCommitAndDrawFrame() OVERRIDE {
- switch (layer_tree_host()->source_frame_number()) {
- case 1:
- // The layers have been pushed to the impl side. The layer textures have
- // been allocated.
-
- // Request a copy of the layer. This will use another texture.
- copy_layer_->RequestCopyOfOutput(
- CopyOutputRequest::CreateRequest(base::Bind(
- &LayerTreeHostTestAsyncReadbackLostOutputSurface::
- CopyOutputCallback,
- base::Unretained(this))));
- break;
- case 4:
- // With SingleThreadProxy it takes two commits to finally swap after a
- // context loss.
- case 5:
- // Now destroy the CopyOutputResult, releasing the texture inside back
- // to the compositor.
- EXPECT_TRUE(result_);
- result_.reset();
-
- // Check that it is released.
- ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&LayerTreeHostTestAsyncReadbackLostOutputSurface::
- CheckNumTextures,
- base::Unretained(this),
- num_textures_after_loss_ - 1));
- break;
- }
- }
-
- virtual void SwapBuffersOnThread(LayerTreeHostImpl *impl, bool result)
- OVERRIDE {
- switch (impl->active_tree()->source_frame_number()) {
- case 0:
- // The layers have been drawn, so their textures have been allocated.
- EXPECT_FALSE(result_);
- num_textures_without_readback_ =
- first_context_provider_->TestContext3d()->NumTextures();
- break;
- case 1:
- // We did a readback, so there will be a readback texture around now.
- EXPECT_LT(num_textures_without_readback_,
- first_context_provider_->TestContext3d()->NumTextures());
- break;
- case 2:
- // The readback texture is collected.
- EXPECT_TRUE(result_);
-
- // Lose the output surface.
- first_context_provider_->TestContext3d()->loseContextCHROMIUM(
- GL_GUILTY_CONTEXT_RESET_ARB,
- GL_INNOCENT_CONTEXT_RESET_ARB);
- break;
- case 3:
- // With SingleThreadProxy it takes two commits to finally swap after a
- // context loss.
- case 4:
- // The output surface has been recreated.
- EXPECT_TRUE(second_context_provider_.get());
-
- num_textures_after_loss_ =
- first_context_provider_->TestContext3d()->NumTextures();
- break;
- }
- }
-
- void CheckNumTextures(size_t expected_num_textures) {
- EXPECT_EQ(expected_num_textures,
- first_context_provider_->TestContext3d()->NumTextures());
- EndTest();
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- scoped_refptr<TestContextProvider> first_context_provider_;
- scoped_refptr<TestContextProvider> second_context_provider_;
- size_t num_textures_without_readback_;
- size_t num_textures_after_loss_;
- FakeContentLayerClient client_;
- scoped_refptr<FakeContentLayer> root_;
- scoped_refptr<FakeContentLayer> copy_layer_;
- scoped_ptr<CopyOutputResult> result_;
-};
-
-// No output to copy for delegated renderers.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(
- LayerTreeHostTestAsyncReadbackLostOutputSurface);
-
class LayerTreeHostTestNumFramesPending : public LayerTreeHostTest {
public:
virtual void BeginTest() OVERRIDE {
« no previous file with comments | « cc/test/test_web_graphics_context_3d.cc ('k') | cc/trees/layer_tree_host_unittest_copyrequest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698