| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
| 12 #include "base/containers/scoped_ptr_hash_map.h" | 12 #include "base/containers/scoped_ptr_hash_map.h" |
| 13 #include "cc/animation/scrollbar_animation_controller_thinning.h" | 13 #include "cc/animation/scrollbar_animation_controller_thinning.h" |
| 14 #include "cc/base/latency_info_swap_promise.h" | 14 #include "cc/base/latency_info_swap_promise.h" |
| 15 #include "cc/base/math_util.h" | 15 #include "cc/base/math_util.h" |
| 16 #include "cc/input/top_controls_manager.h" | 16 #include "cc/input/top_controls_manager.h" |
| 17 #include "cc/layers/append_quads_data.h" | 17 #include "cc/layers/append_quads_data.h" |
| 18 #include "cc/layers/delegated_renderer_layer_impl.h" | 18 #include "cc/layers/delegated_renderer_layer_impl.h" |
| 19 #include "cc/layers/heads_up_display_layer_impl.h" | 19 #include "cc/layers/heads_up_display_layer_impl.h" |
| 20 #include "cc/layers/io_surface_layer_impl.h" | 20 #include "cc/layers/io_surface_layer_impl.h" |
| 21 #include "cc/layers/layer_impl.h" | 21 #include "cc/layers/layer_impl.h" |
| 22 #include "cc/layers/painted_scrollbar_layer_impl.h" | 22 #include "cc/layers/painted_scrollbar_layer_impl.h" |
| 23 #include "cc/layers/quad_sink.h" | |
| 24 #include "cc/layers/render_surface_impl.h" | 23 #include "cc/layers/render_surface_impl.h" |
| 25 #include "cc/layers/solid_color_layer_impl.h" | 24 #include "cc/layers/solid_color_layer_impl.h" |
| 26 #include "cc/layers/solid_color_scrollbar_layer_impl.h" | 25 #include "cc/layers/solid_color_scrollbar_layer_impl.h" |
| 27 #include "cc/layers/texture_layer_impl.h" | 26 #include "cc/layers/texture_layer_impl.h" |
| 28 #include "cc/layers/tiled_layer_impl.h" | 27 #include "cc/layers/tiled_layer_impl.h" |
| 29 #include "cc/layers/video_layer_impl.h" | 28 #include "cc/layers/video_layer_impl.h" |
| 30 #include "cc/output/begin_frame_args.h" | 29 #include "cc/output/begin_frame_args.h" |
| 31 #include "cc/output/compositor_frame_ack.h" | 30 #include "cc/output/compositor_frame_ack.h" |
| 32 #include "cc/output/compositor_frame_metadata.h" | 31 #include "cc/output/compositor_frame_metadata.h" |
| 33 #include "cc/output/copy_output_request.h" | 32 #include "cc/output/copy_output_request.h" |
| (...skipping 1613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1647 } | 1646 } |
| 1648 | 1647 |
| 1649 virtual bool WillDraw(DrawMode draw_mode, ResourceProvider* provider) | 1648 virtual bool WillDraw(DrawMode draw_mode, ResourceProvider* provider) |
| 1650 OVERRIDE { | 1649 OVERRIDE { |
| 1651 will_draw_called_ = true; | 1650 will_draw_called_ = true; |
| 1652 if (will_draw_returns_false_) | 1651 if (will_draw_returns_false_) |
| 1653 return false; | 1652 return false; |
| 1654 return LayerImpl::WillDraw(draw_mode, provider); | 1653 return LayerImpl::WillDraw(draw_mode, provider); |
| 1655 } | 1654 } |
| 1656 | 1655 |
| 1657 virtual void AppendQuads(QuadSink* quad_sink, | 1656 virtual void AppendQuads(RenderPass* render_pass, |
| 1657 const OcclusionTracker<LayerImpl>& occlusion_tracker, |
| 1658 AppendQuadsData* append_quads_data) OVERRIDE { | 1658 AppendQuadsData* append_quads_data) OVERRIDE { |
| 1659 append_quads_called_ = true; | 1659 append_quads_called_ = true; |
| 1660 LayerImpl::AppendQuads(quad_sink, append_quads_data); | 1660 LayerImpl::AppendQuads(render_pass, occlusion_tracker, append_quads_data); |
| 1661 } | 1661 } |
| 1662 | 1662 |
| 1663 virtual void DidDraw(ResourceProvider* provider) OVERRIDE { | 1663 virtual void DidDraw(ResourceProvider* provider) OVERRIDE { |
| 1664 did_draw_called_ = true; | 1664 did_draw_called_ = true; |
| 1665 LayerImpl::DidDraw(provider); | 1665 LayerImpl::DidDraw(provider); |
| 1666 } | 1666 } |
| 1667 | 1667 |
| 1668 bool will_draw_called() const { return will_draw_called_; } | 1668 bool will_draw_called() const { return will_draw_called_; } |
| 1669 bool append_quads_called() const { return append_quads_called_; } | 1669 bool append_quads_called() const { return append_quads_called_; } |
| 1670 bool did_draw_called() const { return did_draw_called_; } | 1670 bool did_draw_called() const { return did_draw_called_; } |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1868 ResourceProvider* resource_provider) { | 1868 ResourceProvider* resource_provider) { |
| 1869 return scoped_ptr<LayerImpl>( | 1869 return scoped_ptr<LayerImpl>( |
| 1870 new MissingTextureAnimatingLayer(tree_impl, | 1870 new MissingTextureAnimatingLayer(tree_impl, |
| 1871 id, | 1871 id, |
| 1872 tile_missing, | 1872 tile_missing, |
| 1873 had_incomplete_tile, | 1873 had_incomplete_tile, |
| 1874 animating, | 1874 animating, |
| 1875 resource_provider)); | 1875 resource_provider)); |
| 1876 } | 1876 } |
| 1877 | 1877 |
| 1878 virtual void AppendQuads(QuadSink* quad_sink, | 1878 virtual void AppendQuads(RenderPass* render_pass, |
| 1879 const OcclusionTracker<LayerImpl>& occlusion_tracker, |
| 1879 AppendQuadsData* append_quads_data) OVERRIDE { | 1880 AppendQuadsData* append_quads_data) OVERRIDE { |
| 1880 LayerImpl::AppendQuads(quad_sink, append_quads_data); | 1881 LayerImpl::AppendQuads(render_pass, occlusion_tracker, append_quads_data); |
| 1881 if (had_incomplete_tile_) | 1882 if (had_incomplete_tile_) |
| 1882 append_quads_data->had_incomplete_tile = true; | 1883 append_quads_data->had_incomplete_tile = true; |
| 1883 if (tile_missing_) | 1884 if (tile_missing_) |
| 1884 append_quads_data->num_missing_tiles++; | 1885 append_quads_data->num_missing_tiles++; |
| 1885 } | 1886 } |
| 1886 | 1887 |
| 1887 private: | 1888 private: |
| 1888 MissingTextureAnimatingLayer(LayerTreeImpl* tree_impl, | 1889 MissingTextureAnimatingLayer(LayerTreeImpl* tree_impl, |
| 1889 int id, | 1890 int id, |
| 1890 bool tile_missing, | 1891 bool tile_missing, |
| (...skipping 1584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3475 class BlendStateCheckLayer : public LayerImpl { | 3476 class BlendStateCheckLayer : public LayerImpl { |
| 3476 public: | 3477 public: |
| 3477 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, | 3478 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, |
| 3478 int id, | 3479 int id, |
| 3479 ResourceProvider* resource_provider) { | 3480 ResourceProvider* resource_provider) { |
| 3480 return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(tree_impl, | 3481 return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(tree_impl, |
| 3481 id, | 3482 id, |
| 3482 resource_provider)); | 3483 resource_provider)); |
| 3483 } | 3484 } |
| 3484 | 3485 |
| 3485 virtual void AppendQuads(QuadSink* quad_sink, | 3486 virtual void AppendQuads(RenderPass* render_pass, |
| 3487 const OcclusionTracker<LayerImpl>& occlusion_tracker, |
| 3486 AppendQuadsData* append_quads_data) OVERRIDE { | 3488 AppendQuadsData* append_quads_data) OVERRIDE { |
| 3487 quads_appended_ = true; | 3489 quads_appended_ = true; |
| 3488 | 3490 |
| 3489 gfx::Rect opaque_rect; | 3491 gfx::Rect opaque_rect; |
| 3490 if (contents_opaque()) | 3492 if (contents_opaque()) |
| 3491 opaque_rect = quad_rect_; | 3493 opaque_rect = quad_rect_; |
| 3492 else | 3494 else |
| 3493 opaque_rect = opaque_content_rect_; | 3495 opaque_rect = opaque_content_rect_; |
| 3494 gfx::Rect visible_quad_rect = quad_rect_; | 3496 gfx::Rect visible_quad_rect = quad_rect_; |
| 3495 | 3497 |
| 3496 SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState(); | 3498 SharedQuadState* shared_quad_state = |
| 3499 render_pass->CreateAndAppendSharedQuadState(); |
| 3497 PopulateSharedQuadState(shared_quad_state); | 3500 PopulateSharedQuadState(shared_quad_state); |
| 3498 | 3501 |
| 3499 scoped_ptr<TileDrawQuad> test_blending_draw_quad = TileDrawQuad::Create(); | 3502 scoped_ptr<TileDrawQuad> test_blending_draw_quad = TileDrawQuad::Create(); |
| 3500 test_blending_draw_quad->SetNew(shared_quad_state, | 3503 test_blending_draw_quad->SetNew(shared_quad_state, |
| 3501 quad_rect_, | 3504 quad_rect_, |
| 3502 opaque_rect, | 3505 opaque_rect, |
| 3503 visible_quad_rect, | 3506 visible_quad_rect, |
| 3504 resource_id_, | 3507 resource_id_, |
| 3505 gfx::RectF(0.f, 0.f, 1.f, 1.f), | 3508 gfx::RectF(0.f, 0.f, 1.f, 1.f), |
| 3506 gfx::Size(1, 1), | 3509 gfx::Size(1, 1), |
| 3507 false); | 3510 false); |
| 3508 test_blending_draw_quad->visible_rect = quad_visible_rect_; | 3511 test_blending_draw_quad->visible_rect = quad_visible_rect_; |
| 3509 EXPECT_EQ(blend_, test_blending_draw_quad->ShouldDrawWithBlending()); | 3512 EXPECT_EQ(blend_, test_blending_draw_quad->ShouldDrawWithBlending()); |
| 3510 EXPECT_EQ(has_render_surface_, !!render_surface()); | 3513 EXPECT_EQ(has_render_surface_, !!render_surface()); |
| 3511 quad_sink->Append(test_blending_draw_quad.PassAs<DrawQuad>()); | 3514 render_pass->AppendDrawQuad(test_blending_draw_quad.PassAs<DrawQuad>()); |
| 3512 } | 3515 } |
| 3513 | 3516 |
| 3514 void SetExpectation(bool blend, bool has_render_surface) { | 3517 void SetExpectation(bool blend, bool has_render_surface) { |
| 3515 blend_ = blend; | 3518 blend_ = blend; |
| 3516 has_render_surface_ = has_render_surface; | 3519 has_render_surface_ = has_render_surface; |
| 3517 quads_appended_ = false; | 3520 quads_appended_ = false; |
| 3518 } | 3521 } |
| 3519 | 3522 |
| 3520 bool quads_appended() const { return quads_appended_; } | 3523 bool quads_appended() const { return quads_appended_; } |
| 3521 | 3524 |
| (...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4233 EXPECT_EQ(1u, frame.render_passes.size()); | 4236 EXPECT_EQ(1u, frame.render_passes.size()); |
| 4234 host_impl_->DidDrawAllLayers(frame); | 4237 host_impl_->DidDrawAllLayers(frame); |
| 4235 } | 4238 } |
| 4236 | 4239 |
| 4237 class FakeLayerWithQuads : public LayerImpl { | 4240 class FakeLayerWithQuads : public LayerImpl { |
| 4238 public: | 4241 public: |
| 4239 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { | 4242 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { |
| 4240 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); | 4243 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); |
| 4241 } | 4244 } |
| 4242 | 4245 |
| 4243 virtual void AppendQuads(QuadSink* quad_sink, | 4246 virtual void AppendQuads(RenderPass* render_pass, |
| 4247 const OcclusionTracker<LayerImpl>& occlusion_tracker, |
| 4244 AppendQuadsData* append_quads_data) OVERRIDE { | 4248 AppendQuadsData* append_quads_data) OVERRIDE { |
| 4245 SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState(); | 4249 SharedQuadState* shared_quad_state = |
| 4250 render_pass->CreateAndAppendSharedQuadState(); |
| 4246 PopulateSharedQuadState(shared_quad_state); | 4251 PopulateSharedQuadState(shared_quad_state); |
| 4247 | 4252 |
| 4248 SkColor gray = SkColorSetRGB(100, 100, 100); | 4253 SkColor gray = SkColorSetRGB(100, 100, 100); |
| 4249 gfx::Rect quad_rect(content_bounds()); | 4254 gfx::Rect quad_rect(content_bounds()); |
| 4250 gfx::Rect visible_quad_rect(quad_rect); | 4255 gfx::Rect visible_quad_rect(quad_rect); |
| 4251 scoped_ptr<SolidColorDrawQuad> my_quad = SolidColorDrawQuad::Create(); | 4256 scoped_ptr<SolidColorDrawQuad> my_quad = SolidColorDrawQuad::Create(); |
| 4252 my_quad->SetNew( | 4257 my_quad->SetNew( |
| 4253 shared_quad_state, quad_rect, visible_quad_rect, gray, false); | 4258 shared_quad_state, quad_rect, visible_quad_rect, gray, false); |
| 4254 quad_sink->Append(my_quad.PassAs<DrawQuad>()); | 4259 render_pass->AppendDrawQuad(my_quad.PassAs<DrawQuad>()); |
| 4255 } | 4260 } |
| 4256 | 4261 |
| 4257 private: | 4262 private: |
| 4258 FakeLayerWithQuads(LayerTreeImpl* tree_impl, int id) | 4263 FakeLayerWithQuads(LayerTreeImpl* tree_impl, int id) |
| 4259 : LayerImpl(tree_impl, id) {} | 4264 : LayerImpl(tree_impl, id) {} |
| 4260 }; | 4265 }; |
| 4261 | 4266 |
| 4262 class MockContext : public TestWebGraphicsContext3D { | 4267 class MockContext : public TestWebGraphicsContext3D { |
| 4263 public: | 4268 public: |
| 4264 MOCK_METHOD1(useProgram, void(GLuint program)); | 4269 MOCK_METHOD1(useProgram, void(GLuint program)); |
| (...skipping 2303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6568 // Verify implicit limits are calculated correctly with no overflows | 6573 // Verify implicit limits are calculated correctly with no overflows |
| 6569 host_impl_->SetMemoryPolicy(mem_policy); | 6574 host_impl_->SetMemoryPolicy(mem_policy); |
| 6570 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, | 6575 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, |
| 6571 300u * 1024u * 1024u); | 6576 300u * 1024u * 1024u); |
| 6572 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, | 6577 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, |
| 6573 150u * 1024u * 1024u); | 6578 150u * 1024u * 1024u); |
| 6574 } | 6579 } |
| 6575 | 6580 |
| 6576 } // namespace | 6581 } // namespace |
| 6577 } // namespace cc | 6582 } // namespace cc |
| OLD | NEW |