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/output/software_renderer.h" | 5 #include "cc/output/software_renderer.h" |
6 | 6 |
7 #include "cc/layers/quad_sink.h" | 7 #include "cc/layers/quad_sink.h" |
8 #include "cc/output/compositor_frame_metadata.h" | 8 #include "cc/output/compositor_frame_metadata.h" |
9 #include "cc/output/software_output_device.h" | 9 #include "cc/output/software_output_device.h" |
10 #include "cc/quads/render_pass.h" | 10 #include "cc/quads/render_pass.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 root_render_pass_id, outer_rect, outer_rect, gfx::Transform()); | 100 root_render_pass_id, outer_rect, outer_rect, gfx::Transform()); |
101 scoped_ptr<SolidColorDrawQuad> outer_quad = SolidColorDrawQuad::Create(); | 101 scoped_ptr<SolidColorDrawQuad> outer_quad = SolidColorDrawQuad::Create(); |
102 outer_quad->SetNew(shared_quad_state.get(), outer_rect, SK_ColorYELLOW); | 102 outer_quad->SetNew(shared_quad_state.get(), outer_rect, SK_ColorYELLOW); |
103 scoped_ptr<SolidColorDrawQuad> inner_quad = SolidColorDrawQuad::Create(); | 103 scoped_ptr<SolidColorDrawQuad> inner_quad = SolidColorDrawQuad::Create(); |
104 inner_quad->SetNew(shared_quad_state.get(), inner_rect, SK_ColorCYAN); | 104 inner_quad->SetNew(shared_quad_state.get(), inner_rect, SK_ColorCYAN); |
105 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 105 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
106 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 106 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
107 | 107 |
108 RenderPassList list; | 108 RenderPassList list; |
109 list.push_back(root_render_pass.PassAs<RenderPass>()); | 109 list.push_back(root_render_pass.PassAs<RenderPass>()); |
110 renderer()->DrawFrame(list); | 110 renderer()->DrawFrame(&list); |
111 | 111 |
112 scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * | 112 scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * |
113 DeviceViewportSize().height()]); | 113 DeviceViewportSize().height()]); |
114 renderer()->GetFramebufferPixels(pixels.get(), outer_rect); | 114 renderer()->GetFramebufferPixels(pixels.get(), outer_rect); |
115 | 115 |
116 // FIXME: This fails on Android. Endianness maybe? | 116 // FIXME: This fails on Android. Endianness maybe? |
117 // Yellow: expects 0xFFFFFF00, was 0xFF00FFFF on android. | 117 // Yellow: expects 0xFFFFFF00, was 0xFF00FFFF on android. |
118 // Cyan: expects 0xFF00FFFF, was 0xFFFFFF00 on android. | 118 // Cyan: expects 0xFF00FFFF, was 0xFFFFFF00 on android. |
119 // http://crbug.com/154528 | 119 // http://crbug.com/154528 |
120 #if !defined(OS_ANDROID) | 120 #if !defined(OS_ANDROID) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 inner_rect, | 186 inner_rect, |
187 resource_cyan, | 187 resource_cyan, |
188 gfx::RectF(inner_size), | 188 gfx::RectF(inner_size), |
189 inner_size, | 189 inner_size, |
190 false); | 190 false); |
191 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 191 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
192 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 192 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
193 | 193 |
194 RenderPassList list; | 194 RenderPassList list; |
195 list.push_back(root_render_pass.PassAs<RenderPass>()); | 195 list.push_back(root_render_pass.PassAs<RenderPass>()); |
196 renderer()->DrawFrame(list); | 196 renderer()->DrawFrame(&list); |
197 | 197 |
198 scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * | 198 scoped_array<SkColor> pixels(new SkColor[DeviceViewportSize().width() * |
199 DeviceViewportSize().height()]); | 199 DeviceViewportSize().height()]); |
200 renderer()->GetFramebufferPixels(pixels.get(), outer_rect); | 200 renderer()->GetFramebufferPixels(pixels.get(), outer_rect); |
201 | 201 |
202 EXPECT_EQ(SK_ColorYELLOW, pixels[0]); | 202 EXPECT_EQ(SK_ColorYELLOW, pixels[0]); |
203 EXPECT_EQ(SK_ColorYELLOW, pixels[outer_pixels - 1]); | 203 EXPECT_EQ(SK_ColorYELLOW, pixels[outer_pixels - 1]); |
204 EXPECT_EQ(SK_ColorCYAN, pixels[outer_size.width() + 1]); | 204 EXPECT_EQ(SK_ColorCYAN, pixels[outer_size.width() + 1]); |
205 EXPECT_EQ(SK_ColorCYAN, pixels[outer_pixels - outer_size.width() - 2]); | 205 EXPECT_EQ(SK_ColorCYAN, pixels[outer_pixels - outer_size.width() - 2]); |
206 } | 206 } |
207 | 207 |
208 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { | 208 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { |
209 gfx::Rect viewport_rect(0, 0, 100, 100); | 209 gfx::Rect viewport_rect(0, 0, 100, 100); |
210 size_t viewport_pixels = viewport_rect.width() * viewport_rect.height(); | 210 size_t viewport_pixels = viewport_rect.width() * viewport_rect.height(); |
211 set_viewport_size(viewport_rect.size()); | 211 set_viewport_size(viewport_rect.size()); |
212 set_should_clear_root_render_pass(false); | 212 set_should_clear_root_render_pass(false); |
213 InitializeRenderer(); | 213 InitializeRenderer(); |
214 | 214 |
215 RenderPassList list; | 215 RenderPassList list; |
216 scoped_array<SkColor> pixels(new SkColor[viewport_pixels]); | 216 scoped_array<SkColor> pixels(new SkColor[viewport_pixels]); |
217 | 217 |
218 // Draw a fullscreen green quad in a first frame. | 218 // Draw a fullscreen green quad in a first frame. |
219 RenderPass::Id root_clear_pass_id(1, 0); | 219 RenderPass::Id root_clear_pass_id(1, 0); |
220 TestRenderPass* root_clear_pass = | 220 TestRenderPass* root_clear_pass = AddRenderPass( |
221 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); | 221 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); |
222 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); | 222 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); |
223 | 223 |
224 renderer()->DecideRenderPassAllocationsForFrame(list); | 224 renderer()->DecideRenderPassAllocationsForFrame(list); |
225 renderer()->DrawFrame(list); | 225 renderer()->DrawFrame(&list); |
226 renderer()->GetFramebufferPixels(pixels.get(), viewport_rect); | 226 renderer()->GetFramebufferPixels(pixels.get(), viewport_rect); |
227 | 227 |
228 EXPECT_EQ(SK_ColorGREEN, pixels[0]); | 228 EXPECT_EQ(SK_ColorGREEN, pixels[0]); |
229 EXPECT_EQ(SK_ColorGREEN, pixels[viewport_pixels - 1]); | 229 EXPECT_EQ(SK_ColorGREEN, pixels[viewport_pixels - 1]); |
230 | 230 |
231 list.clear(); | 231 list.clear(); |
232 | 232 |
233 // Draw a smaller magenta rect without filling the viewport in a separate | 233 // Draw a smaller magenta rect without filling the viewport in a separate |
234 // frame. | 234 // frame. |
235 gfx::Rect smaller_rect(20, 20, 60, 60); | 235 gfx::Rect smaller_rect(20, 20, 60, 60); |
236 | 236 |
237 RenderPass::Id root_smaller_pass_id(2, 0); | 237 RenderPass::Id root_smaller_pass_id(2, 0); |
238 TestRenderPass* root_smaller_pass = AddRenderPass( | 238 TestRenderPass* root_smaller_pass = AddRenderPass( |
239 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); | 239 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); |
240 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); | 240 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); |
241 | 241 |
242 renderer()->DecideRenderPassAllocationsForFrame(list); | 242 renderer()->DecideRenderPassAllocationsForFrame(list); |
243 renderer()->DrawFrame(list); | 243 renderer()->DrawFrame(&list); |
244 renderer()->GetFramebufferPixels(pixels.get(), viewport_rect); | 244 renderer()->GetFramebufferPixels(pixels.get(), viewport_rect); |
245 | 245 |
246 // If we didn't clear, the borders should still be green. | 246 // If we didn't clear, the borders should still be green. |
247 EXPECT_EQ(SK_ColorGREEN, pixels[0]); | 247 EXPECT_EQ(SK_ColorGREEN, pixels[0]); |
248 EXPECT_EQ(SK_ColorGREEN, pixels[viewport_pixels - 1]); | 248 EXPECT_EQ(SK_ColorGREEN, pixels[viewport_pixels - 1]); |
249 | 249 |
250 EXPECT_EQ( | 250 EXPECT_EQ( |
251 SK_ColorMAGENTA, | 251 SK_ColorMAGENTA, |
252 pixels[smaller_rect.y() * viewport_rect.width() + smaller_rect.x()]); | 252 pixels[smaller_rect.y() * viewport_rect.width() + smaller_rect.x()]); |
253 EXPECT_EQ(SK_ColorMAGENTA, | 253 EXPECT_EQ(SK_ColorMAGENTA, |
254 pixels[(smaller_rect.bottom() - 1) * viewport_rect.width() + | 254 pixels[(smaller_rect.bottom() - 1) * viewport_rect.width() + |
255 smaller_rect.right() - 1]); | 255 smaller_rect.right() - 1]); |
256 } | 256 } |
257 | 257 |
258 } // namespace | 258 } // namespace |
259 } // namespace cc | 259 } // namespace cc |
OLD | NEW |