| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <cmath> | 10 #include <cmath> |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 | 192 |
| 193 virtual bool CreateHostImplWithTaskRunnerProvider( | 193 virtual bool CreateHostImplWithTaskRunnerProvider( |
| 194 const LayerTreeSettings& settings, | 194 const LayerTreeSettings& settings, |
| 195 std::unique_ptr<CompositorFrameSink> compositor_frame_sink, | 195 std::unique_ptr<CompositorFrameSink> compositor_frame_sink, |
| 196 TaskRunnerProvider* task_runner_provider) { | 196 TaskRunnerProvider* task_runner_provider) { |
| 197 if (host_impl_) | 197 if (host_impl_) |
| 198 host_impl_->ReleaseCompositorFrameSink(); | 198 host_impl_->ReleaseCompositorFrameSink(); |
| 199 host_impl_ = LayerTreeHostImpl::Create( | 199 host_impl_ = LayerTreeHostImpl::Create( |
| 200 settings, this, task_runner_provider, &stats_instrumentation_, | 200 settings, this, task_runner_provider, &stats_instrumentation_, |
| 201 &task_graph_runner_, | 201 &task_graph_runner_, |
| 202 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0); | 202 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr); |
| 203 compositor_frame_sink_ = std::move(compositor_frame_sink); | 203 compositor_frame_sink_ = std::move(compositor_frame_sink); |
| 204 host_impl_->SetVisible(true); | 204 host_impl_->SetVisible(true); |
| 205 bool init = host_impl_->InitializeRenderer(compositor_frame_sink_.get()); | 205 bool init = host_impl_->InitializeRenderer(compositor_frame_sink_.get()); |
| 206 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 206 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
| 207 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); | 207 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); |
| 208 // Set the BeginFrameArgs so that methods which use it are able to. | 208 // Set the BeginFrameArgs so that methods which use it are able to. |
| 209 host_impl_->WillBeginImplFrame(CreateBeginFrameArgsForTesting( | 209 host_impl_->WillBeginImplFrame(CreateBeginFrameArgsForTesting( |
| 210 BEGINFRAME_FROM_HERE, 0, 1, | 210 BEGINFRAME_FROM_HERE, 0, 1, |
| 211 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1))); | 211 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1))); |
| 212 host_impl_->DidFinishImplFrame(); | 212 host_impl_->DidFinishImplFrame(); |
| (...skipping 2489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2702 LayerTreeHostImplClient* client, | 2702 LayerTreeHostImplClient* client, |
| 2703 TaskRunnerProvider* task_runner_provider, | 2703 TaskRunnerProvider* task_runner_provider, |
| 2704 TaskGraphRunner* task_graph_runner, | 2704 TaskGraphRunner* task_graph_runner, |
| 2705 RenderingStatsInstrumentation* rendering_stats_instrumentation) | 2705 RenderingStatsInstrumentation* rendering_stats_instrumentation) |
| 2706 : LayerTreeHostImpl(settings, | 2706 : LayerTreeHostImpl(settings, |
| 2707 client, | 2707 client, |
| 2708 task_runner_provider, | 2708 task_runner_provider, |
| 2709 rendering_stats_instrumentation, | 2709 rendering_stats_instrumentation, |
| 2710 task_graph_runner, | 2710 task_graph_runner, |
| 2711 AnimationHost::CreateForTesting(ThreadInstance::IMPL), | 2711 AnimationHost::CreateForTesting(ThreadInstance::IMPL), |
| 2712 0) {} | 2712 0, |
| 2713 nullptr) {} |
| 2713 | 2714 |
| 2714 BeginFrameArgs CurrentBeginFrameArgs() const override { | 2715 BeginFrameArgs CurrentBeginFrameArgs() const override { |
| 2715 return CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1, | 2716 return CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1, |
| 2716 fake_current_physical_time_); | 2717 fake_current_physical_time_); |
| 2717 } | 2718 } |
| 2718 | 2719 |
| 2719 void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { | 2720 void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { |
| 2720 fake_current_physical_time_ = fake_now; | 2721 fake_current_physical_time_ = fake_now; |
| 2721 } | 2722 } |
| 2722 | 2723 |
| (...skipping 4849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7572 compositor_frame_sink.get(); | 7573 compositor_frame_sink.get(); |
| 7573 | 7574 |
| 7574 // This test creates its own LayerTreeHostImpl, so | 7575 // This test creates its own LayerTreeHostImpl, so |
| 7575 // that we can force partial swap enabled. | 7576 // that we can force partial swap enabled. |
| 7576 LayerTreeSettings settings = DefaultSettings(); | 7577 LayerTreeSettings settings = DefaultSettings(); |
| 7577 settings.renderer_settings.partial_swap_enabled = true; | 7578 settings.renderer_settings.partial_swap_enabled = true; |
| 7578 std::unique_ptr<LayerTreeHostImpl> layer_tree_host_impl = | 7579 std::unique_ptr<LayerTreeHostImpl> layer_tree_host_impl = |
| 7579 LayerTreeHostImpl::Create( | 7580 LayerTreeHostImpl::Create( |
| 7580 settings, this, &task_runner_provider_, &stats_instrumentation_, | 7581 settings, this, &task_runner_provider_, &stats_instrumentation_, |
| 7581 &task_graph_runner_, | 7582 &task_graph_runner_, |
| 7582 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0); | 7583 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr); |
| 7583 layer_tree_host_impl->SetVisible(true); | 7584 layer_tree_host_impl->SetVisible(true); |
| 7584 layer_tree_host_impl->InitializeRenderer(compositor_frame_sink.get()); | 7585 layer_tree_host_impl->InitializeRenderer(compositor_frame_sink.get()); |
| 7585 layer_tree_host_impl->WillBeginImplFrame( | 7586 layer_tree_host_impl->WillBeginImplFrame( |
| 7586 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2)); | 7587 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2)); |
| 7587 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); | 7588 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); |
| 7588 | 7589 |
| 7589 std::unique_ptr<LayerImpl> root = | 7590 std::unique_ptr<LayerImpl> root = |
| 7590 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1); | 7591 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1); |
| 7591 root->test_properties()->force_render_surface = true; | 7592 root->test_properties()->force_render_surface = true; |
| 7592 std::unique_ptr<LayerImpl> child = | 7593 std::unique_ptr<LayerImpl> child = |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7701 bool partial_swap, | 7702 bool partial_swap, |
| 7702 LayerTreeHostImplClient* client, | 7703 LayerTreeHostImplClient* client, |
| 7703 TaskRunnerProvider* task_runner_provider, | 7704 TaskRunnerProvider* task_runner_provider, |
| 7704 TaskGraphRunner* task_graph_runner, | 7705 TaskGraphRunner* task_graph_runner, |
| 7705 RenderingStatsInstrumentation* stats_instrumentation, | 7706 RenderingStatsInstrumentation* stats_instrumentation, |
| 7706 CompositorFrameSink* compositor_frame_sink) { | 7707 CompositorFrameSink* compositor_frame_sink) { |
| 7707 settings.renderer_settings.partial_swap_enabled = partial_swap; | 7708 settings.renderer_settings.partial_swap_enabled = partial_swap; |
| 7708 std::unique_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( | 7709 std::unique_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( |
| 7709 settings, client, task_runner_provider, stats_instrumentation, | 7710 settings, client, task_runner_provider, stats_instrumentation, |
| 7710 task_graph_runner, AnimationHost::CreateForTesting(ThreadInstance::IMPL), | 7711 task_graph_runner, AnimationHost::CreateForTesting(ThreadInstance::IMPL), |
| 7711 0); | 7712 0, nullptr); |
| 7712 my_host_impl->SetVisible(true); | 7713 my_host_impl->SetVisible(true); |
| 7713 my_host_impl->InitializeRenderer(compositor_frame_sink); | 7714 my_host_impl->InitializeRenderer(compositor_frame_sink); |
| 7714 my_host_impl->WillBeginImplFrame( | 7715 my_host_impl->WillBeginImplFrame( |
| 7715 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2)); | 7716 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 2)); |
| 7716 my_host_impl->SetViewportSize(gfx::Size(100, 100)); | 7717 my_host_impl->SetViewportSize(gfx::Size(100, 100)); |
| 7717 | 7718 |
| 7718 /* | 7719 /* |
| 7719 Layers are created as follows: | 7720 Layers are created as follows: |
| 7720 | 7721 |
| 7721 +--------------------+ | 7722 +--------------------+ |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8169 EXPECT_NE(kSoftwareTileCutoff, kNothingTileCutoff); | 8170 EXPECT_NE(kSoftwareTileCutoff, kNothingTileCutoff); |
| 8170 | 8171 |
| 8171 LayerTreeSettings settings = DefaultSettings(); | 8172 LayerTreeSettings settings = DefaultSettings(); |
| 8172 settings.gpu_memory_policy = | 8173 settings.gpu_memory_policy = |
| 8173 ManagedMemoryPolicy(kGpuByteLimit, kGpuCutoff, kGpuResourceLimit); | 8174 ManagedMemoryPolicy(kGpuByteLimit, kGpuCutoff, kGpuResourceLimit); |
| 8174 settings.software_memory_policy = ManagedMemoryPolicy( | 8175 settings.software_memory_policy = ManagedMemoryPolicy( |
| 8175 kSoftwareByteLimit, kSoftwareCutoff, kSoftwareResourceLimit); | 8176 kSoftwareByteLimit, kSoftwareCutoff, kSoftwareResourceLimit); |
| 8176 host_impl_ = LayerTreeHostImpl::Create( | 8177 host_impl_ = LayerTreeHostImpl::Create( |
| 8177 settings, this, &task_runner_provider_, &stats_instrumentation_, | 8178 settings, this, &task_runner_provider_, &stats_instrumentation_, |
| 8178 &task_graph_runner_, | 8179 &task_graph_runner_, |
| 8179 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0); | 8180 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr); |
| 8180 | 8181 |
| 8181 // Gpu compositing. | 8182 // Gpu compositing. |
| 8182 compositor_frame_sink_ = | 8183 compositor_frame_sink_ = |
| 8183 FakeCompositorFrameSink::Create3d(TestWebGraphicsContext3D::Create()); | 8184 FakeCompositorFrameSink::Create3d(TestWebGraphicsContext3D::Create()); |
| 8184 host_impl_->SetVisible(true); | 8185 host_impl_->SetVisible(true); |
| 8185 host_impl_->InitializeRenderer(compositor_frame_sink_.get()); | 8186 host_impl_->InitializeRenderer(compositor_frame_sink_.get()); |
| 8186 { | 8187 { |
| 8187 const auto& state = host_impl_->global_tile_state(); | 8188 const auto& state = host_impl_->global_tile_state(); |
| 8188 EXPECT_EQ(kGpuByteLimit, state.hard_memory_limit_in_bytes); | 8189 EXPECT_EQ(kGpuByteLimit, state.hard_memory_limit_in_bytes); |
| 8189 EXPECT_EQ(kGpuResourceLimit, state.num_resources_limit); | 8190 EXPECT_EQ(kGpuResourceLimit, state.num_resources_limit); |
| (...skipping 3408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11598 TEST_F(LayerTreeHostImplTest, RecomputeGpuRasterOnCompositorFrameSinkChange) { | 11599 TEST_F(LayerTreeHostImplTest, RecomputeGpuRasterOnCompositorFrameSinkChange) { |
| 11599 host_impl_->ReleaseCompositorFrameSink(); | 11600 host_impl_->ReleaseCompositorFrameSink(); |
| 11600 host_impl_ = nullptr; | 11601 host_impl_ = nullptr; |
| 11601 | 11602 |
| 11602 LayerTreeSettings settings = DefaultSettings(); | 11603 LayerTreeSettings settings = DefaultSettings(); |
| 11603 settings.gpu_rasterization_forced = true; | 11604 settings.gpu_rasterization_forced = true; |
| 11604 | 11605 |
| 11605 host_impl_ = LayerTreeHostImpl::Create( | 11606 host_impl_ = LayerTreeHostImpl::Create( |
| 11606 settings, this, &task_runner_provider_, &stats_instrumentation_, | 11607 settings, this, &task_runner_provider_, &stats_instrumentation_, |
| 11607 &task_graph_runner_, | 11608 &task_graph_runner_, |
| 11608 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0); | 11609 AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr); |
| 11609 host_impl_->SetVisible(true); | 11610 host_impl_->SetVisible(true); |
| 11610 | 11611 |
| 11611 // InitializeRenderer with a gpu-raster enabled output surface. | 11612 // InitializeRenderer with a gpu-raster enabled output surface. |
| 11612 auto gpu_raster_compositor_frame_sink = | 11613 auto gpu_raster_compositor_frame_sink = |
| 11613 FakeCompositorFrameSink::Create3d(TestWebGraphicsContext3D::Create()); | 11614 FakeCompositorFrameSink::Create3d(TestWebGraphicsContext3D::Create()); |
| 11614 host_impl_->InitializeRenderer(gpu_raster_compositor_frame_sink.get()); | 11615 host_impl_->InitializeRenderer(gpu_raster_compositor_frame_sink.get()); |
| 11615 EXPECT_TRUE(host_impl_->use_gpu_rasterization()); | 11616 EXPECT_TRUE(host_impl_->use_gpu_rasterization()); |
| 11616 | 11617 |
| 11617 // Re-initialize with a software output surface. | 11618 // Re-initialize with a software output surface. |
| 11618 compositor_frame_sink_ = FakeCompositorFrameSink::CreateSoftware(); | 11619 compositor_frame_sink_ = FakeCompositorFrameSink::CreateSoftware(); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11740 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_over_scrollbar()); | 11741 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_over_scrollbar()); |
| 11741 host_impl_->MouseMoveAt(gfx::Point(10, 150)); | 11742 host_impl_->MouseMoveAt(gfx::Point(10, 150)); |
| 11742 EXPECT_TRUE(scrollbar_1_animation_controller->mouse_is_near_scrollbar()); | 11743 EXPECT_TRUE(scrollbar_1_animation_controller->mouse_is_near_scrollbar()); |
| 11743 EXPECT_TRUE(scrollbar_1_animation_controller->mouse_is_over_scrollbar()); | 11744 EXPECT_TRUE(scrollbar_1_animation_controller->mouse_is_over_scrollbar()); |
| 11744 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_near_scrollbar()); | 11745 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_near_scrollbar()); |
| 11745 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_over_scrollbar()); | 11746 EXPECT_FALSE(scrollbar_2_animation_controller->mouse_is_over_scrollbar()); |
| 11746 } | 11747 } |
| 11747 | 11748 |
| 11748 } // namespace | 11749 } // namespace |
| 11749 } // namespace cc | 11750 } // namespace cc |
| OLD | NEW |