| 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 "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "cc/output/compositor_frame_metadata.h" | 8 #include "cc/output/compositor_frame_metadata.h" |
| 9 #include "cc/output/copy_output_request.h" | 9 #include "cc/output/copy_output_request.h" |
| 10 #include "cc/output/copy_output_result.h" | 10 #include "cc/output/copy_output_result.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 | 93 |
| 94 TEST_F(SoftwareRendererTest, SolidColorQuad) { | 94 TEST_F(SoftwareRendererTest, SolidColorQuad) { |
| 95 gfx::Size outer_size(100, 100); | 95 gfx::Size outer_size(100, 100); |
| 96 gfx::Size inner_size(98, 98); | 96 gfx::Size inner_size(98, 98); |
| 97 gfx::Rect outer_rect(outer_size); | 97 gfx::Rect outer_rect(outer_size); |
| 98 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size); | 98 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size); |
| 99 gfx::Rect visible_rect(gfx::Point(1, 2), gfx::Size(98, 97)); | 99 gfx::Rect visible_rect(gfx::Point(1, 2), gfx::Size(98, 97)); |
| 100 | 100 |
| 101 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); | 101 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); |
| 102 | 102 |
| 103 RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1); | 103 RenderPassId root_render_pass_id = RenderPassId(1, 1); |
| 104 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); | 104 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); |
| 105 root_render_pass->SetNew( | 105 root_render_pass->SetNew( |
| 106 root_render_pass_id, outer_rect, outer_rect, gfx::Transform()); | 106 root_render_pass_id, outer_rect, outer_rect, gfx::Transform()); |
| 107 SharedQuadState* shared_quad_state = | 107 SharedQuadState* shared_quad_state = |
| 108 root_render_pass->CreateAndAppendSharedQuadState(); | 108 root_render_pass->CreateAndAppendSharedQuadState(); |
| 109 shared_quad_state->SetAll(gfx::Transform(), | 109 shared_quad_state->SetAll(gfx::Transform(), |
| 110 outer_size, | 110 outer_size, |
| 111 outer_rect, | 111 outer_rect, |
| 112 outer_rect, | 112 outer_rect, |
| 113 false, | 113 false, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 gfx::Rect(outer_size), | 176 gfx::Rect(outer_size), |
| 177 gfx::Vector2d()); | 177 gfx::Vector2d()); |
| 178 resource_provider()->SetPixels(resource_cyan, | 178 resource_provider()->SetPixels(resource_cyan, |
| 179 static_cast<uint8_t*>(cyan_tile.getPixels()), | 179 static_cast<uint8_t*>(cyan_tile.getPixels()), |
| 180 gfx::Rect(inner_size), | 180 gfx::Rect(inner_size), |
| 181 gfx::Rect(inner_size), | 181 gfx::Rect(inner_size), |
| 182 gfx::Vector2d()); | 182 gfx::Vector2d()); |
| 183 | 183 |
| 184 gfx::Rect root_rect = outer_rect; | 184 gfx::Rect root_rect = outer_rect; |
| 185 | 185 |
| 186 RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1); | 186 RenderPassId root_render_pass_id = RenderPassId(1, 1); |
| 187 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); | 187 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); |
| 188 root_render_pass->SetNew( | 188 root_render_pass->SetNew( |
| 189 root_render_pass_id, root_rect, root_rect, gfx::Transform()); | 189 root_render_pass_id, root_rect, root_rect, gfx::Transform()); |
| 190 SharedQuadState* shared_quad_state = | 190 SharedQuadState* shared_quad_state = |
| 191 root_render_pass->CreateAndAppendSharedQuadState(); | 191 root_render_pass->CreateAndAppendSharedQuadState(); |
| 192 shared_quad_state->SetAll(gfx::Transform(), | 192 shared_quad_state->SetAll(gfx::Transform(), |
| 193 outer_size, | 193 outer_size, |
| 194 outer_rect, | 194 outer_rect, |
| 195 outer_rect, | 195 outer_rect, |
| 196 false, | 196 false, |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 SK_ColorYELLOW); | 258 SK_ColorYELLOW); |
| 259 | 259 |
| 260 resource_provider()->SetPixels(resource_cyan, | 260 resource_provider()->SetPixels(resource_cyan, |
| 261 static_cast<uint8_t*>(cyan_tile.getPixels()), | 261 static_cast<uint8_t*>(cyan_tile.getPixels()), |
| 262 gfx::Rect(tile_size), | 262 gfx::Rect(tile_size), |
| 263 gfx::Rect(tile_size), | 263 gfx::Rect(tile_size), |
| 264 gfx::Vector2d()); | 264 gfx::Vector2d()); |
| 265 | 265 |
| 266 gfx::Rect root_rect(tile_size); | 266 gfx::Rect root_rect(tile_size); |
| 267 | 267 |
| 268 RenderPass::Id root_render_pass_id = RenderPass::Id(1, 1); | 268 RenderPassId root_render_pass_id = RenderPassId(1, 1); |
| 269 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); | 269 scoped_ptr<TestRenderPass> root_render_pass = TestRenderPass::Create(); |
| 270 root_render_pass->SetNew( | 270 root_render_pass->SetNew( |
| 271 root_render_pass_id, root_rect, root_rect, gfx::Transform()); | 271 root_render_pass_id, root_rect, root_rect, gfx::Transform()); |
| 272 SharedQuadState* shared_quad_state = | 272 SharedQuadState* shared_quad_state = |
| 273 root_render_pass->CreateAndAppendSharedQuadState(); | 273 root_render_pass->CreateAndAppendSharedQuadState(); |
| 274 shared_quad_state->SetAll(gfx::Transform(), | 274 shared_quad_state->SetAll(gfx::Transform(), |
| 275 tile_size, | 275 tile_size, |
| 276 tile_rect, | 276 tile_rect, |
| 277 tile_rect, | 277 tile_rect, |
| 278 false, | 278 false, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { | 324 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { |
| 325 float device_scale_factor = 1.f; | 325 float device_scale_factor = 1.f; |
| 326 gfx::Rect device_viewport_rect(0, 0, 100, 100); | 326 gfx::Rect device_viewport_rect(0, 0, 100, 100); |
| 327 | 327 |
| 328 settings_.should_clear_root_render_pass = false; | 328 settings_.should_clear_root_render_pass = false; |
| 329 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); | 329 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); |
| 330 | 330 |
| 331 RenderPassList list; | 331 RenderPassList list; |
| 332 | 332 |
| 333 // Draw a fullscreen green quad in a first frame. | 333 // Draw a fullscreen green quad in a first frame. |
| 334 RenderPass::Id root_clear_pass_id(1, 0); | 334 RenderPassId root_clear_pass_id(1, 0); |
| 335 TestRenderPass* root_clear_pass = AddRenderPass( | 335 TestRenderPass* root_clear_pass = AddRenderPass( |
| 336 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); | 336 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); |
| 337 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); | 337 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); |
| 338 | 338 |
| 339 renderer()->DecideRenderPassAllocationsForFrame(list); | 339 renderer()->DecideRenderPassAllocationsForFrame(list); |
| 340 | 340 |
| 341 scoped_ptr<SkBitmap> output = | 341 scoped_ptr<SkBitmap> output = |
| 342 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); | 342 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| 343 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); | 343 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); |
| 344 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); | 344 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); |
| 345 | 345 |
| 346 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); | 346 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); |
| 347 EXPECT_EQ(SK_ColorGREEN, | 347 EXPECT_EQ(SK_ColorGREEN, |
| 348 output->getColor(device_viewport_rect.width() - 1, | 348 output->getColor(device_viewport_rect.width() - 1, |
| 349 device_viewport_rect.height() - 1)); | 349 device_viewport_rect.height() - 1)); |
| 350 | 350 |
| 351 list.clear(); | 351 list.clear(); |
| 352 | 352 |
| 353 // Draw a smaller magenta rect without filling the viewport in a separate | 353 // Draw a smaller magenta rect without filling the viewport in a separate |
| 354 // frame. | 354 // frame. |
| 355 gfx::Rect smaller_rect(20, 20, 60, 60); | 355 gfx::Rect smaller_rect(20, 20, 60, 60); |
| 356 | 356 |
| 357 RenderPass::Id root_smaller_pass_id(2, 0); | 357 RenderPassId root_smaller_pass_id(2, 0); |
| 358 TestRenderPass* root_smaller_pass = AddRenderPass( | 358 TestRenderPass* root_smaller_pass = AddRenderPass( |
| 359 &list, root_smaller_pass_id, device_viewport_rect, gfx::Transform()); | 359 &list, root_smaller_pass_id, device_viewport_rect, gfx::Transform()); |
| 360 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); | 360 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); |
| 361 | 361 |
| 362 renderer()->DecideRenderPassAllocationsForFrame(list); | 362 renderer()->DecideRenderPassAllocationsForFrame(list); |
| 363 | 363 |
| 364 output = DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); | 364 output = DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); |
| 365 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); | 365 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth); |
| 366 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); | 366 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight); |
| 367 | 367 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 380 | 380 |
| 381 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { | 381 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { |
| 382 float device_scale_factor = 1.f; | 382 float device_scale_factor = 1.f; |
| 383 gfx::Rect device_viewport_rect(0, 0, 100, 100); | 383 gfx::Rect device_viewport_rect(0, 0, 100, 100); |
| 384 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); | 384 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); |
| 385 | 385 |
| 386 RenderPassList list; | 386 RenderPassList list; |
| 387 | 387 |
| 388 // Pass drawn as inner quad is magenta. | 388 // Pass drawn as inner quad is magenta. |
| 389 gfx::Rect smaller_rect(20, 20, 60, 60); | 389 gfx::Rect smaller_rect(20, 20, 60, 60); |
| 390 RenderPass::Id smaller_pass_id(2, 1); | 390 RenderPassId smaller_pass_id(2, 1); |
| 391 TestRenderPass* smaller_pass = | 391 TestRenderPass* smaller_pass = |
| 392 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform()); | 392 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform()); |
| 393 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA); | 393 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA); |
| 394 | 394 |
| 395 // Root pass is green. | 395 // Root pass is green. |
| 396 RenderPass::Id root_clear_pass_id(1, 0); | 396 RenderPassId root_clear_pass_id(1, 0); |
| 397 TestRenderPass* root_clear_pass = AddRenderPass( | 397 TestRenderPass* root_clear_pass = AddRenderPass( |
| 398 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); | 398 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); |
| 399 AddRenderPassQuad(root_clear_pass, smaller_pass); | 399 AddRenderPassQuad(root_clear_pass, smaller_pass); |
| 400 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); | 400 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); |
| 401 | 401 |
| 402 // Interior pass quad has smaller visible rect. | 402 // Interior pass quad has smaller visible rect. |
| 403 gfx::Rect interior_visible_rect(30, 30, 40, 40); | 403 gfx::Rect interior_visible_rect(30, 30, 40, 40); |
| 404 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; | 404 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; |
| 405 | 405 |
| 406 renderer()->DecideRenderPassAllocationsForFrame(list); | 406 renderer()->DecideRenderPassAllocationsForFrame(list); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 425 EXPECT_EQ( | 425 EXPECT_EQ( |
| 426 SK_ColorMAGENTA, | 426 SK_ColorMAGENTA, |
| 427 output->getColor(interior_visible_rect.x(), interior_visible_rect.y())); | 427 output->getColor(interior_visible_rect.x(), interior_visible_rect.y())); |
| 428 EXPECT_EQ(SK_ColorMAGENTA, | 428 EXPECT_EQ(SK_ColorMAGENTA, |
| 429 output->getColor(interior_visible_rect.right() - 1, | 429 output->getColor(interior_visible_rect.right() - 1, |
| 430 interior_visible_rect.bottom() - 1)); | 430 interior_visible_rect.bottom() - 1)); |
| 431 } | 431 } |
| 432 | 432 |
| 433 } // namespace | 433 } // namespace |
| 434 } // namespace cc | 434 } // namespace cc |
| OLD | NEW |