| Index: cc/trees/layer_tree_host_unittest_delegated.cc
|
| diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
|
| index 79c615d2318f941a4281d077f7cf77161baeee6b..7410923f6dbd0871e08b1211160570293640fba6 100644
|
| --- a/cc/trees/layer_tree_host_unittest_delegated.cc
|
| +++ b/cc/trees/layer_tree_host_unittest_delegated.cc
|
| @@ -11,6 +11,8 @@
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/threading/thread.h"
|
| #include "base/time/time.h"
|
| +#include "cc/layers/delegated_frame_provider.h"
|
| +#include "cc/layers/delegated_frame_resource_collection.h"
|
| #include "cc/layers/delegated_renderer_layer.h"
|
| #include "cc/layers/delegated_renderer_layer_client.h"
|
| #include "cc/layers/delegated_renderer_layer_impl.h"
|
| @@ -188,12 +190,6 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest {
|
| frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>());
|
| }
|
|
|
| - scoped_ptr<DelegatedFrameData> CreateEmptyFrameData() {
|
| - scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
|
| - return frame.Pass();
|
| - }
|
| -
|
| -
|
| static ResourceProvider::ResourceId AppendResourceId(
|
| std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame,
|
| ResourceProvider::ResourceId resource_id) {
|
| @@ -208,13 +204,9 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest {
|
| return;
|
|
|
| std::vector<ResourceProvider::ResourceId> resources_in_last_sent_frame;
|
| - for (size_t i = 0; i < delegated_frame_data->render_pass_list.size(); ++i) {
|
| - RenderPass* pass = delegated_frame_data->render_pass_list.at(i);
|
| - for (size_t j = 0; j < pass->quad_list.size(); ++j) {
|
| - DrawQuad* quad = pass->quad_list[j];
|
| - quad->IterateResources(base::Bind(&AppendResourceId,
|
| - &resources_in_last_sent_frame));
|
| - }
|
| + for (size_t i = 0; i < delegated_frame_data->resource_list.size(); ++i) {
|
| + resources_in_last_sent_frame.push_back(
|
| + delegated_frame_data->resource_list[i].id);
|
| }
|
|
|
| std::vector<ResourceProvider::ResourceId> resources_to_return;
|
| @@ -245,21 +237,19 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest {
|
|
|
| class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
|
| : public LayerTreeHostDelegatedTest,
|
| - public DelegatedRendererLayerClient {
|
| + public DelegatedRendererLayerClient,
|
| + public DelegatedFrameResourceCollectionClient {
|
| public:
|
| - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() : available_(false) {}
|
| + LayerTreeHostDelegatedTestCaseSingleDelegatedLayer()
|
| + : resource_collection_(
|
| + make_scoped_ptr(new DelegatedFrameResourceCollection(this))),
|
| + available_(false) {}
|
|
|
| virtual void SetupTree() OVERRIDE {
|
| root_ = Layer::Create();
|
| root_->SetAnchorPoint(gfx::PointF());
|
| root_->SetBounds(gfx::Size(10, 10));
|
|
|
| - delegated_ = FakeDelegatedRendererLayer::Create(this);
|
| - delegated_->SetAnchorPoint(gfx::PointF());
|
| - delegated_->SetBounds(gfx::Size(10, 10));
|
| - delegated_->SetIsDrawable(true);
|
| -
|
| - root_->AddChild(delegated_);
|
| layer_tree_host()->SetRootLayer(root_);
|
| LayerTreeHostDelegatedTest::SetupTree();
|
| }
|
| @@ -268,10 +258,45 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
|
| PostSetNeedsCommitToMainThread();
|
| }
|
|
|
| + void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) {
|
| + RenderPass* root_pass = frame_data->render_pass_list.back();
|
| + gfx::Size frame_size = root_pass->output_rect.size();
|
| +
|
| + if (frame_provider_ && frame_size == frame_provider_->frame_size()) {
|
| + frame_provider_->SetFrameData(frame_data.Pass());
|
| + return;
|
| + }
|
| +
|
| + if (delegated_.get()) {
|
| + delegated_->RemoveFromParent();
|
| + delegated_ = NULL;
|
| + frame_provider_.reset();
|
| + }
|
| +
|
| + frame_provider_ = make_scoped_ptr(new DelegatedFrameProvider(
|
| + resource_collection_.get(), frame_data.Pass()));
|
| +
|
| + delegated_ = CreateDelegatedLayer(frame_provider_.get());
|
| + }
|
| +
|
| + scoped_refptr<DelegatedRendererLayer> CreateDelegatedLayer(
|
| + DelegatedFrameProvider* frame_provider) {
|
| + scoped_refptr<DelegatedRendererLayer> delegated =
|
| + FakeDelegatedRendererLayer::Create(this, frame_provider);
|
| + delegated->SetAnchorPoint(gfx::PointF());
|
| + delegated->SetBounds(gfx::Size(10, 10));
|
| + delegated->SetIsDrawable(true);
|
| +
|
| + root_->AddChild(delegated);
|
| + return delegated;
|
| + }
|
| +
|
| virtual void AfterTest() OVERRIDE {}
|
|
|
| // DelegatedRendererLayerClient implementation.
|
| virtual void DidCommitFrameData() OVERRIDE {}
|
| +
|
| + // DelegatedFrameProviderClient implementation.
|
| virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; }
|
|
|
| bool TestAndResetAvailable() {
|
| @@ -281,6 +306,8 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
|
| }
|
|
|
| protected:
|
| + scoped_ptr<DelegatedFrameResourceCollection> resource_collection_;
|
| + scoped_ptr<DelegatedFrameProvider> frame_provider_;
|
| scoped_refptr<Layer> root_;
|
| scoped_refptr<DelegatedRendererLayer> delegated_;
|
| bool available_;
|
| @@ -302,8 +329,7 @@ class LayerTreeHostDelegatedTestClientDidCommitCallback
|
| }
|
|
|
| virtual void BeginTest() OVERRIDE {
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| - gfx::Rect(0, 0, 1, 1)));
|
| + SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
|
| PostSetNeedsCommitToMainThread();
|
| }
|
|
|
| @@ -329,11 +355,13 @@ class LayerTreeHostDelegatedTestCreateChildId
|
| virtual void DidCommit() OVERRIDE {
|
| if (TestEnded())
|
| return;
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| - gfx::Rect(0, 0, 1, 1)));
|
| + SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
|
| }
|
|
|
| virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + if (host_impl->active_tree()->source_frame_number() < 1)
|
| + return;
|
| +
|
| LayerImpl* root_impl = host_impl->active_tree()->root_layer();
|
| FakeDelegatedRendererLayerImpl* delegated_impl =
|
| static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
|
| @@ -391,7 +419,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_NoFilters
|
| scoped_ptr<DelegatedFrameData> frame =
|
| CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| gfx::Rect(0, 0, 1, 1));
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| PostSetNeedsCommitToMainThread();
|
| }
|
| @@ -423,7 +451,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters
|
| gfx::Rect(0, 0, 1, 1),
|
| filters,
|
| FilterOperations());
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| PostSetNeedsCommitToMainThread();
|
| }
|
| @@ -456,7 +484,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters
|
| gfx::Rect(0, 0, 1, 1),
|
| FilterOperations(),
|
| filters);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| PostSetNeedsCommitToMainThread();
|
| }
|
| @@ -477,21 +505,24 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree
|
| : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| protected:
|
| virtual void BeginTest() OVERRIDE {
|
| - scoped_ptr<DelegatedFrameData> frame =
|
| - CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| - gfx::Rect(0, 0, 1, 1));
|
| + scoped_ptr<DelegatedFrameData> frame_no_filters =
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| +
|
| + scoped_ptr<DelegatedFrameData> frame_with_filters =
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
|
|
| FilterOperations filters;
|
| filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
|
| - AddRenderPass(frame.get(),
|
| + AddRenderPass(frame_with_filters.get(),
|
| RenderPass::Id(2, 1),
|
| gfx::Rect(0, 0, 1, 1),
|
| gfx::Rect(0, 0, 1, 1),
|
| filters,
|
| FilterOperations());
|
|
|
| + SetFrameData(frame_no_filters.Pass());
|
| delegated_->RemoveFromParent();
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame_with_filters.Pass());
|
| layer_tree_host()->root_layer()->AddChild(delegated_);
|
|
|
| PostSetNeedsCommitToMainThread();
|
| @@ -522,100 +553,96 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage
|
| case 1:
|
| // The first time the layer gets a frame the whole layer should be
|
| // damaged.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| - gfx::Rect(0, 0, 1, 1)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
|
| break;
|
| case 2:
|
| + // A different frame size will damage the whole layer.
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0)));
|
| + break;
|
| + case 3:
|
| // Should create a total amount of gfx::Rect(2, 2, 10, 6) damage.
|
| // The frame size is 20x20 while the layer is 10x10, so this should
|
| // produce a gfx::Rect(1, 1, 5, 3) damage rect.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20),
|
| - gfx::Rect(2, 2, 5, 5)));
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20),
|
| - gfx::Rect(7, 2, 5, 6)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6)));
|
| break;
|
| - case 3:
|
| + case 4:
|
| // Should create zero damage.
|
| layer_tree_host()->SetNeedsCommit();
|
| break;
|
| - case 4:
|
| + case 5:
|
| // Should damage the full viewport.
|
| delegated_->SetBounds(gfx::Size(2, 2));
|
| break;
|
| - case 5:
|
| + case 6:
|
| // Should create zero damage.
|
| layer_tree_host()->SetNeedsCommit();
|
| break;
|
| - case 6:
|
| - // Should damage the full layer.
|
| + case 7:
|
| + // Should damage the full layer, tho the frame size is not changing.
|
| delegated_->SetBounds(gfx::Size(6, 6));
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5),
|
| - gfx::Rect(1, 1, 2, 2)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2)));
|
| break;
|
| - case 7:
|
| + case 8:
|
| // Should create zero damage.
|
| layer_tree_host()->SetNeedsCommit();
|
| break;
|
| - case 8:
|
| + case 9:
|
| // Should damage the full layer.
|
| delegated_->SetDisplaySize(gfx::Size(10, 10));
|
| break;
|
| - case 9:
|
| + case 10:
|
| // Should create zero damage.
|
| layer_tree_host()->SetNeedsCommit();
|
| break;
|
| - case 10:
|
| - // Setting an empty frame should damage the whole layer the
|
| - // first time.
|
| - delegated_->SetFrameData(CreateEmptyFrameData());
|
| - break;
|
| case 11:
|
| - // Setting an empty frame shouldn't damage anything after the
|
| - // first time.
|
| - delegated_->SetFrameData(CreateEmptyFrameData());
|
| + // Changing the frame size damages the full layer.
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1)));
|
| break;
|
| case 12:
|
| - // Having valid content to display agains should damage the whole layer.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10),
|
| - gfx::Rect(5, 5, 1, 1)));
|
| - break;
|
| - case 13:
|
| // An invalid frame isn't used, so it should not cause damage.
|
| - delegated_->SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 10, 10),
|
| - gfx::Rect(5, 5, 1, 1)));
|
| + SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5),
|
| + gfx::Rect(4, 4, 1, 1)));
|
| break;
|
| - case 14:
|
| + case 13:
|
| // Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is
|
| // 5x5 and the display size is now set to 10x10, so this should result
|
| // in a gfx::Rect(2, 2, 4, 4) damage rect.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5),
|
| - gfx::Rect(1, 1, 2, 2)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2)));
|
| break;
|
| - case 15:
|
| + case 14:
|
| // Should create zero damage.
|
| layer_tree_host()->SetNeedsCommit();
|
| break;
|
| - case 16:
|
| + case 15:
|
| // Moving the layer out of the tree and back in will damage the whole
|
| // impl layer.
|
| delegated_->RemoveFromParent();
|
| layer_tree_host()->root_layer()->AddChild(delegated_);
|
| break;
|
| - case 17:
|
| + case 16:
|
| // Make a larger frame with lots of damage. Then a frame smaller than
|
| // the first frame's damage. The entire layer should be damaged, but
|
| // nothing more.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10),
|
| - gfx::Rect(0, 0, 10, 10)));
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5),
|
| - gfx::Rect(1, 1, 2, 2)));
|
| - break;
|
| - case 18:
|
| - // Make a frame with lots of damage. Then replace it with an empty
|
| - // frame. The entire layer should be damaged, but nothing more.
|
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10),
|
| - gfx::Rect(0, 0, 10, 10)));
|
| - delegated_->SetFrameData(CreateEmptyFrameData());
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2)));
|
| + break;
|
| + case 17:
|
| + // Make a frame with lots of damage. Then replace it with a frame with
|
| + // no damage. The entire layer should be damaged, but nothing more.
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10)));
|
| + SetFrameData(
|
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0)));
|
| break;
|
| }
|
| first_draw_for_source_frame_ = true;
|
| @@ -648,71 +675,67 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage
|
| damage_rect.ToString());
|
| break;
|
| case 2:
|
| - EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 3:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 4:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 5:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 6:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 7:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 8:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 9:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 10:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 11:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 12:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 13:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 14:
|
| - EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 15:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 16:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| break;
|
| case 17:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| - damage_rect.ToString());
|
| - break;
|
| - case 18:
|
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
|
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
|
| damage_rect.ToString());
|
| EndTest();
|
| break;
|
| @@ -738,7 +761,7 @@ class LayerTreeHostDelegatedTestMergeResources
|
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame1.get(), 999);
|
| AddTransferableResource(frame1.get(), 999);
|
| - delegated_->SetFrameData(frame1.Pass());
|
| + SetFrameData(frame1.Pass());
|
|
|
| // The second frame uses resource 999 still, but also adds 555.
|
| scoped_ptr<DelegatedFrameData> frame2 =
|
| @@ -747,12 +770,13 @@ class LayerTreeHostDelegatedTestMergeResources
|
| AddTransferableResource(frame2.get(), 999);
|
| AddTextureQuad(frame2.get(), 555);
|
| AddTransferableResource(frame2.get(), 555);
|
| - delegated_->SetFrameData(frame2.Pass());
|
| + SetFrameData(frame2.Pass());
|
|
|
| // The resource 999 from frame1 is returned since it is still on the main
|
| // thread.
|
| ReturnedResourceArray returned_resources;
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&returned_resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(
|
| + &returned_resources);
|
| {
|
| unsigned expected[] = {999};
|
| EXPECT_RESOURCES(expected, returned_resources);
|
| @@ -799,7 +823,7 @@ class LayerTreeHostDelegatedTestRemapResourcesInQuads
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| PostSetNeedsCommitToMainThread();
|
| }
|
| @@ -859,11 +883,11 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // All of the resources are in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -873,11 +897,11 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 3:
|
| // 555 is no longer in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {555};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -886,7 +910,7 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
|
|
|
| // Stop using any resources.
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 4:
|
| // Postpone collecting resources for a frame. They should still be there
|
| @@ -896,7 +920,7 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
|
| case 5:
|
| // 444 and 999 are no longer in use. We sent two refs to 999, so we
|
| // should get two back.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {444, 999, 999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -908,7 +932,8 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
|
|
|
| // Resources are never immediately released.
|
| ReturnedResourceArray empty_resources;
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&empty_resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(
|
| + &empty_resources);
|
| EXPECT_EQ(0u, empty_resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
| }
|
| @@ -946,11 +971,11 @@ class LayerTreeHostDelegatedTestReusedResources
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // All of the resources are in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -958,10 +983,10 @@ class LayerTreeHostDelegatedTestReusedResources
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 999);
|
| AddTransferableResource(frame.get(), 999);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // Resource are not immediately released.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -971,12 +996,12 @@ class LayerTreeHostDelegatedTestReusedResources
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 3:
|
| // The 999 resource is the only unused one. Two references were sent, so
|
| // two should be returned.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {999, 999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1019,11 +1044,11 @@ class LayerTreeHostDelegatedTestFrameBeforeAck
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // All of the resources are in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1031,17 +1056,17 @@ class LayerTreeHostDelegatedTestFrameBeforeAck
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 999);
|
| AddTransferableResource(frame.get(), 999);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // Resource are not immediately released.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| // The parent compositor (this one) does a commit.
|
| break;
|
| case 3:
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {444, 555};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1054,7 +1079,7 @@ class LayerTreeHostDelegatedTestFrameBeforeAck
|
| AddTextureQuad(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| }
|
| }
|
| @@ -1121,11 +1146,11 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // All of the resources are in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1133,10 +1158,10 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 999);
|
| AddTransferableResource(frame.get(), 999);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // Resource are not immediately released.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1153,11 +1178,11 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // The resources are used by the new frame but are returned anyway since
|
| // we passed them again.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {444, 555};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1165,7 +1190,7 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
|
| }
|
| break;
|
| case 4:
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
| EndTest();
|
| @@ -1241,11 +1266,11 @@ class LayerTreeHostDelegatedTestBadFrame
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // All of the resources are in use.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1259,13 +1284,13 @@ class LayerTreeHostDelegatedTestBadFrame
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| AddTextureQuad(frame.get(), 775);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // The parent compositor (this one) does a commit.
|
| break;
|
| case 3:
|
| // The bad frame's resource is given back to the child compositor.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {444};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1275,11 +1300,11 @@ class LayerTreeHostDelegatedTestBadFrame
|
| // Now send a good frame with 999 again.
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 999);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 4:
|
| // The unused 555 from the last good frame is now released.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {555};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1392,11 +1417,11 @@ class LayerTreeHostDelegatedTestUnnamedResource
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // The unused resource should be returned.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1453,18 +1478,18 @@ class LayerTreeHostDelegatedTestDontLeakResource
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| // But then we immediately stop using 999.
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| // The unused resources should be returned. 555 is still used, but it's
|
| // returned once to account for the first frame.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {555, 999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1472,12 +1497,12 @@ class LayerTreeHostDelegatedTestDontLeakResource
|
| }
|
| // Send a frame with no resources in it.
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 3:
|
| // The now unused resource 555 should be returned.
|
| resources.clear();
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {555};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1534,10 +1559,10 @@ class LayerTreeHostDelegatedTestResourceSentToParent
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1546,11 +1571,11 @@ class LayerTreeHostDelegatedTestResourceSentToParent
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 3:
|
| // Since 999 is in the grandparent it is not returned.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1583,7 +1608,7 @@ class LayerTreeHostDelegatedTestResourceSentToParent
|
| ReturnedResourceArray resources;
|
|
|
| // 999 was returned from the grandparent and could be released.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1675,10 +1700,10 @@ class LayerTreeHostDelegatedTestCommitWithoutTake
|
| AddTransferableResource(frame.get(), 555);
|
| AddTextureQuad(frame.get(), 444);
|
| AddTransferableResource(frame.get(), 444);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 2:
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| EXPECT_EQ(0u, resources.size());
|
| EXPECT_FALSE(TestAndResetAvailable());
|
|
|
| @@ -1686,7 +1711,7 @@ class LayerTreeHostDelegatedTestCommitWithoutTake
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| // 999 and 444 will be returned for frame 1, but not 555 since it's in
|
| // the current frame.
|
| break;
|
| @@ -1697,12 +1722,12 @@ class LayerTreeHostDelegatedTestCommitWithoutTake
|
| AddTransferableResource(frame.get(), 999);
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| break;
|
| case 4:
|
| // 555 from frame 1 and 2 isn't returned since it's still in use. 999
|
| // from frame 1 is returned though.
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {444, 999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1710,12 +1735,12 @@ class LayerTreeHostDelegatedTestCommitWithoutTake
|
| }
|
|
|
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be
|
| // returned once for frame 3.
|
| break;
|
| case 5:
|
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| {
|
| unsigned expected[] = {555, 555, 555, 999};
|
| EXPECT_RESOURCES(expected, resources);
|
| @@ -1790,7 +1815,7 @@ class DelegatedFrameIsActivatedDuringCommit
|
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 999);
|
| AddTransferableResource(frame.get(), 999);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
|
|
| PostSetNeedsCommitToMainThread();
|
| }
|
| @@ -1828,7 +1853,7 @@ class DelegatedFrameIsActivatedDuringCommit
|
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| AddTextureQuad(frame.get(), 555);
|
| AddTransferableResource(frame.get(), 555);
|
| - delegated_->SetFrameData(frame.Pass());
|
| + SetFrameData(frame.Pass());
|
| // So this commit number should complete after the second activate.
|
| EXPECT_EQ(1, layer_tree_host()->source_frame_number());
|
| break;
|
| @@ -1859,6 +1884,14 @@ class DelegatedFrameIsActivatedDuringCommit
|
| // The activate to remove the layer should have happened before now.
|
| base::AutoLock lock(activate_lock_);
|
| EXPECT_EQ(3, activate_count_);
|
| +
|
| + ReturnedResourceArray resources;
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + {
|
| + unsigned expected[] = {999, 555};
|
| + EXPECT_RESOURCES(expected, resources);
|
| + EXPECT_TRUE(TestAndResetAvailable());
|
| + }
|
| break;
|
| }
|
| }
|
| @@ -1876,5 +1909,285 @@ class DelegatedFrameIsActivatedDuringCommit
|
| SINGLE_AND_MULTI_THREAD_TEST_F(
|
| DelegatedFrameIsActivatedDuringCommit);
|
|
|
| +class LayerTreeHostDelegatedTestTwoImplLayers
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + public:
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DidCommitAndDrawFrame() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame;
|
| + ReturnedResourceArray resources;
|
| +
|
| + int next_source_frame_number = layer_tree_host()->source_frame_number();
|
| + switch (next_source_frame_number) {
|
| + case 1:
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + AddTextureQuad(frame.get(), 999);
|
| + AddTransferableResource(frame.get(), 999);
|
| + AddTextureQuad(frame.get(), 555);
|
| + AddTransferableResource(frame.get(), 555);
|
| + SetFrameData(frame.Pass());
|
| + break;
|
| + case 2:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Remove the delegated layer and replace it with a new one. Use the
|
| + // same frame and resources for it.
|
| + delegated_->RemoveFromParent();
|
| + delegated_ = CreateDelegatedLayer(frame_provider_.get());
|
| + break;
|
| + case 3:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Use a frame with no resources in it.
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + SetFrameData(frame.Pass());
|
| + break;
|
| + case 4:
|
| + // We gave one frame to the frame provider, so we should get one
|
| + // ref back for each resource.
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + {
|
| + unsigned expected[] = {555, 999};
|
| + EXPECT_RESOURCES(expected, resources);
|
| + EXPECT_TRUE(TestAndResetAvailable());
|
| + }
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + ReturnUnusedResourcesFromParent(host_impl);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoImplLayers);
|
| +
|
| +class LayerTreeHostDelegatedTestTwoImplLayersTwoFrames
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + public:
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DidCommitAndDrawFrame() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame;
|
| + ReturnedResourceArray resources;
|
| +
|
| + int next_source_frame_number = layer_tree_host()->source_frame_number();
|
| + switch (next_source_frame_number) {
|
| + case 1:
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + AddTextureQuad(frame.get(), 999);
|
| + AddTransferableResource(frame.get(), 999);
|
| + AddTextureQuad(frame.get(), 555);
|
| + AddTransferableResource(frame.get(), 555);
|
| + SetFrameData(frame.Pass());
|
| + break;
|
| + case 2:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + AddTextureQuad(frame.get(), 999);
|
| + AddTransferableResource(frame.get(), 999);
|
| + AddTextureQuad(frame.get(), 555);
|
| + AddTransferableResource(frame.get(), 555);
|
| +
|
| + // Remove the delegated layer and replace it with a new one. Make a new
|
| + // frame but with the same resources for it.
|
| + delegated_->RemoveFromParent();
|
| + delegated_ = NULL;
|
| +
|
| + frame_provider_->SetFrameData(frame.Pass());
|
| + delegated_ = CreateDelegatedLayer(frame_provider_.get());
|
| + break;
|
| + case 3:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Use a frame with no resources in it.
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + SetFrameData(frame.Pass());
|
| + break;
|
| + case 4:
|
| + // We gave two frames to the frame provider, so we should get two
|
| + // refs back for each resource.
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + {
|
| + unsigned expected[] = {555, 555, 999, 999};
|
| + EXPECT_RESOURCES(expected, resources);
|
| + EXPECT_TRUE(TestAndResetAvailable());
|
| + }
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + ReturnUnusedResourcesFromParent(host_impl);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostDelegatedTestTwoImplLayersTwoFrames);
|
| +
|
| +class LayerTreeHostDelegatedTestTwoLayers
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + public:
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DidCommitAndDrawFrame() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame;
|
| + ReturnedResourceArray resources;
|
| +
|
| + int next_source_frame_number = layer_tree_host()->source_frame_number();
|
| + switch (next_source_frame_number) {
|
| + case 1:
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + AddTextureQuad(frame.get(), 999);
|
| + AddTransferableResource(frame.get(), 999);
|
| + AddTextureQuad(frame.get(), 555);
|
| + AddTransferableResource(frame.get(), 555);
|
| +
|
| + // Create a DelegatedRendererLayer using the frame.
|
| + SetFrameData(frame.Pass());
|
| +
|
| + // Create a second DelegatedRendererLayer using the same frame provider.
|
| + delegated_thief_ = CreateDelegatedLayer(frame_provider_.get());
|
| + break;
|
| + case 2:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Remove one delegated layer from the tree. No resources should be
|
| + // returned yet.
|
| + delegated_->RemoveFromParent();
|
| + break;
|
| + case 3:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Put the first layer back, and remove the other layer. No resources
|
| + // should be returned yet.
|
| + root_->AddChild(delegated_);
|
| + delegated_thief_->RemoveFromParent();
|
| + break;
|
| + case 4:
|
| + // Removing both layers from the tree should cause resources to be
|
| + // returned.
|
| + delegated_->RemoveFromParent();
|
| + break;
|
| + case 5:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + {
|
| + unsigned expected[] = {555, 999};
|
| + EXPECT_RESOURCES(expected, resources);
|
| + EXPECT_TRUE(TestAndResetAvailable());
|
| + }
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + ReturnUnusedResourcesFromParent(host_impl);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +
|
| + scoped_refptr<DelegatedRendererLayer> delegated_thief_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayers);
|
| +
|
| +class LayerTreeHostDelegatedTestTwoLayersAfterCommit
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + public:
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DidCommitAndDrawFrame() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame;
|
| + ReturnedResourceArray resources;
|
| +
|
| + int next_source_frame_number = layer_tree_host()->source_frame_number();
|
| + switch (next_source_frame_number) {
|
| + case 1:
|
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
|
| + AddTextureQuad(frame.get(), 999);
|
| + AddTransferableResource(frame.get(), 999);
|
| + AddTextureQuad(frame.get(), 555);
|
| + AddTransferableResource(frame.get(), 555);
|
| +
|
| + // Create a DelegatedRendererLayer using the frame.
|
| + SetFrameData(frame.Pass());
|
| + break;
|
| + case 2:
|
| + // Once the first layer is happily using the frame provider, make
|
| + // another layer steal it.
|
| + delegated_thief_ = CreateDelegatedLayer(frame_provider_.get());
|
| + break;
|
| + case 3:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Remove one delegated layer from the tree. No resources should be
|
| + // returned yet.
|
| + delegated_->RemoveFromParent();
|
| + break;
|
| + case 4:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + EXPECT_EQ(0u, resources.size());
|
| + EXPECT_FALSE(TestAndResetAvailable());
|
| +
|
| + // Put the first layer back, and remove the other layer. No resources
|
| + // should be returned yet.
|
| + root_->AddChild(delegated_);
|
| + delegated_thief_->RemoveFromParent();
|
| + break;
|
| + case 5:
|
| + // Removing both layers from the tree should cause resources to be
|
| + // returned.
|
| + delegated_->RemoveFromParent();
|
| + break;
|
| + case 6:
|
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
|
| + {
|
| + unsigned expected[] = {555, 999};
|
| + EXPECT_RESOURCES(expected, resources);
|
| + EXPECT_TRUE(TestAndResetAvailable());
|
| + }
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + ReturnUnusedResourcesFromParent(host_impl);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +
|
| + scoped_refptr<DelegatedRendererLayer> delegated_thief_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayersAfterCommit);
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|