| 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 3fd040bc31ce4e2dc9f7e14f8de56b9d762c6520..5363d683e58603003aa753aedce08005b4e6d6c9 100644
|
| --- a/cc/trees/layer_tree_host_unittest_delegated.cc
|
| +++ b/cc/trees/layer_tree_host_unittest_delegated.cc
|
| @@ -16,6 +16,7 @@
|
| #include "cc/output/compositor_frame.h"
|
| #include "cc/output/compositor_frame_ack.h"
|
| #include "cc/output/delegated_frame_data.h"
|
| +#include "cc/quads/render_pass_draw_quad.h"
|
| #include "cc/quads/shared_quad_state.h"
|
| #include "cc/quads/texture_draw_quad.h"
|
| #include "cc/resources/returned_resource.h"
|
| @@ -154,6 +155,39 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest {
|
| frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>());
|
| }
|
|
|
| + void AddRenderPass(DelegatedFrameData* frame,
|
| + RenderPass::Id id,
|
| + gfx::Rect output_rect,
|
| + gfx::Rect damage_rect,
|
| + const FilterOperations& filters,
|
| + const FilterOperations& background_filters) {
|
| + for (size_t i = 0; i < frame->render_pass_list.size(); ++i)
|
| + DCHECK(id != frame->render_pass_list[i]->id);
|
| +
|
| + scoped_ptr<RenderPass> pass(RenderPass::Create());
|
| + pass->SetNew(id,
|
| + output_rect,
|
| + damage_rect,
|
| + gfx::Transform());
|
| + frame->render_pass_list.push_back(pass.Pass());
|
| +
|
| + scoped_ptr<SharedQuadState> sqs = SharedQuadState::Create();
|
| + scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
|
| +
|
| + quad->SetNew(sqs.get(),
|
| + output_rect,
|
| + id,
|
| + false, // is_replica
|
| + 0, // mask_resource_id
|
| + damage_rect,
|
| + gfx::Rect(0, 0, 1, 1), // mask_uv_rect
|
| + filters,
|
| + skia::RefPtr<SkImageFilter>(),
|
| + background_filters);
|
| + frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass());
|
| + 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();
|
| @@ -338,6 +372,131 @@ class LayerTreeHostDelegatedTestCreateChildId
|
|
|
| SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId);
|
|
|
| +class LayerTreeHostDelegatedTestOffscreenContext_NoFilters
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + protected:
|
| + virtual void BeginTest() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame =
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1));
|
| + delegated_->SetFrameData(frame.Pass());
|
| +
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + EXPECT_FALSE(host_impl->offscreen_context_provider());
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostDelegatedTestOffscreenContext_NoFilters);
|
| +
|
| +class LayerTreeHostDelegatedTestOffscreenContext_Filters
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + protected:
|
| + virtual void BeginTest() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame =
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1));
|
| +
|
| + FilterOperations filters;
|
| + filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
|
| + AddRenderPass(frame.get(),
|
| + RenderPass::Id(2, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + filters,
|
| + FilterOperations());
|
| + delegated_->SetFrameData(frame.Pass());
|
| +
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + bool expect_context = !delegating_renderer();
|
| + EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostDelegatedTestOffscreenContext_Filters);
|
| +
|
| +class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters
|
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| + protected:
|
| + virtual void BeginTest() OVERRIDE {
|
| + scoped_ptr<DelegatedFrameData> frame =
|
| + CreateFrameData(gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1));
|
| +
|
| + FilterOperations filters;
|
| + filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
|
| + AddRenderPass(frame.get(),
|
| + RenderPass::Id(2, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + FilterOperations(),
|
| + filters);
|
| + delegated_->SetFrameData(frame.Pass());
|
| +
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + bool expect_context = !delegating_renderer();
|
| + EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters);
|
| +
|
| +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));
|
| +
|
| + FilterOperations filters;
|
| + filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
|
| + AddRenderPass(frame.get(),
|
| + RenderPass::Id(2, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + gfx::Rect(0, 0, 1, 1),
|
| + filters,
|
| + FilterOperations());
|
| +
|
| + delegated_->RemoveFromParent();
|
| + delegated_->SetFrameData(frame.Pass());
|
| + layer_tree_host()->root_layer()->AddChild(delegated_);
|
| +
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + bool expect_context = !delegating_renderer();
|
| + EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree);
|
| +
|
| class LayerTreeHostDelegatedTestLayerUsesFrameDamage
|
| : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
|
| public:
|
|
|