| Index: cc/layers/texture_layer_unittest.cc
|
| diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
|
| index cfbe8133fbf51cd445a1397fd2dde1b0a19434a8..14eb58b6919ba560b93c4515b128b3f7e8db8b60 100644
|
| --- a/cc/layers/texture_layer_unittest.cc
|
| +++ b/cc/layers/texture_layer_unittest.cc
|
| @@ -17,11 +17,14 @@
|
| #include "cc/layers/texture_layer_impl.h"
|
| #include "cc/output/compositor_frame_ack.h"
|
| #include "cc/output/context_provider.h"
|
| +#include "cc/resources/resource_update_queue.h"
|
| #include "cc/resources/returned_resource.h"
|
| #include "cc/test/fake_impl_proxy.h"
|
| +#include "cc/test/fake_layer_tree_host.h"
|
| #include "cc/test/fake_layer_tree_host_client.h"
|
| #include "cc/test/fake_layer_tree_host_impl.h"
|
| #include "cc/test/fake_output_surface.h"
|
| +#include "cc/test/fake_proxy.h"
|
| #include "cc/test/layer_test_common.h"
|
| #include "cc/test/layer_tree_test.h"
|
| #include "cc/test/test_web_graphics_context_3d.h"
|
| @@ -2178,5 +2181,68 @@ class TextureLayerWithMailboxImplThreadDeleted : public LayerTreeTest {
|
| SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
|
| TextureLayerWithMailboxImplThreadDeleted);
|
|
|
| +class FakeMailboxTextureLayerClient : public TextureLayerClient {
|
| + public:
|
| + FakeMailboxTextureLayerClient()
|
| + : prepare_texture_mailbox_(0), mailbox_released_(0) {}
|
| +
|
| + // TextureLayerClient implementation.
|
| + virtual unsigned PrepareTexture() OVERRIDE {
|
| + NOTREACHED();
|
| + return 0;
|
| + }
|
| + virtual bool PrepareTextureMailbox(
|
| + TextureMailbox* texture_mailbox,
|
| + scoped_ptr<SingleReleaseCallback>* release_callback,
|
| + bool use_shared_memory) OVERRIDE {
|
| + prepare_texture_mailbox_++;
|
| + *texture_mailbox = TextureMailbox(
|
| + MailboxFromString(std::string(64, '1')), GL_TEXTURE_2D, 0);
|
| + *release_callback = SingleReleaseCallback::Create(
|
| + base::Bind(&FakeMailboxTextureLayerClient::MailboxReleased,
|
| + base::Unretained(this)));
|
| + return true;
|
| + }
|
| +
|
| + void MailboxReleased(uint32 sync_point, bool lost_resource) {
|
| + mailbox_released_++;
|
| + }
|
| +
|
| + int prepare_texture_mailbox() { return prepare_texture_mailbox_; }
|
| + int mailbox_released() { return mailbox_released_; }
|
| +
|
| + private:
|
| + int prepare_texture_mailbox_;
|
| + int mailbox_released_;
|
| +};
|
| +
|
| +TEST(TextureLayerUnittest, ReleaseMailboxOnRendererCapabilityChange) {
|
| + FakeMailboxTextureLayerClient client;
|
| + scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
|
| + host->InitializeForTesting(scoped_ptr<Proxy>(new FakeProxy));
|
| + FakeProxy* fake_proxy = static_cast<FakeProxy*>(host->proxy());
|
| +
|
| + scoped_refptr<TextureLayer> test_layer =
|
| + TextureLayer::CreateForMailbox(&client);
|
| + test_layer->SetLayerTreeHost(host.get());
|
| +
|
| + fake_proxy->GetRendererCapabilities().using_shared_memory_resources = false;
|
| + scoped_ptr<ResourceUpdateQueue> queue =
|
| + make_scoped_ptr(new ResourceUpdateQueue);
|
| + test_layer->SavePaintProperties();
|
| + EXPECT_TRUE(test_layer->Update(queue.get(), NULL));
|
| + EXPECT_EQ(1, client.prepare_texture_mailbox());
|
| + EXPECT_EQ(0, client.mailbox_released());
|
| +
|
| + // Update when using_shared_memory_resources changed. Should release old
|
| + // mailbox back to client, and acquire a new one.
|
| + fake_proxy->GetRendererCapabilities().using_shared_memory_resources = true;
|
| + EXPECT_TRUE(test_layer->Update(queue.get(), NULL));
|
| + EXPECT_EQ(2, client.prepare_texture_mailbox());
|
| + EXPECT_EQ(1, client.mailbox_released());
|
| +
|
| + test_layer->SetLayerTreeHost(NULL);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|