| 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 |