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

Unified Diff: cc/layers/texture_layer_unittest.cc

Issue 227413011: Remove old texture path in TextureLayer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 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/layers/texture_layer_impl_unittest.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/texture_layer_unittest.cc
diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
index e385f1b2ac5af86f760b2043087271e8f2a490f7..dd67086c763092d6a367e9ab04fb1887b5fd4bfd 100644
--- a/cc/layers/texture_layer_unittest.cc
+++ b/cc/layers/texture_layer_unittest.cc
@@ -55,7 +55,6 @@ class MockLayerTreeHost : public LayerTreeHost {
InitializeSingleThreaded(client);
}
- MOCK_METHOD0(AcquireLayerTextures, void());
MOCK_METHOD0(SetNeedsCommit, void());
MOCK_METHOD0(SetNeedsUpdateLayers, void());
MOCK_METHOD0(StartRateLimiter, void());
@@ -64,9 +63,7 @@ class MockLayerTreeHost : public LayerTreeHost {
class FakeTextureLayerClient : public TextureLayerClient {
public:
- FakeTextureLayerClient() : texture_(0), mailbox_changed_(true) {}
-
- virtual unsigned PrepareTexture() OVERRIDE { return texture_; }
+ FakeTextureLayerClient() : mailbox_changed_(true) {}
virtual bool PrepareTextureMailbox(
TextureMailbox* mailbox,
@@ -81,8 +78,6 @@ class FakeTextureLayerClient : public TextureLayerClient {
return true;
}
- void set_texture(unsigned texture) { texture_ = texture; }
-
void set_mailbox(const TextureMailbox& mailbox,
scoped_ptr<SingleReleaseCallback> release_callback) {
mailbox_ = mailbox;
@@ -91,7 +86,6 @@ class FakeTextureLayerClient : public TextureLayerClient {
}
private:
- unsigned texture_;
TextureMailbox mailbox_;
scoped_ptr<SingleReleaseCallback> release_callback_;
bool mailbox_changed_;
@@ -166,7 +160,6 @@ class TextureLayerTest : public testing::Test {
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);
@@ -180,186 +173,8 @@ class TextureLayerTest : public testing::Test {
FakeLayerTreeHostImpl host_impl_;
};
-TEST_F(TextureLayerTest, SyncImplWhenClearingTexture) {
- scoped_ptr<TestWebGraphicsContext3D> context(
- TestWebGraphicsContext3D::Create());
- FakeTextureLayerClient client;
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(&client);
- ASSERT_TRUE(test_layer.get());
- test_layer->SetIsDrawable(true);
- test_layer->SetBounds(gfx::Size(10, 10));
-
- 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_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
-
- // Clearing the texture before we gave one should not sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Give a texture to the layer through the client.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times(AtLeast(1));
- client.set_texture(context->createTexture());
- test_layer->SetNeedsDisplay();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- // Force a commit.
- layer_tree_host_->Composite(base::TimeTicks());
-
- // Clearing the texture should sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(AtLeast(1));
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // But only once.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Force a commit to give another texture.
- EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times(AtLeast(1));
- test_layer->SetNeedsDisplay();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- layer_tree_host_->Composite(base::TimeTicks());
-
- // Make undrawable and commit.
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetIsDrawable(false);
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- layer_tree_host_->Composite(base::TimeTicks());
-
- // Clearing textures should not sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-}
-
-TEST_F(TextureLayerTest, SyncImplWhenClearingMailbox) {
- CommonMailboxObjects mailboxes;
- FakeTextureLayerClient client;
- scoped_refptr<TextureLayer> test_layer =
- TextureLayer::CreateForMailbox(&client);
- ASSERT_TRUE(test_layer.get());
- test_layer->SetIsDrawable(true);
- test_layer->SetBounds(gfx::Size(10, 10));
- 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_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
-
- // Clearing the mailbox before we gave one should not sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Give a mailbox to the layer through the client.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- client.set_mailbox(
- mailboxes.mailbox1_,
- SingleReleaseCallback::Create(mailboxes.release_mailbox1_));
- EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times(AtLeast(1));
- test_layer->SetNeedsDisplay();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- // Force a commit.
- layer_tree_host_->Composite(base::TimeTicks());
-
- // Clearing the mailbox should not sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Commit will return mailbox1.
- EXPECT_CALL(mailboxes.mock_callback_,
- Release(mailboxes.mailbox_name1_, _, false));
- layer_tree_host_->Composite(base::TimeTicks());
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Force a commit to give another mailbox.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- client.set_mailbox(
- mailboxes.mailbox2_,
- SingleReleaseCallback::Create(mailboxes.release_mailbox2_));
- EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times(AtLeast(1));
- test_layer->SetNeedsDisplay();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- layer_tree_host_->Composite(base::TimeTicks());
-
- // Make undrawable and commit.
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->SetIsDrawable(false);
- layer_tree_host_->Composite(base::TimeTicks());
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Clearing textures should not sync.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
- test_layer->ClearTexture();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-
- // Commit will return the mailbox.
- EXPECT_CALL(mailboxes.mock_callback_,
- Release(mailboxes.mailbox_name2_, _, false));
- layer_tree_host_->Composite(base::TimeTicks());
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
-}
-
-TEST_F(TextureLayerTest, SyncImplWhenRemovingFromTree) {
- scoped_ptr<TestWebGraphicsContext3D> context(
- TestWebGraphicsContext3D::Create());
- scoped_refptr<Layer> root_layer = Layer::Create();
- ASSERT_TRUE(root_layer.get());
- scoped_refptr<Layer> child_layer = Layer::Create();
- ASSERT_TRUE(child_layer.get());
- root_layer->AddChild(child_layer);
- FakeTextureLayerClient client;
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(&client);
- test_layer->SetIsDrawable(true);
- test_layer->SetBounds(gfx::Size(10, 10));
- ASSERT_TRUE(test_layer.get());
- child_layer->AddChild(test_layer);
-
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- 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());
-
- // Give a texture to the layer through the client.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
- EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times(AtLeast(1));
- client.set_texture(context->createTexture());
- test_layer->SetNeedsDisplay();
- Mock::VerifyAndClearExpectations(layer_tree_host_.get());
- // Force a commit.
- layer_tree_host_->Composite(base::TimeTicks());
-
- 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());
-}
-
TEST_F(TextureLayerTest, CheckPropertyChangeCausesCorrectBehavior) {
- scoped_refptr<TextureLayer> test_layer = TextureLayer::Create(NULL);
+ scoped_refptr<TextureLayer> test_layer = TextureLayer::CreateForMailbox(NULL);
EXPECT_SET_NEEDS_COMMIT(1, layer_tree_host_->SetRootLayer(test_layer));
// Test properties that should call SetNeedsCommit. All properties need to
@@ -378,7 +193,7 @@ TEST_F(TextureLayerTest, VisibleContentOpaqueRegion) {
const gfx::Rect layer_rect(layer_bounds);
const Region layer_region(layer_rect);
- scoped_refptr<TextureLayer> layer = TextureLayer::Create(NULL);
+ scoped_refptr<TextureLayer> layer = TextureLayer::CreateForMailbox(NULL);
layer->SetBounds(layer_bounds);
layer->draw_properties().visible_content_rect = layer_rect;
layer->SetBlendBackgroundColor(true);
@@ -476,19 +291,16 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
scoped_refptr<TextureLayer> test_layer = TextureLayer::CreateForMailbox(NULL);
ASSERT_TRUE(test_layer.get());
- 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_,
SingleReleaseCallback::Create(test_data_.release_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_,
@@ -501,7 +313,6 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
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_,
@@ -513,7 +324,6 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
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));
test_layer->SetTextureMailbox(
test_data_.mailbox3_,
@@ -521,7 +331,6 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
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_,
Release2(test_data_.shared_memory_.get(),
@@ -547,20 +356,17 @@ TEST_F(TextureLayerTest, SetTextureMailboxWithoutReleaseCallback) {
TextureMailbox mailbox1(MailboxFromChar('a'), GL_TEXTURE_2D, 1);
TextureMailbox mailbox2(MailboxFromChar('a'), GL_TEXTURE_2D, 2);
- 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());
// Set the mailbox the first time. It should cause a commit.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
test_layer->SetTextureMailboxWithoutReleaseCallback(mailbox1);
Mock::VerifyAndClearExpectations(layer_tree_host_.get());
// Set the mailbox again with a new sync point, as the backing texture has
// been updated. It should cause a new commit.
- EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
test_layer->SetTextureMailboxWithoutReleaseCallback(mailbox2);
Mock::VerifyAndClearExpectations(layer_tree_host_.get());
@@ -995,97 +801,6 @@ SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
TextureLayerImplWithMailboxThreadedCallback);
-class TextureLayerNoMailboxIsActivatedDuringCommit : public LayerTreeTest,
- public TextureLayerClient {
- protected:
- TextureLayerNoMailboxIsActivatedDuringCommit()
- : texture_(0u), activate_count_(0) {}
-
- virtual void BeginTest() OVERRIDE {
- gfx::Size bounds(100, 100);
- root_ = Layer::Create();
- root_->SetAnchorPoint(gfx::PointF());
- root_->SetBounds(bounds);
-
- layer_ = TextureLayer::Create(this);
- layer_->SetIsDrawable(true);
- layer_->SetAnchorPoint(gfx::PointF());
- layer_->SetBounds(bounds);
-
- root_->AddChild(layer_);
- layer_tree_host()->SetRootLayer(root_);
- layer_tree_host()->SetViewportSize(bounds);
-
- PostSetNeedsCommitToMainThread();
- }
-
- virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
- OVERRIDE {
- scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
- texture_ = provider->UnboundTestContext3d()->createExternalTexture();
- return FakeOutputSurface::Create3d(provider);
- }
-
- // TextureLayerClient implementation.
- virtual unsigned PrepareTexture() OVERRIDE {
- return texture_;
- }
- virtual bool PrepareTextureMailbox(
- TextureMailbox* mailbox,
- scoped_ptr<SingleReleaseCallback>* release_callback,
- bool use_shared_memory) OVERRIDE {
- return false;
- }
-
- virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
- ++activate_count_;
- }
-
- virtual void DidCommit() OVERRIDE {
- switch (layer_tree_host()->source_frame_number()) {
- case 1:
- // The first texture has been activated. Invalidate the layer so it
- // grabs a new texture id from the client.
- layer_->SetNeedsDisplay();
- break;
- case 2:
- // The second mailbox has been activated. Remove the layer from
- // the tree to cause another commit/activation. The commit should
- // finish *after* the layer is removed from the active tree.
- layer_->RemoveFromParent();
- break;
- case 3:
- EndTest();
- break;
- }
- }
-
- virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
- switch (host_impl->active_tree()->source_frame_number()) {
- case 2: {
- // The activate for the 2nd texture should have happened before now.
- EXPECT_EQ(2, activate_count_);
- break;
- }
- case 3: {
- // The activate to remove the layer should have happened before now.
- EXPECT_EQ(3, activate_count_);
- break;
- }
- }
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- unsigned texture_;
- int activate_count_;
- scoped_refptr<Layer> root_;
- scoped_refptr<TextureLayer> layer_;
-};
-
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
- TextureLayerNoMailboxIsActivatedDuringCommit);
-
class TextureLayerMailboxIsActivatedDuringCommit : public LayerTreeTest {
protected:
TextureLayerMailboxIsActivatedDuringCommit() : activate_count_(0) {}
@@ -1208,7 +923,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
// Hardware mode.
{
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(
test_data_.mailbox1_,
@@ -1218,7 +933,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
{
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(TextureMailbox(),
scoped_ptr<SingleReleaseCallback>());
@@ -1228,7 +943,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
{
// Software resource.
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(
test_data_.mailbox3_,
@@ -1236,30 +951,10 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
}
- {
- scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- impl_layer->SetDrawsContent(true);
- ContextProvider* context_provider =
- host_impl_.output_surface()->context_provider();
- GLuint texture = 0;
- context_provider->ContextGL()->GenTextures(1, &texture);
- impl_layer->SetTextureId(texture);
- EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
- }
-
- {
- scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- impl_layer->SetDrawsContent(true);
- impl_layer->SetTextureId(0);
- EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
- }
-
// Software mode.
{
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(
test_data_.mailbox1_,
@@ -1269,7 +964,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
{
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(TextureMailbox(),
scoped_ptr<SingleReleaseCallback>());
@@ -1279,7 +974,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
{
// Software resource.
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(
test_data_.mailbox3_,
@@ -1287,54 +982,22 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
}
- {
- scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- impl_layer->SetDrawsContent(true);
- ContextProvider* context_provider =
- host_impl_.output_surface()->context_provider();
- GLuint texture = 0;
- context_provider->ContextGL()->GenTextures(1, &texture);
- impl_layer->SetTextureId(texture);
- EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
- }
-
- {
- scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- impl_layer->SetDrawsContent(true);
- impl_layer->SetTextureId(0);
- EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
- }
-
// Resourceless software mode.
{
scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ TextureLayerImpl::Create(host_impl_.active_tree(), 1);
impl_layer->SetDrawsContent(true);
impl_layer->SetTextureMailbox(
test_data_.mailbox1_,
SingleReleaseCallback::Create(test_data_.release_mailbox1_));
EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE));
}
-
- {
- scoped_ptr<TextureLayerImpl> impl_layer =
- TextureLayerImpl::Create(host_impl_.active_tree(), 1, false);
- impl_layer->SetDrawsContent(true);
- ContextProvider* context_provider =
- host_impl_.output_surface()->context_provider();
- GLuint texture = 0;
- context_provider->ContextGL()->GenTextures(1, &texture);
- impl_layer->SetTextureId(texture);
- EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE));
- }
}
TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
host_impl_.CreatePendingTree();
scoped_ptr<TextureLayerImpl> pending_layer;
- pending_layer = TextureLayerImpl::Create(host_impl_.pending_tree(), 1, true);
+ pending_layer = TextureLayerImpl::Create(host_impl_.pending_tree(), 1);
ASSERT_TRUE(pending_layer);
scoped_ptr<LayerImpl> active_layer(
@@ -1397,7 +1060,7 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
TEST_F(TextureLayerImplWithMailboxTest,
TestDestructorCallbackOnCreatedResource) {
scoped_ptr<TextureLayerImpl> impl_layer;
- impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
+ impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1);
ASSERT_TRUE(impl_layer);
EXPECT_CALL(test_data_.mock_callback_,
@@ -1440,289 +1103,6 @@ TEST_F(TextureLayerImplWithMailboxTest, TestCallbackOnInUseResource) {
provider->ReceiveReturnsFromParent(returned);
}
-// Check that ClearClient correctly clears the state so that the impl side
-// doesn't try to use a texture that could have been destroyed.
-class TextureLayerClientTest
- : public LayerTreeTest,
- public TextureLayerClient {
- public:
- TextureLayerClientTest()
- : texture_(0),
- commit_count_(0),
- expected_used_textures_on_draw_(0),
- expected_used_textures_on_commit_(0) {}
-
- virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
- OVERRIDE {
- scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
- texture_ = provider->UnboundTestContext3d()->createExternalTexture();
- return FakeOutputSurface::Create3d(provider);
- }
-
- virtual unsigned PrepareTexture() OVERRIDE { return texture_; }
-
- virtual bool PrepareTextureMailbox(
- TextureMailbox* mailbox,
- scoped_ptr<SingleReleaseCallback>* release_callback,
- bool use_shared_memory) OVERRIDE {
- return false;
- }
-
- virtual void SetupTree() OVERRIDE {
- scoped_refptr<Layer> root = Layer::Create();
- root->SetBounds(gfx::Size(10, 10));
- root->SetAnchorPoint(gfx::PointF());
- root->SetIsDrawable(true);
-
- texture_layer_ = TextureLayer::Create(this);
- texture_layer_->SetBounds(gfx::Size(10, 10));
- texture_layer_->SetAnchorPoint(gfx::PointF());
- texture_layer_->SetIsDrawable(true);
- root->AddChild(texture_layer_);
-
- layer_tree_host()->SetRootLayer(root);
- LayerTreeTest::SetupTree();
- {
- base::AutoLock lock(lock_);
- expected_used_textures_on_commit_ = 1;
- }
- }
-
- virtual void BeginTest() OVERRIDE {
- PostSetNeedsCommitToMainThread();
- }
-
- virtual void DidCommitAndDrawFrame() OVERRIDE {
- ++commit_count_;
- switch (commit_count_) {
- case 1:
- texture_layer_->ClearClient();
- texture_layer_->SetNeedsDisplay();
- {
- base::AutoLock lock(lock_);
- expected_used_textures_on_commit_ = 0;
- }
- break;
- case 2:
- EndTest();
- break;
- default:
- NOTREACHED();
- break;
- }
- }
-
- virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
- base::AutoLock lock(lock_);
- expected_used_textures_on_draw_ = expected_used_textures_on_commit_;
- }
-
- virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread(
- LayerTreeHostImpl* host_impl,
- LayerTreeHostImpl::FrameData* frame_data,
- DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE {
- ContextForImplThread(host_impl)->ResetUsedTextures();
- return DrawSwapReadbackResult::DRAW_SUCCESS;
- }
-
- virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
- bool result) OVERRIDE {
- ASSERT_TRUE(result);
- EXPECT_EQ(expected_used_textures_on_draw_,
- ContextForImplThread(host_impl)->NumUsedTextures());
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- private:
- TestWebGraphicsContext3D* ContextForImplThread(LayerTreeHostImpl* host_impl) {
- return static_cast<TestContextProvider*>(
- host_impl->output_surface()->context_provider().get())->TestContext3d();
- }
-
- scoped_refptr<TextureLayer> texture_layer_;
- unsigned texture_;
- int commit_count_;
-
- // Used only on thread.
- unsigned expected_used_textures_on_draw_;
-
- // Used on either thread, protected by lock_.
- base::Lock lock_;
- unsigned expected_used_textures_on_commit_;
-};
-
-// The TextureLayerClient does not use mailboxes, so can't use a delegating
-// renderer.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(TextureLayerClientTest);
-
-
-// Checks that changing a texture in the client for a TextureLayer that's
-// invisible correctly works without drawing a deleted texture. See
-// crbug.com/266628
-class TextureLayerChangeInvisibleTest
- : public LayerTreeTest,
- public TextureLayerClient {
- public:
- TextureLayerChangeInvisibleTest()
- : texture_(0u),
- prepare_called_(0),
- commit_count_(0),
- expected_texture_on_draw_(0) {}
-
- virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
- OVERRIDE {
- scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
- texture_ = provider->UnboundTestContext3d()->createExternalTexture();
- return FakeOutputSurface::Create3d(provider);
- }
-
- // TextureLayerClient implementation.
- virtual unsigned PrepareTexture() OVERRIDE {
- ++prepare_called_;
- return texture_;
- }
- virtual bool PrepareTextureMailbox(
- TextureMailbox* mailbox,
- scoped_ptr<SingleReleaseCallback>* release_callback,
- bool use_shared_memory) OVERRIDE {
- return false;
- }
-
- virtual void SetupTree() OVERRIDE {
- scoped_refptr<Layer> root = Layer::Create();
- root->SetBounds(gfx::Size(10, 10));
- root->SetAnchorPoint(gfx::PointF());
- root->SetIsDrawable(true);
-
- solid_layer_ = SolidColorLayer::Create();
- solid_layer_->SetBounds(gfx::Size(10, 10));
- solid_layer_->SetIsDrawable(true);
- solid_layer_->SetBackgroundColor(SK_ColorWHITE);
- root->AddChild(solid_layer_);
-
- parent_layer_ = Layer::Create();
- parent_layer_->SetBounds(gfx::Size(10, 10));
- parent_layer_->SetIsDrawable(true);
- root->AddChild(parent_layer_);
-
- texture_layer_ = TextureLayer::Create(this);
- texture_layer_->SetBounds(gfx::Size(10, 10));
- texture_layer_->SetAnchorPoint(gfx::PointF());
- texture_layer_->SetIsDrawable(true);
- parent_layer_->AddChild(texture_layer_);
-
- layer_tree_host()->SetRootLayer(root);
- LayerTreeTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- PostSetNeedsCommitToMainThread();
- }
-
- virtual void DidCommitAndDrawFrame() OVERRIDE {
- ++commit_count_;
- switch (commit_count_) {
- case 1:
- // We should have updated the layer, committing the texture.
- EXPECT_EQ(1, prepare_called_);
- // Make layer invisible.
- parent_layer_->SetOpacity(0.f);
- break;
- case 2: {
- // Layer shouldn't have been updated.
- EXPECT_EQ(1, prepare_called_);
- texture_layer_->SetNeedsDisplay();
- // Force a change to make sure we draw a frame.
- solid_layer_->SetBackgroundColor(SK_ColorGRAY);
- break;
- }
- case 3:
- EXPECT_EQ(1, prepare_called_);
- // Make layer visible again.
- parent_layer_->SetOpacity(1.f);
- break;
- case 4: {
- // Layer should have been updated.
- EXPECT_EQ(2, prepare_called_);
- texture_layer_->ClearClient();
- texture_ = 0;
- break;
- }
- case 5:
- EndTest();
- break;
- default:
- NOTREACHED();
- break;
- }
- }
-
- virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
- ASSERT_TRUE(proxy()->IsMainThreadBlocked());
- // This is the only texture that can be drawn this frame.
- expected_texture_on_draw_ = texture_;
- }
-
- virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread(
- LayerTreeHostImpl* host_impl,
- LayerTreeHostImpl::FrameData* frame_data,
- DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE {
- ContextForImplThread(host_impl)->ResetUsedTextures();
- return DrawSwapReadbackResult::DRAW_SUCCESS;
- }
-
- virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
- bool result) OVERRIDE {
- ASSERT_TRUE(result);
- TestWebGraphicsContext3D* context = ContextForImplThread(host_impl);
- int used_textures = context->NumUsedTextures();
- switch (host_impl->active_tree()->source_frame_number()) {
- case 0:
- EXPECT_EQ(1, used_textures);
- EXPECT_TRUE(context->UsedTexture(expected_texture_on_draw_));
- break;
- case 1:
- case 2:
- EXPECT_EQ(0, used_textures);
- break;
- case 3:
- EXPECT_EQ(1, used_textures);
- EXPECT_TRUE(context->UsedTexture(expected_texture_on_draw_));
- break;
- default:
- break;
- }
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- private:
- TestWebGraphicsContext3D* ContextForImplThread(LayerTreeHostImpl* host_impl) {
- return static_cast<TestContextProvider*>(
- host_impl->output_surface()->context_provider().get())->TestContext3d();
- }
-
- scoped_refptr<SolidColorLayer> solid_layer_;
- scoped_refptr<Layer> parent_layer_;
- scoped_refptr<TextureLayer> texture_layer_;
-
- // Used on the main thread, and on the impl thread while the main thread is
- // blocked.
- unsigned texture_;
-
- // Used on the main thread.
- int prepare_called_;
- int commit_count_;
-
- // Used on the compositor thread.
- unsigned expected_texture_on_draw_;
-};
-
-// The TextureLayerChangeInvisibleTest does not use mailboxes, so can't use a
-// delegating renderer.
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(TextureLayerChangeInvisibleTest);
-
// Checks that TextureLayer::Update does not cause an extra commit when setting
// the texture mailbox.
class TextureLayerNoExtraCommitForMailboxTest
@@ -1730,10 +1110,6 @@ class TextureLayerNoExtraCommitForMailboxTest
public TextureLayerClient {
public:
// TextureLayerClient implementation.
- virtual unsigned PrepareTexture() OVERRIDE {
- NOTREACHED();
- return 0;
- }
virtual bool PrepareTextureMailbox(
TextureMailbox* texture_mailbox,
scoped_ptr<SingleReleaseCallback>* release_callback,
@@ -1834,11 +1210,6 @@ class TextureLayerChangeInvisibleMailboxTest
}
// TextureLayerClient implementation.
- virtual unsigned PrepareTexture() OVERRIDE {
- NOTREACHED();
- return 0;
- }
-
virtual bool PrepareTextureMailbox(
TextureMailbox* mailbox,
scoped_ptr<SingleReleaseCallback>* release_callback,
@@ -1979,10 +1350,6 @@ class TextureLayerReleaseResourcesBase
public TextureLayerClient {
public:
// TextureLayerClient implementation.
- virtual unsigned PrepareTexture() OVERRIDE {
- NOTREACHED();
- return 0;
- }
virtual bool PrepareTextureMailbox(
TextureMailbox* mailbox,
scoped_ptr<SingleReleaseCallback>* release_callback,
@@ -2052,81 +1419,6 @@ class TextureLayerReleaseResourcesAfterActivate
SINGLE_AND_MULTI_THREAD_TEST_F(TextureLayerReleaseResourcesAfterActivate);
-// Test recovering from a lost context.
-class TextureLayerLostContextTest
- : public LayerTreeTest,
- public TextureLayerClient {
- public:
- TextureLayerLostContextTest()
- : context_lost_(false),
- draw_count_(0) {}
-
- virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
- OVERRIDE {
- return FakeOutputSurface::Create3d();
- }
-
- virtual unsigned PrepareTexture() OVERRIDE {
- if (draw_count_ == 0)
- context_lost_ = true;
- if (context_lost_)
- return 0u;
- return 1u;
- }
-
- virtual bool PrepareTextureMailbox(
- TextureMailbox* mailbox,
- scoped_ptr<SingleReleaseCallback>* release_callback,
- bool use_shared_memory) OVERRIDE {
- return false;
- }
-
- virtual void SetupTree() OVERRIDE {
- scoped_refptr<Layer> root = Layer::Create();
- root->SetBounds(gfx::Size(10, 10));
- root->SetIsDrawable(true);
-
- texture_layer_ = TextureLayer::Create(this);
- texture_layer_->SetBounds(gfx::Size(10, 10));
- texture_layer_->SetIsDrawable(true);
- root->AddChild(texture_layer_);
-
- layer_tree_host()->SetRootLayer(root);
- LayerTreeTest::SetupTree();
- }
-
- virtual void BeginTest() OVERRIDE {
- PostSetNeedsCommitToMainThread();
- }
-
- virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread(
- LayerTreeHostImpl* host_impl,
- LayerTreeHostImpl::FrameData* frame_data,
- DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE {
- LayerImpl* root = host_impl->RootLayer();
- TextureLayerImpl* texture_layer =
- static_cast<TextureLayerImpl*>(root->children()[0]);
- if (++draw_count_ == 1)
- EXPECT_EQ(0u, texture_layer->texture_id());
- else
- EXPECT_EQ(1u, texture_layer->texture_id());
- return DrawSwapReadbackResult::DRAW_SUCCESS;
- }
-
- virtual void DidCommitAndDrawFrame() OVERRIDE {
- EndTest();
- }
-
- virtual void AfterTest() OVERRIDE {}
-
- private:
- scoped_refptr<TextureLayer> texture_layer_;
- bool context_lost_;
- int draw_count_;
-};
-
-SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(TextureLayerLostContextTest);
-
class TextureLayerWithMailboxMainThreadDeleted : public LayerTreeTest {
public:
void ReleaseCallback(uint32 sync_point, bool lost_resource) {
« no previous file with comments | « cc/layers/texture_layer_impl_unittest.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698