delegating_renderer_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/output/delegating_renderer.h" 6 7#include "cc/test/fake_output_surface.h" 8#include "cc/test/layer_tree_test.h" 9#include "cc/test/render_pass_test_common.h" 10#include "cc/test/render_pass_test_utils.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13namespace cc { 14 15class DelegatingRendererTest : public LayerTreeTest { 16 public: 17 DelegatingRendererTest() : LayerTreeTest(), output_surface_(NULL) {} 18 virtual ~DelegatingRendererTest() {} 19 20 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { 21 scoped_ptr<TestWebGraphicsContext3D> context3d = 22 TestWebGraphicsContext3D::Create( 23 WebKit::WebGraphicsContext3D::Attributes()); 24 context3d_ = context3d.get(); 25 scoped_ptr<FakeOutputSurface> output_surface = 26 FakeOutputSurface::CreateDelegating3d( 27 context3d.PassAs<WebKit::WebGraphicsContext3D>()); 28 output_surface_ = output_surface.get(); 29 return output_surface.PassAs<OutputSurface>(); 30 } 31 32 protected: 33 TestWebGraphicsContext3D* context3d_; 34 FakeOutputSurface* output_surface_; 35}; 36 37class DelegatingRendererTestDraw : public DelegatingRendererTest { 38 public: 39 virtual void BeginTest() OVERRIDE { 40 layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f); 41 PostSetNeedsCommitToMainThread(); 42 } 43 44 virtual void AfterTest() OVERRIDE {} 45 46 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 47 LayerTreeHostImpl::FrameData* frame, 48 bool result) 49 OVERRIDE { 50 EXPECT_EQ(0u, output_surface_->num_sent_frames()); 51 52 const CompositorFrame& last_frame = output_surface_->last_sent_frame(); 53 EXPECT_FALSE(last_frame.delegated_frame_data); 54 EXPECT_FALSE(last_frame.gl_frame_data); 55 EXPECT_EQ(0.f, last_frame.metadata.min_page_scale_factor); 56 EXPECT_EQ(0.f, last_frame.metadata.max_page_scale_factor); 57 return true; 58 } 59 60 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 61 EXPECT_EQ(1u, output_surface_->num_sent_frames()); 62 63 const CompositorFrame& last_frame = output_surface_->last_sent_frame(); 64 DelegatedFrameData* last_frame_data = last_frame.delegated_frame_data.get(); 65 ASSERT_TRUE(last_frame.delegated_frame_data); 66 EXPECT_FALSE(last_frame.gl_frame_data); 67 EXPECT_EQ( 68 gfx::Rect(host_impl->device_viewport_size()).ToString(), 69 last_frame_data->render_pass_list.back()->output_rect.ToString()); 70 EXPECT_EQ(0.5f, last_frame.metadata.min_page_scale_factor); 71 EXPECT_EQ(4.f, last_frame.metadata.max_page_scale_factor); 72 73 EXPECT_EQ( 74 0u, last_frame.delegated_frame_data->resource_list.size()); 75 EXPECT_EQ(1u, last_frame.delegated_frame_data->render_pass_list.size()); 76 77 EndTest(); 78 } 79}; 80 81SINGLE_AND_MULTI_THREAD_TEST_F(DelegatingRendererTestDraw); 82 83class DelegatingRendererTestResources : public DelegatingRendererTest { 84 public: 85 virtual void BeginTest() OVERRIDE { 86 PostSetNeedsCommitToMainThread(); 87 } 88 89 virtual void AfterTest() OVERRIDE {} 90 91 virtual bool PrepareToDrawOnThread( 92 LayerTreeHostImpl* host_impl, 93 LayerTreeHostImpl::FrameData* frame, 94 bool result) OVERRIDE { 95 frame->render_passes.clear(); 96 frame->render_passes_by_id.clear(); 97 98 TestRenderPass* child_pass = AddRenderPass( 99 &frame->render_passes, 100 RenderPass::Id(2, 1), 101 gfx::Rect(3, 3, 10, 10), 102 gfx::Transform()); 103 child_pass->AppendOneOfEveryQuadType( 104 host_impl->resource_provider(), RenderPass::Id(0, 0)); 105 106 TestRenderPass* pass = AddRenderPass( 107 &frame->render_passes, 108 RenderPass::Id(1, 1), 109 gfx::Rect(3, 3, 10, 10), 110 gfx::Transform()); 111 pass->AppendOneOfEveryQuadType( 112 host_impl->resource_provider(), child_pass->id); 113 return true; 114 } 115 116 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 117 EXPECT_EQ(1u, output_surface_->num_sent_frames()); 118 119 const CompositorFrame& last_frame = output_surface_->last_sent_frame(); 120 ASSERT_TRUE(last_frame.delegated_frame_data); 121 122 EXPECT_EQ(2u, last_frame.delegated_frame_data->render_pass_list.size()); 123 // Each render pass has 9 resources in it. And the root render pass has a 124 // mask resource used when drawing the child render pass. The number 9 may 125 // change if AppendOneOfEveryQuadType() is updated, and the value here 126 // should be updated accordingly. 127 EXPECT_EQ( 128 19u, last_frame.delegated_frame_data->resource_list.size()); 129 130 EndTest(); 131 } 132}; 133 134SINGLE_AND_MULTI_THREAD_TEST_F(DelegatingRendererTestResources); 135 136} // namespace cc 137