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

Unified Diff: cc/layers/texture_layer_unittest.cc

Issue 151093005: cc: Update Main RendererCapabilities on DeferredInitialize (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Release Mailbox if UsingSharedMemoryResources changed in TextureLayer::Update Created 6 years, 10 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
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

Powered by Google App Engine
This is Rietveld 408576698