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

Unified Diff: cc/trees/layer_tree_host_unittest_delegated.cc

Issue 26023004: aura: Allow delegated frames to be used by more than one impl layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: frameprovider: are_layers_attached checks Created 7 years, 2 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/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 34a2b94e03611e2478decd68e0f6d171f34ba618..ae7e47f5a21fdd4928a35b5a2b789e2537f7532c 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"
@@ -189,12 +191,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) {
@@ -209,13 +205,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;
@@ -246,33 +238,68 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest {
class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
: public LayerTreeHostDelegatedTest,
- public DelegatedRendererLayerClient {
+ public DelegatedRendererLayerClient,
+ public DelegatedFrameResourceCollectionClient {
public:
- LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() : available_(false) {}
+ LayerTreeHostDelegatedTestCaseSingleDelegatedLayer()
+ : resource_collection_(new DelegatedFrameResourceCollection),
+ available_(false) {
+ resource_collection_->SetClient(this);
+ }
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();
}
virtual void BeginTest() OVERRIDE {
+ resource_collection_->SetClient(this);
PostSetNeedsCommitToMainThread();
}
- virtual void AfterTest() OVERRIDE {}
+ 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_.get() && frame_size == frame_provider_->frame_size()) {
+ frame_provider_->SetFrameData(frame_data.Pass());
+ return;
+ }
+
+ if (delegated_.get()) {
+ delegated_->RemoveFromParent();
+ delegated_ = NULL;
+ frame_provider_ = NULL;
+ }
+
+ frame_provider_ = 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 { resource_collection_->SetClient(NULL); }
// DelegatedRendererLayerClient implementation.
virtual void DidCommitFrameData() OVERRIDE {}
+
+ // DelegatedFrameProviderClient implementation.
virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; }
bool TestAndResetAvailable() {
@@ -282,6 +309,8 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
}
protected:
+ scoped_refptr<DelegatedFrameResourceCollection> resource_collection_;
+ scoped_refptr<DelegatedFrameProvider> frame_provider_;
scoped_refptr<Layer> root_;
scoped_refptr<DelegatedRendererLayer> delegated_;
bool available_;
@@ -303,8 +332,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();
}
@@ -330,11 +358,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]);
@@ -376,8 +406,6 @@ class LayerTreeHostDelegatedTestCreateChildId
did_reset_child_id_ = true;
}
- virtual void AfterTest() OVERRIDE {}
-
protected:
int num_activates_;
bool did_reset_child_id_;
@@ -392,7 +420,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();
}
@@ -401,8 +429,6 @@ class LayerTreeHostDelegatedTestOffscreenContext_NoFilters
EXPECT_FALSE(host_impl->offscreen_context_provider());
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -424,7 +450,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters
gfx::Rect(0, 0, 1, 1),
filters,
FilterOperations());
- delegated_->SetFrameData(frame.Pass());
+ SetFrameData(frame.Pass());
PostSetNeedsCommitToMainThread();
}
@@ -434,8 +460,6 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters
EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -457,7 +481,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters
gfx::Rect(0, 0, 1, 1),
FilterOperations(),
filters);
- delegated_->SetFrameData(frame.Pass());
+ SetFrameData(frame.Pass());
PostSetNeedsCommitToMainThread();
}
@@ -467,8 +491,6 @@ class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters
EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -478,21 +500,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();
@@ -503,8 +528,6 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree
EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -523,101 +546,112 @@ 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)));
+ 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 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());
+ 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;
+ case 18:
+ // Make another layer that uses the same frame provider. The new layer
+ // should be damaged.
+ delegated_copy_ = CreateDelegatedLayer(frame_provider_);
+ delegated_copy_->SetPosition(gfx::Point(5, 0));
+
+ // Also set a new frame.
+ SetFrameData(
+ CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(4, 0, 1, 1)));
+ break;
+ case 19:
+ // Set another new frame, both layers should be damaged in the same
+ // ways.
+ SetFrameData(
+ CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(3, 3, 1, 1)));
}
first_draw_for_source_frame_ = true;
}
@@ -649,71 +683,76 @@ 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(),
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
damage_rect.ToString());
break;
case 18:
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
+ EXPECT_EQ(gfx::UnionRects(gfx::RectF(5.f, 0.f, 10.f, 10.f),
+ gfx::RectF(4.f, 0.f, 1.f, 1.f)).ToString(),
+ damage_rect.ToString());
+ break;
+ case 19:
+ EXPECT_EQ(gfx::RectF(3.f, 3.f, 6.f, 1.f).ToString(),
damage_rect.ToString());
EndTest();
break;
@@ -723,6 +762,7 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage
}
protected:
+ scoped_refptr<DelegatedRendererLayer> delegated_copy_;
bool first_draw_for_source_frame_;
};
@@ -739,7 +779,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 =
@@ -748,12 +788,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);
@@ -783,8 +824,6 @@ class LayerTreeHostDelegatedTestMergeResources
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestMergeResources);
@@ -800,7 +839,7 @@ class LayerTreeHostDelegatedTestRemapResourcesInQuads
AddTransferableResource(frame.get(), 999);
AddTextureQuad(frame.get(), 555);
AddTransferableResource(frame.get(), 555);
- delegated_->SetFrameData(frame.Pass());
+ SetFrameData(frame.Pass());
PostSetNeedsCommitToMainThread();
}
@@ -834,8 +873,6 @@ class LayerTreeHostDelegatedTestRemapResourcesInQuads
EndTest();
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestRemapResourcesInQuads);
@@ -860,11 +897,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());
@@ -874,11 +911,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);
@@ -887,7 +924,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
@@ -897,7 +934,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);
@@ -909,7 +946,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());
}
@@ -918,8 +956,6 @@ class LayerTreeHostDelegatedTestReturnUnusedResources
bool result) OVERRIDE {
ReturnUnusedResourcesFromParent(host_impl);
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -947,11 +983,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());
@@ -959,10 +995,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());
@@ -972,12 +1008,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);
@@ -992,8 +1028,6 @@ class LayerTreeHostDelegatedTestReusedResources
bool result) OVERRIDE {
ReturnUnusedResourcesFromParent(host_impl);
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestReusedResources);
@@ -1020,11 +1054,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());
@@ -1032,17 +1066,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);
@@ -1055,7 +1089,7 @@ class LayerTreeHostDelegatedTestFrameBeforeAck
AddTextureQuad(frame.get(), 999);
AddTextureQuad(frame.get(), 555);
AddTextureQuad(frame.get(), 444);
- delegated_->SetFrameData(frame.Pass());
+ SetFrameData(frame.Pass());
break;
}
}
@@ -1094,8 +1128,6 @@ class LayerTreeHostDelegatedTestFrameBeforeAck
bool result) OVERRIDE {
ReturnUnusedResourcesFromParent(host_impl);
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestFrameBeforeAck);
@@ -1122,11 +1154,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());
@@ -1134,10 +1166,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());
@@ -1154,11 +1186,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);
@@ -1166,7 +1198,7 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
}
break;
case 4:
- delegated_->TakeUnusedResourcesForChildCompositor(&resources);
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
EXPECT_EQ(0u, resources.size());
EXPECT_FALSE(TestAndResetAvailable());
EndTest();
@@ -1215,8 +1247,6 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources
bool result) OVERRIDE {
ReturnUnusedResourcesFromParent(host_impl);
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(
@@ -1242,11 +1272,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());
@@ -1260,27 +1290,31 @@ 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:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // 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);
+ SetFrameData(frame.Pass());
+
// 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);
EXPECT_TRUE(TestAndResetAvailable());
}
-
- // 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());
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);
@@ -1368,8 +1402,6 @@ class LayerTreeHostDelegatedTestBadFrame
}
}
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestBadFrame);
@@ -1393,11 +1425,19 @@ class LayerTreeHostDelegatedTestUnnamedResource
AddTransferableResource(frame.get(), 999);
AddTextureQuad(frame.get(), 555);
AddTransferableResource(frame.get(), 555);
- delegated_->SetFrameData(frame.Pass());
+ SetFrameData(frame.Pass());
break;
case 2:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Now send an empty frame.
+ frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
+ SetFrameData(frame.Pass());
+
// The unused resource should be returned.
- delegated_->TakeUnusedResourcesForChildCompositor(&resources);
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
{
unsigned expected[] = {999};
EXPECT_RESOURCES(expected, resources);
@@ -1428,8 +1468,6 @@ class LayerTreeHostDelegatedTestUnnamedResource
EXPECT_EQ(1u, delegated_impl->Resources().size());
EXPECT_EQ(1u, delegated_impl->Resources().count(555));
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestUnnamedResource);
@@ -1454,18 +1492,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);
@@ -1473,12 +1511,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);
@@ -1513,8 +1551,6 @@ class LayerTreeHostDelegatedTestDontLeakResource
bool result) OVERRIDE {
ReturnUnusedResourcesFromParent(host_impl);
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestDontLeakResource);
@@ -1535,10 +1571,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());
@@ -1547,11 +1583,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());
@@ -1584,7 +1620,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);
@@ -1645,8 +1681,6 @@ class LayerTreeHostDelegatedTestResourceSentToParent
}
}
- virtual void AfterTest() OVERRIDE {}
-
base::Closure receive_resource_on_thread_;
};
@@ -1676,10 +1710,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());
@@ -1687,7 +1721,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;
@@ -1698,12 +1732,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);
@@ -1711,12 +1745,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);
@@ -1769,8 +1803,6 @@ class LayerTreeHostDelegatedTestCommitWithoutTake
EXPECT_EQ(1u, delegated_impl->Resources().count(555));
}
}
-
- virtual void AfterTest() OVERRIDE {}
};
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCommitWithoutTake);
@@ -1791,7 +1823,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();
}
@@ -1829,7 +1861,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;
@@ -1860,14 +1892,23 @@ class DelegatedFrameIsActivatedDuringCommit
// The activate to remove the layer should have happened before now.
base::AutoLock lock(activate_lock_);
EXPECT_EQ(3, activate_count_);
+
+ scoped_ptr<DelegatedFrameData> frame =
+ CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
+ SetFrameData(frame.Pass());
+
+ ReturnedResourceArray resources;
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ {
+ unsigned expected[] = {999, 555};
+ EXPECT_RESOURCES(expected, resources);
+ EXPECT_TRUE(TestAndResetAvailable());
+ }
break;
}
}
}
-
- virtual void AfterTest() OVERRIDE {}
-
base::Thread wait_thread_;
base::WaitableEvent wait_event_;
base::Lock activate_lock_;
@@ -1877,5 +1918,398 @@ 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);
+ }
+};
+
+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);
+ }
+};
+
+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());
+ break;
+ case 2:
+ // Create a second DelegatedRendererLayer using the same frame provider.
+ delegated_thief_ = CreateDelegatedLayer(frame_provider_.get());
+ root_->AddChild(delegated_thief_);
+
+ // And drop our ref on the frame provider so only the layers keep it
+ // alive.
+ frame_provider_ = NULL;
+ 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 and destroy it.
+ // No resources should be returned yet.
+ root_->AddChild(delegated_);
+ delegated_thief_->RemoveFromParent();
+ delegated_thief_ = NULL;
+ break;
+ case 5:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Remove the first layer from the tree again. The resources are still
+ // held by the main thread layer.
+ delegated_->RemoveFromParent();
+ break;
+ case 6:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Destroy the layer and the resources should be returned immediately.
+ delegated_ = NULL;
+
+ 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);
+ }
+
+ scoped_refptr<DelegatedRendererLayer> delegated_thief_;
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayers);
+
+class LayerTreeHostDelegatedTestRemoveAndAddToTree
+ : 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:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Remove the layer from the tree. The resources should not be returned
+ // since they are still on the main thread layer.
+ delegated_->RemoveFromParent();
+ break;
+ case 3:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Add the layer back to the tree.
+ layer_tree_host()->root_layer()->AddChild(delegated_);
+ break;
+ case 4:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Set a new frame. Resources should be returned.
+ frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
+ AddTextureQuad(frame.get(), 888);
+ AddTransferableResource(frame.get(), 888);
+ AddTextureQuad(frame.get(), 777);
+ AddTransferableResource(frame.get(), 777);
+ SetFrameData(frame.Pass());
+ break;
+ case 5:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ {
+ unsigned expected[] = {555, 999};
+ EXPECT_RESOURCES(expected, resources);
+ EXPECT_TRUE(TestAndResetAvailable());
+ }
+
+ // Destroy the layer.
+ delegated_->RemoveFromParent();
+ delegated_ = NULL;
+ break;
+ case 6:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Destroy the frame provider. Resources should be returned.
+ frame_provider_ = NULL;
+
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ {
+ unsigned expected[] = {777, 888};
+ EXPECT_RESOURCES(expected, resources);
+ EXPECT_TRUE(TestAndResetAvailable());
+ }
+ EndTest();
+ break;
+ }
+ }
+
+ virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
+ bool result) OVERRIDE {
+ ReturnUnusedResourcesFromParent(host_impl);
+ }
+
+ scoped_refptr<DelegatedRendererLayer> delegated_thief_;
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestRemoveAndAddToTree);
+
+class LayerTreeHostDelegatedTestRemoveAndChangeResources
+ : 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:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Remove the layer from the tree. The resources should not be returned
+ // since they are still on the main thread layer.
+ delegated_->RemoveFromParent();
+ break;
+ case 3:
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Set a new frame. Resources should be returned immediately.
+ frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
+ AddTextureQuad(frame.get(), 888);
+ AddTransferableResource(frame.get(), 888);
+ AddTextureQuad(frame.get(), 777);
+ AddTransferableResource(frame.get(), 777);
+ SetFrameData(frame.Pass());
+
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ {
+ unsigned expected[] = {555, 999};
+ EXPECT_RESOURCES(expected, resources);
+ EXPECT_TRUE(TestAndResetAvailable());
+ resources.clear();
+ }
+
+ // Destroy the frame provider.
+ frame_provider_ = NULL;
+
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ EXPECT_EQ(0u, resources.size());
+ EXPECT_FALSE(TestAndResetAvailable());
+
+ // Destroy the layer. Resources should be returned.
+ delegated_ = NULL;
+
+ resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
+ {
+ unsigned expected[] = {777, 888};
+ EXPECT_RESOURCES(expected, resources);
+ EXPECT_TRUE(TestAndResetAvailable());
+ }
+ EndTest();
+ break;
+ }
+ }
+
+ virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
+ bool result) OVERRIDE {
+ ReturnUnusedResourcesFromParent(host_impl);
+ }
+
+ scoped_refptr<DelegatedRendererLayer> delegated_thief_;
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(
+ LayerTreeHostDelegatedTestRemoveAndChangeResources);
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/trees/layer_tree_host_unittest_context.cc ('k') | content/browser/renderer_host/render_widget_host_view_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698