delegating_renderer_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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( 47 LayerTreeHostImpl*, LayerTreeHostImpl::FrameData* frame, bool result) 48 OVERRIDE { 49 EXPECT_EQ(0u, output_surface_->num_sent_frames()); 50 51 CompositorFrame& last_frame = output_surface_->last_sent_frame(); 52 EXPECT_FALSE(last_frame.delegated_frame_data); 53 EXPECT_FALSE(last_frame.gl_frame_data); 54 EXPECT_EQ(0.f, last_frame.metadata.min_page_scale_factor); 55 EXPECT_EQ(0.f, last_frame.metadata.max_page_scale_factor); 56 return true; 57 } 58 59 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 60 EXPECT_EQ(1u, output_surface_->num_sent_frames()); 61 62 CompositorFrame& last_frame = output_surface_->last_sent_frame(); 63 DelegatedFrameData* last_frame_data = last_frame.delegated_frame_data.get(); 64 ASSERT_TRUE(last_frame.delegated_frame_data); 65 EXPECT_FALSE(last_frame.gl_frame_data); 66 EXPECT_EQ( 67 gfx::Rect(host_impl->device_viewport_size()).ToString(), 68 last_frame_data->render_pass_list.back()->output_rect.ToString()); 69 EXPECT_EQ(0.5f, last_frame.metadata.min_page_scale_factor); 70 EXPECT_EQ(4.f, last_frame.metadata.max_page_scale_factor); 71 72 EXPECT_EQ( 73 0u, last_frame.delegated_frame_data->resource_list.size()); 74 EXPECT_EQ(1u, last_frame.delegated_frame_data->render_pass_list.size()); 75 76 EndTest(); 77 } 78}; 79 80SINGLE_AND_MULTI_THREAD_TEST_F(DelegatingRendererTestDraw) 81 82class DelegatingRendererTestResources : public DelegatingRendererTest { 83 public: 84 virtual void BeginTest() OVERRIDE { 85 PostSetNeedsCommitToMainThread(); 86 } 87 88 virtual void AfterTest() OVERRIDE {} 89 90 virtual bool PrepareToDrawOnThread( 91 LayerTreeHostImpl* host_impl, 92 LayerTreeHostImpl::FrameData* frame, 93 bool result) OVERRIDE { 94 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 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 7 resources in it. And the root render pass has a 124 // mask resource used when drawing the child render pass. The number 7 may 125 // change if AppendOneOfEveryQuadType is updated, and the value here should 126 // be updated accordingly. 127 EXPECT_EQ( 128 15u, 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