OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/gl_renderer.h" | 5 #include "cc/gl_renderer.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "cc/draw_quad.h" | 9 #include "cc/draw_quad.h" |
10 #include "cc/prioritized_resource_manager.h" | 10 #include "cc/prioritized_resource_manager.h" |
(...skipping 25 matching lines...) Expand all Loading... | |
36 } | 36 } |
37 virtual void didLoseOutputSurface() OVERRIDE { } | 37 virtual void didLoseOutputSurface() OVERRIDE { } |
38 virtual void onSwapBuffersComplete() OVERRIDE { } | 38 virtual void onSwapBuffersComplete() OVERRIDE { } |
39 virtual void setFullRootLayerDamage() OVERRIDE { } | 39 virtual void setFullRootLayerDamage() OVERRIDE { } |
40 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy&) OVERRIDE {} | 40 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy&) OVERRIDE {} |
41 virtual void enforceManagedMemoryPolicy( | 41 virtual void enforceManagedMemoryPolicy( |
42 const ManagedMemoryPolicy&) OVERRIDE {} | 42 const ManagedMemoryPolicy&) OVERRIDE {} |
43 virtual bool hasImplThread() const OVERRIDE { return false; } | 43 virtual bool hasImplThread() const OVERRIDE { return false; } |
44 }; | 44 }; |
45 | 45 |
46 | |
47 class GLRendererPixelTest : public testing::Test { | 46 class GLRendererPixelTest : public testing::Test { |
48 protected: | 47 protected: |
49 GLRendererPixelTest() {} | 48 GLRendererPixelTest() {} |
50 | 49 |
51 virtual void SetUp() { | 50 virtual void SetUp() { |
52 gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL); | 51 gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL); |
53 output_surface_ = PixelTestOutputSurface::create(); | 52 output_surface_ = PixelTestOutputSurface::create(); |
54 resource_provider_ = ResourceProvider::create(output_surface_.get()); | 53 resource_provider_ = ResourceProvider::create(output_surface_.get()); |
55 renderer_ = GLRenderer::create(&fake_client_, resource_provider_.get()); | 54 renderer_ = GLRenderer::create(&fake_client_, resource_provider_.get()); |
56 } | 55 } |
57 | 56 |
57 bool PixelsMatchReference(FilePath ref_file, gfx::Rect viewport_rect) { | |
58 SkBitmap bitmap; | |
59 bitmap.setConfig(SkBitmap::kARGB_8888_Config, | |
60 viewport_rect.width(), viewport_rect.height()); | |
61 bitmap.allocPixels(); | |
62 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels()); | |
63 renderer_->getFramebufferPixels(pixels, viewport_rect); | |
64 | |
65 FilePath test_data_dir; | |
66 if (!PathService::Get(cc::test::DIR_TEST_DATA, &test_data_dir)) | |
67 return false; | |
68 | |
69 return test::IsSameAsPNGFile(bitmap, test_data_dir.Append(ref_file)); | |
70 } | |
71 | |
58 scoped_ptr<OutputSurface> output_surface_; | 72 scoped_ptr<OutputSurface> output_surface_; |
59 FakeRendererClient fake_client_; | 73 FakeRendererClient fake_client_; |
60 scoped_ptr<ResourceProvider> resource_provider_; | 74 scoped_ptr<ResourceProvider> resource_provider_; |
61 scoped_ptr<GLRenderer> renderer_; | 75 scoped_ptr<GLRenderer> renderer_; |
62 }; | 76 }; |
63 | 77 |
64 #if !defined(OS_ANDROID) | 78 scoped_ptr<RenderPass> CreateTestRenderPass(RenderPass::Id id, gfx::Rect rect) { |
65 TEST_F(GLRendererPixelTest, simpleGreenRect) { | 79 scoped_ptr<RenderPass> pass = RenderPass::Create(); |
66 gfx::Rect rect(0, 0, 200, 200); | |
67 | |
68 RenderPass::Id id(1, 1); | |
69 const gfx::Rect output_rect = rect; | 80 const gfx::Rect output_rect = rect; |
70 const gfx::RectF damage_rect = rect; | 81 const gfx::RectF damage_rect = rect; |
71 const gfx::Transform transform_to_root_target; | 82 const gfx::Transform transform_to_root_target; |
72 scoped_ptr<RenderPass> pass = RenderPass::Create(); | |
73 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); | 83 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); |
84 return pass.Pass(); | |
85 } | |
74 | 86 |
75 const gfx::Transform content_to_target_transform; | 87 scoped_ptr<SharedQuadState> CreateTestSharedQuadState( |
88 gfx::Transform content_to_target_transform, gfx::Rect rect) { | |
76 const gfx::Rect visible_content_rect = rect; | 89 const gfx::Rect visible_content_rect = rect; |
77 const gfx::Rect clipped_rect_in_target = rect; | 90 const gfx::Rect clipped_rect_in_target = rect; |
78 const gfx::Rect clip_rect = rect; | 91 const gfx::Rect clip_rect = rect; |
79 const bool is_clipped = false; | 92 const bool is_clipped = false; |
80 const float opacity = 1.0f; | 93 const float opacity = 1.0f; |
81 scoped_ptr<SharedQuadState> shared_state = SharedQuadState::Create(); | 94 scoped_ptr<SharedQuadState> shared_state = SharedQuadState::Create(); |
82 shared_state->SetAll(content_to_target_transform, | 95 shared_state->SetAll(content_to_target_transform, |
83 visible_content_rect, | 96 visible_content_rect, |
84 clipped_rect_in_target, | 97 clipped_rect_in_target, |
85 clip_rect, | 98 clip_rect, |
86 is_clipped, | 99 is_clipped, |
87 opacity); | 100 opacity); |
101 return shared_state.Pass(); | |
102 } | |
103 | |
104 scoped_ptr<DrawQuad> CreateTestRenderPassDrawQuad( | |
105 SharedQuadState* shared_state, gfx::Rect rect, RenderPass::Id pass_id) { | |
106 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create(); | |
107 quad->SetNew(shared_state, | |
108 rect, | |
109 pass_id, | |
110 false, // is_replica | |
111 0, // mask_resource_id | |
112 rect, // contents_changed_since_last_frame | |
113 0, // mask_tex_coord_scale_x | |
enne (OOO)
2012/12/12 23:41:54
I don't think this compiles.
jamesr
2012/12/13 01:15:06
Trybots agree! I think I'll rework this test anyw
| |
114 0, // mask_tex_coord_scale_y | |
115 0, // mask_tex_coord_scale_offset_x | |
116 0); // mask_tex_coord_scale_offset_y | |
117 | |
118 return quad.PassAs<DrawQuad>(); | |
119 } | |
120 | |
121 | |
122 #if !defined(OS_ANDROID) | |
123 TEST_F(GLRendererPixelTest, simpleGreenRect) { | |
124 gfx::Rect rect(0, 0, 200, 200); | |
125 | |
126 RenderPass::Id id(1, 1); | |
127 scoped_ptr<RenderPass> pass = CreateTestRenderPass(id, rect); | |
128 | |
129 gfx::Transform content_to_target_transform; | |
130 scoped_ptr<SharedQuadState> shared_state = | |
131 CreateTestSharedQuadState(content_to_target_transform, rect); | |
88 | 132 |
89 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); | 133 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
90 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); | 134 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); |
91 | 135 |
92 pass->quad_list.append(color_quad.PassAs<DrawQuad>()); | 136 pass->quad_list.append(color_quad.PassAs<DrawQuad>()); |
93 | 137 |
94 RenderPassList pass_list; | 138 RenderPassList pass_list; |
95 pass_list.push_back(pass.get()); | 139 pass_list.push_back(pass.get()); |
96 RenderPassIdHashMap pass_map; | 140 RenderPassIdHashMap pass_map; |
97 pass_map.add(id, pass.PassAs<RenderPass>()); | 141 pass_map.add(id, pass.PassAs<RenderPass>()); |
98 | 142 |
99 renderer_->drawFrame(pass_list, pass_map); | 143 renderer_->drawFrame(pass_list, pass_map); |
100 | 144 |
101 SkBitmap bitmap; | 145 EXPECT_TRUE(PixelsMatchReference(FilePath("green.png"), rect)); |
102 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 146 } |
103 bitmap.allocPixels(); | |
104 unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels()); | |
105 renderer_->getFramebufferPixels(pixels, gfx::Rect(0, 0, 200, 200)); | |
106 | 147 |
107 FilePath test_data_dir; | 148 void DrawFrameWithPassSize(gfx::Size pass_size, DirectRenderer* renderer) { |
108 ASSERT_TRUE(PathService::Get(cc::test::DIR_TEST_DATA, &test_data_dir)); | 149 gfx::Rect rect(0, 0, 200, 200); |
109 // test::WritePNGFile(bitmap, test_data_dir.AppendASCII("green.png")); | 150 |
110 EXPECT_TRUE(test::IsSameAsPNGFile(bitmap, | 151 RenderPass::Id root_pass_id(1, 1); |
111 test_data_dir.AppendASCII("green.png"))); | 152 scoped_ptr<RenderPass> root_pass = |
153 CreateTestRenderPass(root_pass_id, rect); | |
154 | |
155 RenderPass::Id child_pass_id(2, 2); | |
156 gfx::Rect pass_rect(pass_size); | |
157 scoped_ptr<RenderPass> child_pass = | |
158 CreateTestRenderPass(child_pass_id, pass_rect); | |
159 | |
160 gfx::Transform content_to_target_transform; | |
161 //content_to_target_transform.Scale(0.5, 0.5); | |
162 scoped_ptr<SharedQuadState> shared_state = | |
163 CreateTestSharedQuadState(content_to_target_transform, rect); | |
164 | |
165 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | |
166 blue->SetNew(shared_state.get(), gfx::Rect(0, 0, 100, 200), SK_ColorBLUE); | |
167 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | |
168 yellow->SetNew(shared_state.get(), gfx::Rect(100, 0, 100, 200), SK_ColorYELLOW ); | |
169 | |
170 child_pass->quad_list.append(blue.PassAs<DrawQuad>()); | |
171 child_pass->quad_list.append(yellow.PassAs<DrawQuad>()); | |
172 | |
173 scoped_ptr<SharedQuadState> pass_shared_state = | |
174 CreateTestSharedQuadState(gfx::Transform(), pass_rect); | |
175 root_pass->quad_list.append( | |
176 CreateTestRenderPassDrawQuad(pass_shared_state.get(), | |
177 pass_rect, | |
178 child_pass_id)); | |
179 | |
180 RenderPassList pass_list; | |
181 pass_list.push_back(child_pass.get()); | |
182 pass_list.push_back(root_pass.get()); | |
183 | |
184 RenderPassIdHashMap pass_map; | |
185 pass_map.add(child_pass_id, child_pass.Pass()); | |
186 pass_map.add(root_pass_id, root_pass.Pass()); | |
187 | |
188 renderer->decideRenderPassAllocationsForFrame(pass_list); | |
189 renderer->drawFrame(pass_list, pass_map); | |
190 } | |
191 | |
192 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { | |
193 gfx::Rect viewport_rect(200, 200); | |
194 | |
195 DrawFrameWithPassSize(gfx::Size(400, 400), renderer_.get()); | |
196 | |
197 DrawFrameWithPassSize(gfx::Size(200, 200), renderer_.get()); | |
198 | |
199 EXPECT_TRUE(PixelsMatchReference(FilePath("blue_yellow.png"), viewport_rect)); | |
112 } | 200 } |
113 #endif | 201 #endif |
114 | 202 |
115 } // namespace | 203 } // namespace |
116 } // namespace cc | 204 } // namespace cc |
OLD | NEW |