| 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" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 #include "cc/test/fake_output_surface.h" | 44 #include "cc/test/fake_output_surface.h" |
| 45 #include "cc/test/fake_output_surface_client.h" | 45 #include "cc/test/fake_output_surface_client.h" |
| 46 #include "cc/test/fake_picture_layer_impl.h" | 46 #include "cc/test/fake_picture_layer_impl.h" |
| 47 #include "cc/test/fake_picture_pile_impl.h" | 47 #include "cc/test/fake_picture_pile_impl.h" |
| 48 #include "cc/test/fake_proxy.h" | 48 #include "cc/test/fake_proxy.h" |
| 49 #include "cc/test/fake_rendering_stats_instrumentation.h" | 49 #include "cc/test/fake_rendering_stats_instrumentation.h" |
| 50 #include "cc/test/fake_video_frame_provider.h" | 50 #include "cc/test/fake_video_frame_provider.h" |
| 51 #include "cc/test/geometry_test_utils.h" | 51 #include "cc/test/geometry_test_utils.h" |
| 52 #include "cc/test/layer_test_common.h" | 52 #include "cc/test/layer_test_common.h" |
| 53 #include "cc/test/render_pass_test_common.h" | 53 #include "cc/test/render_pass_test_common.h" |
| 54 #include "cc/test/test_gpu_memory_buffer_manager.h" |
| 54 #include "cc/test/test_shared_bitmap_manager.h" | 55 #include "cc/test/test_shared_bitmap_manager.h" |
| 55 #include "cc/test/test_web_graphics_context_3d.h" | 56 #include "cc/test/test_web_graphics_context_3d.h" |
| 56 #include "cc/trees/layer_tree_impl.h" | 57 #include "cc/trees/layer_tree_impl.h" |
| 57 #include "cc/trees/single_thread_proxy.h" | 58 #include "cc/trees/single_thread_proxy.h" |
| 58 #include "media/base/media.h" | 59 #include "media/base/media.h" |
| 59 #include "testing/gmock/include/gmock/gmock.h" | 60 #include "testing/gmock/include/gmock/gmock.h" |
| 60 #include "testing/gtest/include/gtest/gtest.h" | 61 #include "testing/gtest/include/gtest/gtest.h" |
| 61 #include "third_party/skia/include/core/SkMallocPixelRef.h" | 62 #include "third_party/skia/include/core/SkMallocPixelRef.h" |
| 62 #include "ui/gfx/frame_time.h" | 63 #include "ui/gfx/frame_time.h" |
| 63 #include "ui/gfx/rect_conversions.h" | 64 #include "ui/gfx/rect_conversions.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 75 namespace { | 76 namespace { |
| 76 | 77 |
| 77 class LayerTreeHostImplTest : public testing::Test, | 78 class LayerTreeHostImplTest : public testing::Test, |
| 78 public LayerTreeHostImplClient { | 79 public LayerTreeHostImplClient { |
| 79 public: | 80 public: |
| 80 LayerTreeHostImplTest() | 81 LayerTreeHostImplTest() |
| 81 : proxy_(base::MessageLoopProxy::current(), | 82 : proxy_(base::MessageLoopProxy::current(), |
| 82 base::MessageLoopProxy::current()), | 83 base::MessageLoopProxy::current()), |
| 83 always_impl_thread_(&proxy_), | 84 always_impl_thread_(&proxy_), |
| 84 always_main_thread_blocked_(&proxy_), | 85 always_main_thread_blocked_(&proxy_), |
| 85 shared_bitmap_manager_(new TestSharedBitmapManager()), | 86 shared_bitmap_manager_(new TestSharedBitmapManager), |
| 87 gpu_memory_buffer_manager_(new TestGpuMemoryBufferManager), |
| 86 on_can_draw_state_changed_called_(false), | 88 on_can_draw_state_changed_called_(false), |
| 87 did_notify_ready_to_activate_(false), | 89 did_notify_ready_to_activate_(false), |
| 88 did_request_commit_(false), | 90 did_request_commit_(false), |
| 89 did_request_redraw_(false), | 91 did_request_redraw_(false), |
| 90 did_request_animate_(false), | 92 did_request_animate_(false), |
| 91 did_request_manage_tiles_(false), | 93 did_request_manage_tiles_(false), |
| 92 did_upload_visible_tile_(false), | 94 did_upload_visible_tile_(false), |
| 93 reduce_memory_result_(true), | 95 reduce_memory_result_(true), |
| 94 current_limit_bytes_(0), | 96 current_limit_bytes_(0), |
| 95 current_priority_cutoff_value_(0) { | 97 current_priority_cutoff_value_(0) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 reduce_memory_result_ = reduce_memory_result; | 170 reduce_memory_result_ = reduce_memory_result; |
| 169 } | 171 } |
| 170 | 172 |
| 171 bool CreateHostImpl(const LayerTreeSettings& settings, | 173 bool CreateHostImpl(const LayerTreeSettings& settings, |
| 172 scoped_ptr<OutputSurface> output_surface) { | 174 scoped_ptr<OutputSurface> output_surface) { |
| 173 host_impl_ = LayerTreeHostImpl::Create(settings, | 175 host_impl_ = LayerTreeHostImpl::Create(settings, |
| 174 this, | 176 this, |
| 175 &proxy_, | 177 &proxy_, |
| 176 &stats_instrumentation_, | 178 &stats_instrumentation_, |
| 177 shared_bitmap_manager_.get(), | 179 shared_bitmap_manager_.get(), |
| 180 gpu_memory_buffer_manager_.get(), |
| 178 0); | 181 0); |
| 179 bool init = host_impl_->InitializeRenderer(output_surface.Pass()); | 182 bool init = host_impl_->InitializeRenderer(output_surface.Pass()); |
| 180 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 183 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
| 181 return init; | 184 return init; |
| 182 } | 185 } |
| 183 | 186 |
| 184 void SetupRootLayerImpl(scoped_ptr<LayerImpl> root) { | 187 void SetupRootLayerImpl(scoped_ptr<LayerImpl> root) { |
| 185 root->SetPosition(gfx::PointF()); | 188 root->SetPosition(gfx::PointF()); |
| 186 root->SetBounds(gfx::Size(10, 10)); | 189 root->SetBounds(gfx::Size(10, 10)); |
| 187 root->SetContentBounds(gfx::Size(10, 10)); | 190 root->SetContentBounds(gfx::Size(10, 10)); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 void DrawOneFrame() { | 388 void DrawOneFrame() { |
| 386 LayerTreeHostImpl::FrameData frame_data; | 389 LayerTreeHostImpl::FrameData frame_data; |
| 387 host_impl_->PrepareToDraw(&frame_data); | 390 host_impl_->PrepareToDraw(&frame_data); |
| 388 host_impl_->DidDrawAllLayers(frame_data); | 391 host_impl_->DidDrawAllLayers(frame_data); |
| 389 } | 392 } |
| 390 | 393 |
| 391 FakeProxy proxy_; | 394 FakeProxy proxy_; |
| 392 DebugScopedSetImplThread always_impl_thread_; | 395 DebugScopedSetImplThread always_impl_thread_; |
| 393 DebugScopedSetMainThreadBlocked always_main_thread_blocked_; | 396 DebugScopedSetMainThreadBlocked always_main_thread_blocked_; |
| 394 | 397 |
| 395 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 398 scoped_ptr<TestSharedBitmapManager> shared_bitmap_manager_; |
| 399 scoped_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_; |
| 396 scoped_ptr<LayerTreeHostImpl> host_impl_; | 400 scoped_ptr<LayerTreeHostImpl> host_impl_; |
| 397 FakeRenderingStatsInstrumentation stats_instrumentation_; | 401 FakeRenderingStatsInstrumentation stats_instrumentation_; |
| 398 bool on_can_draw_state_changed_called_; | 402 bool on_can_draw_state_changed_called_; |
| 399 bool did_notify_ready_to_activate_; | 403 bool did_notify_ready_to_activate_; |
| 400 bool did_request_commit_; | 404 bool did_request_commit_; |
| 401 bool did_request_redraw_; | 405 bool did_request_redraw_; |
| 402 bool did_request_animate_; | 406 bool did_request_animate_; |
| 403 bool did_request_manage_tiles_; | 407 bool did_request_manage_tiles_; |
| 404 bool did_upload_visible_tile_; | 408 bool did_upload_visible_tile_; |
| 405 bool reduce_memory_result_; | 409 bool reduce_memory_result_; |
| (...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1359 const LayerTreeSettings& settings, | 1363 const LayerTreeSettings& settings, |
| 1360 LayerTreeHostImplClient* client, | 1364 LayerTreeHostImplClient* client, |
| 1361 Proxy* proxy, | 1365 Proxy* proxy, |
| 1362 SharedBitmapManager* manager, | 1366 SharedBitmapManager* manager, |
| 1363 RenderingStatsInstrumentation* rendering_stats_instrumentation) | 1367 RenderingStatsInstrumentation* rendering_stats_instrumentation) |
| 1364 : LayerTreeHostImpl(settings, | 1368 : LayerTreeHostImpl(settings, |
| 1365 client, | 1369 client, |
| 1366 proxy, | 1370 proxy, |
| 1367 rendering_stats_instrumentation, | 1371 rendering_stats_instrumentation, |
| 1368 manager, | 1372 manager, |
| 1373 NULL, |
| 1369 0) {} | 1374 0) {} |
| 1370 | 1375 |
| 1371 virtual BeginFrameArgs CurrentBeginFrameArgs() const override { | 1376 virtual BeginFrameArgs CurrentBeginFrameArgs() const override { |
| 1372 return CreateBeginFrameArgsForTesting(fake_current_physical_time_); | 1377 return CreateBeginFrameArgsForTesting(fake_current_physical_time_); |
| 1373 } | 1378 } |
| 1374 | 1379 |
| 1375 void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { | 1380 void SetCurrentPhysicalTimeTicksForTest(base::TimeTicks fake_now) { |
| 1376 fake_current_physical_time_ = fake_now; | 1381 fake_current_physical_time_ = fake_now; |
| 1377 } | 1382 } |
| 1378 | 1383 |
| (...skipping 3024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4403 LayerTreeSettings settings; | 4408 LayerTreeSettings settings; |
| 4404 settings.partial_swap_enabled = true; | 4409 settings.partial_swap_enabled = true; |
| 4405 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 4410 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 4406 new TestSharedBitmapManager()); | 4411 new TestSharedBitmapManager()); |
| 4407 scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl = | 4412 scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl = |
| 4408 LayerTreeHostImpl::Create(settings, | 4413 LayerTreeHostImpl::Create(settings, |
| 4409 this, | 4414 this, |
| 4410 &proxy_, | 4415 &proxy_, |
| 4411 &stats_instrumentation_, | 4416 &stats_instrumentation_, |
| 4412 shared_bitmap_manager.get(), | 4417 shared_bitmap_manager.get(), |
| 4418 NULL, |
| 4413 0); | 4419 0); |
| 4414 layer_tree_host_impl->InitializeRenderer(output_surface.Pass()); | 4420 layer_tree_host_impl->InitializeRenderer(output_surface.Pass()); |
| 4415 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); | 4421 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); |
| 4416 | 4422 |
| 4417 scoped_ptr<LayerImpl> root = | 4423 scoped_ptr<LayerImpl> root = |
| 4418 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1); | 4424 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1); |
| 4419 scoped_ptr<LayerImpl> child = | 4425 scoped_ptr<LayerImpl> child = |
| 4420 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 2); | 4426 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 2); |
| 4421 child->SetPosition(gfx::PointF(12.f, 13.f)); | 4427 child->SetPosition(gfx::PointF(12.f, 13.f)); |
| 4422 child->SetBounds(gfx::Size(14, 15)); | 4428 child->SetBounds(gfx::Size(14, 15)); |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4692 RenderingStatsInstrumentation* stats_instrumentation) { | 4698 RenderingStatsInstrumentation* stats_instrumentation) { |
| 4693 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create()); | 4699 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create()); |
| 4694 scoped_ptr<OutputSurface> output_surface( | 4700 scoped_ptr<OutputSurface> output_surface( |
| 4695 FakeOutputSurface::Create3d(provider)); | 4701 FakeOutputSurface::Create3d(provider)); |
| 4696 provider->BindToCurrentThread(); | 4702 provider->BindToCurrentThread(); |
| 4697 provider->TestContext3d()->set_have_post_sub_buffer(true); | 4703 provider->TestContext3d()->set_have_post_sub_buffer(true); |
| 4698 | 4704 |
| 4699 LayerTreeSettings settings; | 4705 LayerTreeSettings settings; |
| 4700 settings.partial_swap_enabled = partial_swap; | 4706 settings.partial_swap_enabled = partial_swap; |
| 4701 scoped_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( | 4707 scoped_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( |
| 4702 settings, client, proxy, stats_instrumentation, manager, 0); | 4708 settings, client, proxy, stats_instrumentation, manager, NULL, 0); |
| 4703 my_host_impl->InitializeRenderer(output_surface.Pass()); | 4709 my_host_impl->InitializeRenderer(output_surface.Pass()); |
| 4704 my_host_impl->SetViewportSize(gfx::Size(100, 100)); | 4710 my_host_impl->SetViewportSize(gfx::Size(100, 100)); |
| 4705 | 4711 |
| 4706 /* | 4712 /* |
| 4707 Layers are created as follows: | 4713 Layers are created as follows: |
| 4708 | 4714 |
| 4709 +--------------------+ | 4715 +--------------------+ |
| 4710 | 1 | | 4716 | 1 | |
| 4711 | +-----------+ | | 4717 | +-----------+ | |
| 4712 | | 2 | | | 4718 | | 2 | | |
| (...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5976 | 5982 |
| 5977 // Checks that we have a non-0 default allocation if we pass a context that | 5983 // Checks that we have a non-0 default allocation if we pass a context that |
| 5978 // doesn't support memory management extensions. | 5984 // doesn't support memory management extensions. |
| 5979 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { | 5985 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { |
| 5980 LayerTreeSettings settings; | 5986 LayerTreeSettings settings; |
| 5981 host_impl_ = LayerTreeHostImpl::Create(settings, | 5987 host_impl_ = LayerTreeHostImpl::Create(settings, |
| 5982 this, | 5988 this, |
| 5983 &proxy_, | 5989 &proxy_, |
| 5984 &stats_instrumentation_, | 5990 &stats_instrumentation_, |
| 5985 shared_bitmap_manager_.get(), | 5991 shared_bitmap_manager_.get(), |
| 5992 gpu_memory_buffer_manager_.get(), |
| 5986 0); | 5993 0); |
| 5987 | 5994 |
| 5988 scoped_ptr<OutputSurface> output_surface( | 5995 scoped_ptr<OutputSurface> output_surface( |
| 5989 FakeOutputSurface::Create3d(TestWebGraphicsContext3D::Create())); | 5996 FakeOutputSurface::Create3d(TestWebGraphicsContext3D::Create())); |
| 5990 host_impl_->InitializeRenderer(output_surface.Pass()); | 5997 host_impl_->InitializeRenderer(output_surface.Pass()); |
| 5991 EXPECT_LT(0ul, host_impl_->memory_allocation_limit_bytes()); | 5998 EXPECT_LT(0ul, host_impl_->memory_allocation_limit_bytes()); |
| 5992 } | 5999 } |
| 5993 | 6000 |
| 5994 TEST_F(LayerTreeHostImplTest, MemoryPolicy) { | 6001 TEST_F(LayerTreeHostImplTest, MemoryPolicy) { |
| 5995 ManagedMemoryPolicy policy1( | 6002 ManagedMemoryPolicy policy1( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 6017 | 6024 |
| 6018 host_impl_->SetVisible(true); | 6025 host_impl_->SetVisible(true); |
| 6019 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_); | 6026 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_); |
| 6020 EXPECT_EQ(everything_cutoff_value, current_priority_cutoff_value_); | 6027 EXPECT_EQ(everything_cutoff_value, current_priority_cutoff_value_); |
| 6021 | 6028 |
| 6022 // Now enable GPU rasterization and test if we get nice to have cutoff, | 6029 // Now enable GPU rasterization and test if we get nice to have cutoff, |
| 6023 // when visible. | 6030 // when visible. |
| 6024 LayerTreeSettings settings; | 6031 LayerTreeSettings settings; |
| 6025 settings.gpu_rasterization_enabled = true; | 6032 settings.gpu_rasterization_enabled = true; |
| 6026 host_impl_ = LayerTreeHostImpl::Create( | 6033 host_impl_ = LayerTreeHostImpl::Create( |
| 6027 settings, this, &proxy_, &stats_instrumentation_, NULL, 0); | 6034 settings, this, &proxy_, &stats_instrumentation_, NULL, NULL, 0); |
| 6028 host_impl_->SetUseGpuRasterization(true); | 6035 host_impl_->SetUseGpuRasterization(true); |
| 6029 host_impl_->SetVisible(true); | 6036 host_impl_->SetVisible(true); |
| 6030 host_impl_->SetMemoryPolicy(policy1); | 6037 host_impl_->SetMemoryPolicy(policy1); |
| 6031 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_); | 6038 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_); |
| 6032 EXPECT_EQ(allow_nice_to_have_cutoff_value, current_priority_cutoff_value_); | 6039 EXPECT_EQ(allow_nice_to_have_cutoff_value, current_priority_cutoff_value_); |
| 6033 | 6040 |
| 6034 host_impl_->SetVisible(false); | 6041 host_impl_->SetVisible(false); |
| 6035 EXPECT_EQ(0u, current_limit_bytes_); | 6042 EXPECT_EQ(0u, current_limit_bytes_); |
| 6036 EXPECT_EQ(nothing_cutoff_value, current_priority_cutoff_value_); | 6043 EXPECT_EQ(nothing_cutoff_value, current_priority_cutoff_value_); |
| 6037 } | 6044 } |
| (...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7267 // surface. | 7274 // surface. |
| 7268 EXPECT_EQ(0, num_lost_surfaces_); | 7275 EXPECT_EQ(0, num_lost_surfaces_); |
| 7269 host_impl_->DidLoseOutputSurface(); | 7276 host_impl_->DidLoseOutputSurface(); |
| 7270 EXPECT_EQ(1, num_lost_surfaces_); | 7277 EXPECT_EQ(1, num_lost_surfaces_); |
| 7271 host_impl_->DidLoseOutputSurface(); | 7278 host_impl_->DidLoseOutputSurface(); |
| 7272 EXPECT_LE(1, num_lost_surfaces_); | 7279 EXPECT_LE(1, num_lost_surfaces_); |
| 7273 } | 7280 } |
| 7274 | 7281 |
| 7275 } // namespace | 7282 } // namespace |
| 7276 } // namespace cc | 7283 } // namespace cc |
| OLD | NEW |