| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 inner_quad->visible_rect = visible_rect; | 88 inner_quad->visible_rect = visible_rect; |
| 89 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 89 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
| 90 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 90 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
| 91 | 91 |
| 92 RenderPassList list; | 92 RenderPassList list; |
| 93 list.push_back(root_render_pass.PassAs<RenderPass>()); | 93 list.push_back(root_render_pass.PassAs<RenderPass>()); |
| 94 | 94 |
| 95 float device_scale_factor = 1.f; | 95 float device_scale_factor = 1.f; |
| 96 gfx::Rect device_viewport_rect(outer_size); | 96 gfx::Rect device_viewport_rect(outer_size); |
| 97 renderer()->DrawFrame(&list, | 97 renderer()->DrawFrame(&list, |
| 98 NULL, | |
| 99 device_scale_factor, | 98 device_scale_factor, |
| 100 device_viewport_rect, | 99 device_viewport_rect, |
| 101 device_viewport_rect, | 100 device_viewport_rect, |
| 102 false); | 101 false); |
| 103 | 102 |
| 104 SkBitmap output; | 103 SkBitmap output; |
| 105 output.setConfig( | 104 output.setConfig( |
| 106 SkBitmap::kARGB_8888_Config, outer_rect.width(), outer_rect.height()); | 105 SkBitmap::kARGB_8888_Config, outer_rect.width(), outer_rect.height()); |
| 107 output.allocPixels(); | 106 output.allocPixels(); |
| 108 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); | 107 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 false); | 191 false); |
| 193 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 192 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
| 194 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 193 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
| 195 | 194 |
| 196 RenderPassList list; | 195 RenderPassList list; |
| 197 list.push_back(root_render_pass.PassAs<RenderPass>()); | 196 list.push_back(root_render_pass.PassAs<RenderPass>()); |
| 198 | 197 |
| 199 float device_scale_factor = 1.f; | 198 float device_scale_factor = 1.f; |
| 200 gfx::Rect device_viewport_rect(outer_size); | 199 gfx::Rect device_viewport_rect(outer_size); |
| 201 renderer()->DrawFrame(&list, | 200 renderer()->DrawFrame(&list, |
| 202 NULL, | |
| 203 device_scale_factor, | 201 device_scale_factor, |
| 204 device_viewport_rect, | 202 device_viewport_rect, |
| 205 device_viewport_rect, | 203 device_viewport_rect, |
| 206 false); | 204 false); |
| 207 | 205 |
| 208 SkBitmap output; | 206 SkBitmap output; |
| 209 output.setConfig( | 207 output.setConfig( |
| 210 SkBitmap::kARGB_8888_Config, outer_size.width(), outer_size.height()); | 208 SkBitmap::kARGB_8888_Config, outer_size.width(), outer_size.height()); |
| 211 output.allocPixels(); | 209 output.allocPixels(); |
| 212 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); | 210 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 false); | 271 false); |
| 274 quad->visible_rect = visible_rect; | 272 quad->visible_rect = visible_rect; |
| 275 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>()); | 273 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>()); |
| 276 | 274 |
| 277 RenderPassList list; | 275 RenderPassList list; |
| 278 list.push_back(root_render_pass.PassAs<RenderPass>()); | 276 list.push_back(root_render_pass.PassAs<RenderPass>()); |
| 279 | 277 |
| 280 float device_scale_factor = 1.f; | 278 float device_scale_factor = 1.f; |
| 281 gfx::Rect device_viewport_rect(tile_size); | 279 gfx::Rect device_viewport_rect(tile_size); |
| 282 renderer()->DrawFrame(&list, | 280 renderer()->DrawFrame(&list, |
| 283 NULL, | |
| 284 device_scale_factor, | 281 device_scale_factor, |
| 285 device_viewport_rect, | 282 device_viewport_rect, |
| 286 device_viewport_rect, | 283 device_viewport_rect, |
| 287 false); | 284 false); |
| 288 | 285 |
| 289 SkBitmap output; | 286 SkBitmap output; |
| 290 output.setConfig( | 287 output.setConfig( |
| 291 SkBitmap::kARGB_8888_Config, tile_size.width(), tile_size.height()); | 288 SkBitmap::kARGB_8888_Config, tile_size.width(), tile_size.height()); |
| 292 output.allocPixels(); | 289 output.allocPixels(); |
| 293 renderer()->GetFramebufferPixels(output.getPixels(), tile_rect); | 290 renderer()->GetFramebufferPixels(output.getPixels(), tile_rect); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 output.allocPixels(); | 325 output.allocPixels(); |
| 329 | 326 |
| 330 // Draw a fullscreen green quad in a first frame. | 327 // Draw a fullscreen green quad in a first frame. |
| 331 RenderPass::Id root_clear_pass_id(1, 0); | 328 RenderPass::Id root_clear_pass_id(1, 0); |
| 332 TestRenderPass* root_clear_pass = AddRenderPass( | 329 TestRenderPass* root_clear_pass = AddRenderPass( |
| 333 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); | 330 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); |
| 334 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); | 331 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); |
| 335 | 332 |
| 336 renderer()->DecideRenderPassAllocationsForFrame(list); | 333 renderer()->DecideRenderPassAllocationsForFrame(list); |
| 337 renderer()->DrawFrame(&list, | 334 renderer()->DrawFrame(&list, |
| 338 NULL, | |
| 339 device_scale_factor, | 335 device_scale_factor, |
| 340 viewport_rect, | 336 viewport_rect, |
| 341 viewport_rect, | 337 viewport_rect, |
| 342 false); | 338 false); |
| 343 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 339 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
| 344 | 340 |
| 345 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 341 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
| 346 EXPECT_EQ(SK_ColorGREEN, | 342 EXPECT_EQ(SK_ColorGREEN, |
| 347 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 343 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
| 348 | 344 |
| 349 list.clear(); | 345 list.clear(); |
| 350 | 346 |
| 351 // Draw a smaller magenta rect without filling the viewport in a separate | 347 // Draw a smaller magenta rect without filling the viewport in a separate |
| 352 // frame. | 348 // frame. |
| 353 gfx::Rect smaller_rect(20, 20, 60, 60); | 349 gfx::Rect smaller_rect(20, 20, 60, 60); |
| 354 | 350 |
| 355 RenderPass::Id root_smaller_pass_id(2, 0); | 351 RenderPass::Id root_smaller_pass_id(2, 0); |
| 356 TestRenderPass* root_smaller_pass = AddRenderPass( | 352 TestRenderPass* root_smaller_pass = AddRenderPass( |
| 357 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); | 353 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); |
| 358 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); | 354 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); |
| 359 | 355 |
| 360 renderer()->DecideRenderPassAllocationsForFrame(list); | 356 renderer()->DecideRenderPassAllocationsForFrame(list); |
| 361 renderer()->DrawFrame(&list, | 357 renderer()->DrawFrame(&list, |
| 362 NULL, | |
| 363 device_scale_factor, | 358 device_scale_factor, |
| 364 viewport_rect, | 359 viewport_rect, |
| 365 viewport_rect, | 360 viewport_rect, |
| 366 false); | 361 false); |
| 367 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 362 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
| 368 | 363 |
| 369 // If we didn't clear, the borders should still be green. | 364 // If we didn't clear, the borders should still be green. |
| 370 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 365 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
| 371 EXPECT_EQ(SK_ColorGREEN, | 366 EXPECT_EQ(SK_ColorGREEN, |
| 372 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 367 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 403 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); | 398 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); |
| 404 AddRenderPassQuad(root_clear_pass, smaller_pass); | 399 AddRenderPassQuad(root_clear_pass, smaller_pass); |
| 405 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); | 400 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); |
| 406 | 401 |
| 407 // Interior pass quad has smaller visible rect. | 402 // Interior pass quad has smaller visible rect. |
| 408 gfx::Rect interior_visible_rect(30, 30, 40, 40); | 403 gfx::Rect interior_visible_rect(30, 30, 40, 40); |
| 409 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; | 404 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; |
| 410 | 405 |
| 411 renderer()->DecideRenderPassAllocationsForFrame(list); | 406 renderer()->DecideRenderPassAllocationsForFrame(list); |
| 412 renderer()->DrawFrame(&list, | 407 renderer()->DrawFrame(&list, |
| 413 NULL, | |
| 414 device_scale_factor, | 408 device_scale_factor, |
| 415 viewport_rect, | 409 viewport_rect, |
| 416 viewport_rect, | 410 viewport_rect, |
| 417 false); | 411 false); |
| 418 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 412 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
| 419 | 413 |
| 420 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 414 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
| 421 EXPECT_EQ( | 415 EXPECT_EQ( |
| 422 SK_ColorGREEN, | 416 SK_ColorGREEN, |
| 423 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 417 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
| 424 | 418 |
| 425 // Part outside visible rect should remain green. | 419 // Part outside visible rect should remain green. |
| 426 EXPECT_EQ(SK_ColorGREEN, output.getColor(smaller_rect.x(), smaller_rect.y())); | 420 EXPECT_EQ(SK_ColorGREEN, output.getColor(smaller_rect.x(), smaller_rect.y())); |
| 427 EXPECT_EQ( | 421 EXPECT_EQ( |
| 428 SK_ColorGREEN, | 422 SK_ColorGREEN, |
| 429 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); | 423 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); |
| 430 | 424 |
| 431 EXPECT_EQ( | 425 EXPECT_EQ( |
| 432 SK_ColorMAGENTA, | 426 SK_ColorMAGENTA, |
| 433 output.getColor(interior_visible_rect.x(), interior_visible_rect.y())); | 427 output.getColor(interior_visible_rect.x(), interior_visible_rect.y())); |
| 434 EXPECT_EQ(SK_ColorMAGENTA, | 428 EXPECT_EQ(SK_ColorMAGENTA, |
| 435 output.getColor(interior_visible_rect.right() - 1, | 429 output.getColor(interior_visible_rect.right() - 1, |
| 436 interior_visible_rect.bottom() - 1)); | 430 interior_visible_rect.bottom() - 1)); |
| 437 } | 431 } |
| 438 | 432 |
| 439 } // namespace | 433 } // namespace |
| 440 } // namespace cc | 434 } // namespace cc |
| OLD | NEW |