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

Unified Diff: cc/texture_layer_unittest.cc

Issue 12603013: Part 10 of cc/ directory shuffles: layers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months 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/texture_layer_impl.cc ('k') | cc/tiled_layer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/texture_layer_unittest.cc
diff --git a/cc/texture_layer_unittest.cc b/cc/texture_layer_unittest.cc
deleted file mode 100644
index a095ae32a9840f71b9e91dc4ed5e936b2744d08e..0000000000000000000000000000000000000000
--- a/cc/texture_layer_unittest.cc
+++ /dev/null
@@ -1,471 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "cc/texture_layer.h"
-
-#include <string>
-
-#include "base/callback.h"
-#include "cc/base/thread.h"
-#include "cc/test/fake_impl_proxy.h"
-#include "cc/test/fake_layer_tree_host_client.h"
-#include "cc/test/fake_layer_tree_host_impl.h"
-#include "cc/test/layer_tree_test_common.h"
-#include "cc/texture_layer_impl.h"
-#include "cc/trees/layer_tree_host.h"
-#include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/single_thread_proxy.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::Mock;
-using ::testing::_;
-using ::testing::AtLeast;
-using ::testing::AnyNumber;
-
-namespace cc {
-namespace {
-
-class MockLayerImplTreeHost : public LayerTreeHost {
- public:
- MockLayerImplTreeHost() : LayerTreeHost(&fake_client_, LayerTreeSettings()) {
- Initialize(scoped_ptr<Thread>(NULL));
- }
-
- MOCK_METHOD0(AcquireLayerTextures, void());
- MOCK_METHOD0(SetNeedsCommit, void());
-
- private:
- FakeLayerImplTreeHostClient fake_client_;
-};
-
-class TextureLayerTest : public testing::Test {
- public:
- TextureLayerTest() : host_impl_(&proxy_) {}
-
- protected:
- virtual void SetUp() {
- layer_tree_host_.reset(new MockLayerImplTreeHost);
- }
-
- virtual void TearDown() {
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AnyNumber());
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
-
- layer_tree_host_->SetRootLayer(NULL);
- layer_tree_host_.reset();
- }
-
- scoped_ptr<MockLayerImplTreeHost> layer_tree_host_;
- FakeImplProxy proxy_;
- FakeLayerTreeHostImpl host_impl_;
-};
-
-TEST_F(TextureLayerTest, SyncImplWhenChangingTextureId) {
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(NULL);
- ASSERT_TRUE(test_layer);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AnyNumber());
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
- layer_tree_host_->SetRootLayer(test_layer);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureId(1);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AtLeast(1));
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureId(2);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AtLeast(1));
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureId(0);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-}
-
-TEST_F(TextureLayerTest, SyncImplWhenDrawing) {
- gfx::RectF dirty_rect(0.f, 0.f, 1.f, 1.f);
-
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(NULL);
- ASSERT_TRUE(test_layer);
- scoped_ptr<TextureLayerImpl> impl_layer;
- impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- ASSERT_TRUE(impl_layer);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AnyNumber());
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
- layer_tree_host_->SetRootLayer(test_layer);
- test_layer->SetTextureId(1);
- test_layer->SetIsDrawable(true);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(1);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
- test_layer->WillModifyTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(1);
- test_layer->SetNeedsDisplayRect(dirty_rect);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(1);
- test_layer->PushPropertiesTo(impl_layer.get()); // fake commit
- test_layer->SetIsDrawable(false);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Verify that non-drawable layers don't signal the compositor,
- // except for the first draw after last commit, which must acquire
- // the texture.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(1);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
- test_layer->WillModifyTexture();
- test_layer->SetNeedsDisplayRect(dirty_rect);
- test_layer->PushPropertiesTo(impl_layer.get()); // fake commit
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Second draw with layer in non-drawable state: no texture
- // acquisition.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
- test_layer->WillModifyTexture();
- test_layer->SetNeedsDisplayRect(dirty_rect);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-}
-
-TEST_F(TextureLayerTest, SyncImplWhenRemovingFromTree) {
- scoped_refptr<Layer> root_layer = Layer::Create();
- ASSERT_TRUE(root_layer);
- scoped_refptr<Layer> child_layer = Layer::Create();
- ASSERT_TRUE(child_layer);
- root_layer->AddChild(child_layer);
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(NULL);
- ASSERT_TRUE(test_layer);
- test_layer->SetTextureId(0);
- child_layer->AddChild(test_layer);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AnyNumber());
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
- layer_tree_host_->SetRootLayer(root_layer);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->RemoveFromParent();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- child_layer->AddChild(test_layer);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureId(1);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AtLeast(1));
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->RemoveFromParent();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-}
-
-class MockMailboxCallback {
- public:
- MOCK_METHOD2(Release, void(const std::string& mailbox, unsigned sync_point));
-};
-
-struct CommonMailboxObjects {
- CommonMailboxObjects()
- : mailbox_name1_(64, '1'),
- mailbox_name2_(64, '2'),
- sync_point1_(1),
- sync_point2_(2) {
- release_mailbox1_ = base::Bind(&MockMailboxCallback::Release,
- base::Unretained(&mock_callback_),
- mailbox_name1_);
- release_mailbox2_ = base::Bind(&MockMailboxCallback::Release,
- base::Unretained(&mock_callback_),
- mailbox_name2_);
- gpu::Mailbox m1;
- m1.SetName(reinterpret_cast<const int8*>(mailbox_name1_.data()));
- mailbox1_ = TextureMailbox(m1, release_mailbox1_, sync_point1_);
- gpu::Mailbox m2;
- m2.SetName(reinterpret_cast<const int8*>(mailbox_name2_.data()));
- mailbox2_ = TextureMailbox(m2, release_mailbox2_, sync_point2_);
- }
-
- std::string mailbox_name1_;
- std::string mailbox_name2_;
- MockMailboxCallback mock_callback_;
- TextureMailbox::ReleaseCallback release_mailbox1_;
- TextureMailbox::ReleaseCallback release_mailbox2_;
- TextureMailbox mailbox1_;
- TextureMailbox mailbox2_;
- unsigned sync_point1_;
- unsigned sync_point2_;
-};
-
-class TextureLayerWithMailboxTest : public TextureLayerTest {
- protected:
- virtual void TearDown() {
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
- EXPECT_CALL(test_data_.mock_callback_,
- Release(test_data_.mailbox_name1_,
- test_data_.sync_point1_)).Times(1);
- TextureLayerTest::TearDown();
- }
-
- CommonMailboxObjects test_data_;
-};
-
-TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
- scoped_refptr<TextureLayer> test_layer = TextureLayer::CreateForMailbox();
- ASSERT_TRUE(test_layer);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
- layer_tree_host_->SetRootLayer(test_layer);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureMailbox(test_data_.mailbox1_);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- EXPECT_CALL(test_data_.mock_callback_,
- Release(test_data_.mailbox_name1_, test_data_.sync_point1_))
- .Times(1);
- test_layer->SetTextureMailbox(test_data_.mailbox2_);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- EXPECT_CALL(test_data_.mock_callback_,
- Release(test_data_.mailbox_name2_, test_data_.sync_point2_))
- .Times(1);
- test_layer->SetTextureMailbox(TextureMailbox());
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- // Test destructor.
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetTextureMailbox(test_data_.mailbox1_);
-}
-
-class TextureLayerImplWithMailboxThreadedCallback : public ThreadedTest {
- public:
- TextureLayerImplWithMailboxThreadedCallback()
- : callback_count_(0),
- commit_count_(0) {}
-
- // Make sure callback is received on main and doesn't block the impl thread.
- void ReleaseCallback(unsigned sync_point) {
- EXPECT_EQ(true, proxy()->IsMainThread());
- ++callback_count_;
- }
-
- void SetMailbox(char mailbox_char) {
- TextureMailbox mailbox(
- std::string(64, mailbox_char),
- base::Bind(
- &TextureLayerImplWithMailboxThreadedCallback::ReleaseCallback,
- base::Unretained(this)));
- layer_->SetTextureMailbox(mailbox);
- }
-
- virtual void beginTest() OVERRIDE {
- gfx::Size bounds(100, 100);
- root_ = Layer::Create();
- root_->SetAnchorPoint(gfx::PointF());
- root_->SetBounds(bounds);
-
- layer_ = TextureLayer::CreateForMailbox();
- layer_->SetIsDrawable(true);
- layer_->SetAnchorPoint(gfx::PointF());
- layer_->SetBounds(bounds);
-
- root_->AddChild(layer_);
- m_layerTreeHost->SetRootLayer(root_);
- m_layerTreeHost->SetViewportSize(bounds, bounds);
- SetMailbox('1');
- EXPECT_EQ(0, callback_count_);
-
- // Case #1: change mailbox before the commit. The old mailbox should be
- // released immediately.
- SetMailbox('2');
- EXPECT_EQ(1, callback_count_);
- postSetNeedsCommitToMainThread();
- }
-
- virtual void didCommit() OVERRIDE {
- ++commit_count_;
- switch (commit_count_) {
- case 1:
- // Case #2: change mailbox after the commit (and draw), where the
- // layer draws. The old mailbox should be released during the next
- // commit.
- SetMailbox('3');
- EXPECT_EQ(1, callback_count_);
- break;
- case 2:
- // Old mailbox was released, task was posted, but won't execute
- // until this didCommit returns.
- // TODO(piman): fix this.
- EXPECT_EQ(1, callback_count_);
- m_layerTreeHost->SetNeedsCommit();
- break;
- case 3:
- EXPECT_EQ(2, callback_count_);
- // Case #3: change mailbox when the layer doesn't draw. The old
- // mailbox should be released during the next commit.
- layer_->SetBounds(gfx::Size());
- SetMailbox('4');
- break;
- case 4:
- // Old mailbox was released, task was posted, but won't execute
- // until this didCommit returns.
- // TODO(piman): fix this.
- EXPECT_EQ(2, callback_count_);
- m_layerTreeHost->SetNeedsCommit();
- break;
- case 5:
- EXPECT_EQ(3, callback_count_);
- // Case #4: release mailbox that was committed but never drawn. The
- // old mailbox should be released during the next commit.
- layer_->SetTextureMailbox(TextureMailbox());
- break;
- case 6:
- // Old mailbox was released, task was posted, but won't execute
- // until this didCommit returns.
- // TODO(piman): fix this.
- EXPECT_EQ(3, callback_count_);
- m_layerTreeHost->SetNeedsCommit();
- break;
- case 7:
- EXPECT_EQ(4, callback_count_);
- endTest();
- break;
- default:
- NOTREACHED();
- break;
- }
- }
-
- virtual void afterTest() OVERRIDE {}
-
- private:
- int callback_count_;
- int commit_count_;
- scoped_refptr<Layer> root_;
- scoped_refptr<TextureLayer> layer_;
-};
-
-SINGLE_AND_MULTI_THREAD_TEST_F(TextureLayerImplWithMailboxThreadedCallback);
-
-class TextureLayerImplWithMailboxTest : public TextureLayerTest {
- protected:
- virtual void SetUp() {
- TextureLayerTest::SetUp();
- layer_tree_host_.reset(new MockLayerImplTreeHost);
- EXPECT_TRUE(host_impl_.InitializeRenderer(createFakeOutputSurface()));
- }
-
- CommonMailboxObjects test_data_;
-};
-
-TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
- host_impl_.CreatePendingTree();
- scoped_ptr<TextureLayerImpl> pending_layer;
- pending_layer = TextureLayerImpl::Create(host_impl_.pending_tree(), 1, true);
- ASSERT_TRUE(pending_layer);
-
- scoped_ptr<LayerImpl> activeLayer(
- pending_layer->CreateLayerImpl(host_impl_.active_tree()));
- ASSERT_TRUE(activeLayer);
-
- pending_layer->SetTextureMailbox(test_data_.mailbox1_);
-
- // Test multiple commits without an activation.
- EXPECT_CALL(test_data_.mock_callback_,
- Release(test_data_.mailbox_name1_, test_data_.sync_point1_))
- .Times(1);
- pending_layer->SetTextureMailbox(test_data_.mailbox2_);
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- // Test callback after activation.
- pending_layer->PushPropertiesTo(activeLayer.get());
- activeLayer->DidBecomeActive();
-
- EXPECT_CALL(test_data_.mock_callback_, Release(_, _)).Times(0);
- pending_layer->SetTextureMailbox(test_data_.mailbox1_);
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- EXPECT_CALL(test_data_.mock_callback_, Release(test_data_.mailbox_name2_, _))
- .Times(1);
- pending_layer->PushPropertiesTo(activeLayer.get());
- activeLayer->DidBecomeActive();
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- // Test resetting the mailbox.
- EXPECT_CALL(test_data_.mock_callback_, Release(test_data_.mailbox_name1_, _))
- .Times(1);
- pending_layer->SetTextureMailbox(TextureMailbox());
- pending_layer->PushPropertiesTo(activeLayer.get());
- activeLayer->DidBecomeActive();
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
- // Test destructor.
- EXPECT_CALL(test_data_.mock_callback_,
- Release(test_data_.mailbox_name1_, test_data_.sync_point1_))
- .Times(1);
- pending_layer->SetTextureMailbox(test_data_.mailbox1_);
-}
-
-TEST_F(TextureLayerImplWithMailboxTest,
- TestDestructorCallbackOnCreatedResource) {
- scoped_ptr<TextureLayerImpl> impl_layer;
- impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
- ASSERT_TRUE(impl_layer);
-
- EXPECT_CALL(test_data_.mock_callback_, Release(test_data_.mailbox_name1_, _))
- .Times(1);
- impl_layer->SetTextureMailbox(test_data_.mailbox1_);
- impl_layer->WillDraw(host_impl_.active_tree()->resource_provider());
- impl_layer->DidDraw(host_impl_.active_tree()->resource_provider());
- impl_layer->SetTextureMailbox(TextureMailbox());
-}
-
-TEST_F(TextureLayerImplWithMailboxTest, TestCallbackOnInUseResource) {
- ResourceProvider* provider = host_impl_.active_tree()->resource_provider();
- ResourceProvider::ResourceId id =
- provider->CreateResourceFromTextureMailbox(test_data_.mailbox1_);
- provider->AllocateForTesting(id);
-
- // Transfer some resources to the parent.
- ResourceProvider::ResourceIdArray resource_ids_to_transfer;
- resource_ids_to_transfer.push_back(id);
- TransferableResourceArray list;
- provider->PrepareSendToParent(resource_ids_to_transfer, &list);
- EXPECT_TRUE(provider->InUseByConsumer(id));
- EXPECT_CALL(test_data_.mock_callback_, Release(_, _)).Times(0);
- provider->DeleteResource(id);
- Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
- EXPECT_CALL(test_data_.mock_callback_, Release(test_data_.mailbox_name1_, _))
- .Times(1);
- provider->ReceiveFromParent(list);
-}
-
-} // namespace
-} // namespace cc
« no previous file with comments | « cc/texture_layer_impl.cc ('k') | cc/tiled_layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698