Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 1194623003: cc: Remove contents_texture_manager from LayerTreeHost(Impl) and proxy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: contentstexturemanager: rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 base::ThreadTaskRunnerHandle::Get()), 86 base::ThreadTaskRunnerHandle::Get()),
87 always_impl_thread_(&proxy_), 87 always_impl_thread_(&proxy_),
88 always_main_thread_blocked_(&proxy_), 88 always_main_thread_blocked_(&proxy_),
89 on_can_draw_state_changed_called_(false), 89 on_can_draw_state_changed_called_(false),
90 did_notify_ready_to_activate_(false), 90 did_notify_ready_to_activate_(false),
91 did_request_commit_(false), 91 did_request_commit_(false),
92 did_request_redraw_(false), 92 did_request_redraw_(false),
93 did_request_animate_(false), 93 did_request_animate_(false),
94 did_request_prepare_tiles_(false), 94 did_request_prepare_tiles_(false),
95 did_complete_page_scale_animation_(false), 95 did_complete_page_scale_animation_(false),
96 reduce_memory_result_(true), 96 reduce_memory_result_(true) {
97 current_limit_bytes_(0),
98 current_priority_cutoff_value_(0) {
99 media::InitializeMediaLibrary(); 97 media::InitializeMediaLibrary();
100 } 98 }
101 99
102 LayerTreeSettings DefaultSettings() { 100 LayerTreeSettings DefaultSettings() {
103 LayerTreeSettings settings; 101 LayerTreeSettings settings;
104 settings.minimum_occlusion_tracking_size = gfx::Size(); 102 settings.minimum_occlusion_tracking_size = gfx::Size();
105 settings.renderer_settings.texture_id_allocation_chunk_size = 1; 103 settings.renderer_settings.texture_id_allocation_chunk_size = 1;
106 settings.report_overscroll_only_for_scrollable_axes = true; 104 settings.report_overscroll_only_for_scrollable_axes = true;
107 settings.gpu_rasterization_enabled = true; 105 settings.gpu_rasterization_enabled = true;
108 return settings; 106 return settings;
(...skipping 26 matching lines...) Expand all
135 did_request_redraw_ = true; 133 did_request_redraw_ = true;
136 } 134 }
137 void SetNeedsAnimateOnImplThread() override { did_request_animate_ = true; } 135 void SetNeedsAnimateOnImplThread() override { did_request_animate_ = true; }
138 void SetNeedsPrepareTilesOnImplThread() override { 136 void SetNeedsPrepareTilesOnImplThread() override {
139 did_request_prepare_tiles_ = true; 137 did_request_prepare_tiles_ = true;
140 } 138 }
141 void SetNeedsCommitOnImplThread() override { did_request_commit_ = true; } 139 void SetNeedsCommitOnImplThread() override { did_request_commit_ = true; }
142 void SetVideoNeedsBeginFrames(bool needs_begin_frames) override {} 140 void SetVideoNeedsBeginFrames(bool needs_begin_frames) override {}
143 void PostAnimationEventsToMainThreadOnImplThread( 141 void PostAnimationEventsToMainThreadOnImplThread(
144 scoped_ptr<AnimationEventsVector> events) override {} 142 scoped_ptr<AnimationEventsVector> events) override {}
145 bool ReduceContentsTextureMemoryOnImplThread(size_t limit_bytes,
146 int priority_cutoff) override {
147 current_limit_bytes_ = limit_bytes;
148 current_priority_cutoff_value_ = priority_cutoff;
149 return reduce_memory_result_;
150 }
151 bool IsInsideDraw() override { return false; } 143 bool IsInsideDraw() override { return false; }
152 void RenewTreePriority() override {} 144 void RenewTreePriority() override {}
153 void PostDelayedAnimationTaskOnImplThread(const base::Closure& task, 145 void PostDelayedAnimationTaskOnImplThread(const base::Closure& task,
154 base::TimeDelta delay) override { 146 base::TimeDelta delay) override {
155 animation_task_ = task; 147 animation_task_ = task;
156 requested_animation_delay_ = delay; 148 requested_animation_delay_ = delay;
157 } 149 }
158 void DidActivateSyncTree() override {} 150 void DidActivateSyncTree() override {}
159 void DidPrepareTiles() override {} 151 void DidPrepareTiles() override {}
160 void DidCompletePageScaleAnimationOnImplThread() override { 152 void DidCompletePageScaleAnimationOnImplThread() override {
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 } else { 353 } else {
362 EXPECT_FALSE(host_impl_->CanDraw()); 354 EXPECT_FALSE(host_impl_->CanDraw());
363 } 355 }
364 EXPECT_TRUE(on_can_draw_state_changed_called_); 356 EXPECT_TRUE(on_can_draw_state_changed_called_);
365 on_can_draw_state_changed_called_ = false; 357 on_can_draw_state_changed_called_ = false;
366 358
367 host_impl_->SetViewportSize(gfx::Size(100, 100)); 359 host_impl_->SetViewportSize(gfx::Size(100, 100));
368 EXPECT_TRUE(host_impl_->CanDraw()); 360 EXPECT_TRUE(host_impl_->CanDraw());
369 EXPECT_TRUE(on_can_draw_state_changed_called_); 361 EXPECT_TRUE(on_can_draw_state_changed_called_);
370 on_can_draw_state_changed_called_ = false; 362 on_can_draw_state_changed_called_ = false;
371
372 // Toggle contents textures purged without causing any evictions,
373 // and make sure that it does not change can_draw.
374 set_reduce_memory_result(false);
375 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
376 host_impl_->memory_allocation_limit_bytes() - 1));
377 EXPECT_TRUE(host_impl_->CanDraw());
378 EXPECT_FALSE(on_can_draw_state_changed_called_);
379 on_can_draw_state_changed_called_ = false;
380
381 // Toggle contents textures purged to make sure it toggles can_draw.
382 set_reduce_memory_result(true);
383 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
384 host_impl_->memory_allocation_limit_bytes() - 1));
385 if (always_draw) {
386 EXPECT_TRUE(host_impl_->CanDraw());
387 } else {
388 EXPECT_FALSE(host_impl_->CanDraw());
389 }
390 EXPECT_TRUE(on_can_draw_state_changed_called_);
391 on_can_draw_state_changed_called_ = false;
392
393 host_impl_->active_tree()->ResetContentsTexturesPurged();
394 EXPECT_TRUE(host_impl_->CanDraw());
395 EXPECT_TRUE(on_can_draw_state_changed_called_);
396 on_can_draw_state_changed_called_ = false;
397 } 363 }
398 364
399 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); 365 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor);
400 366
401 protected: 367 protected:
402 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { 368 virtual scoped_ptr<OutputSurface> CreateOutputSurface() {
403 return FakeOutputSurface::Create3d(); 369 return FakeOutputSurface::Create3d();
404 } 370 }
405 371
406 void DrawOneFrame() { 372 void DrawOneFrame() {
(...skipping 14 matching lines...) Expand all
421 bool on_can_draw_state_changed_called_; 387 bool on_can_draw_state_changed_called_;
422 bool did_notify_ready_to_activate_; 388 bool did_notify_ready_to_activate_;
423 bool did_request_commit_; 389 bool did_request_commit_;
424 bool did_request_redraw_; 390 bool did_request_redraw_;
425 bool did_request_animate_; 391 bool did_request_animate_;
426 bool did_request_prepare_tiles_; 392 bool did_request_prepare_tiles_;
427 bool did_complete_page_scale_animation_; 393 bool did_complete_page_scale_animation_;
428 bool reduce_memory_result_; 394 bool reduce_memory_result_;
429 base::Closure animation_task_; 395 base::Closure animation_task_;
430 base::TimeDelta requested_animation_delay_; 396 base::TimeDelta requested_animation_delay_;
431 size_t current_limit_bytes_;
432 int current_priority_cutoff_value_;
433 }; 397 };
434 398
435 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { 399 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) {
436 bool always_draw = false; 400 bool always_draw = false;
437 CheckNotifyCalledIfCanDrawChanged(always_draw); 401 CheckNotifyCalledIfCanDrawChanged(always_draw);
438 } 402 }
439 403
440 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { 404 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) {
441 CreateHostImpl(DefaultSettings(), 405 CreateHostImpl(DefaultSettings(),
442 FakeOutputSurface::CreateAlwaysDrawAndSwap3d()); 406 FakeOutputSurface::CreateAlwaysDrawAndSwap3d());
(...skipping 5243 matching lines...) Expand 10 before | Expand all | Expand 10 after
5686 5650
5687 // Verify no quads are drawn when transparent background is set. 5651 // Verify no quads are drawn when transparent background is set.
5688 host_impl_->active_tree()->set_has_transparent_background(true); 5652 host_impl_->active_tree()->set_has_transparent_background(true);
5689 host_impl_->SetFullRootLayerDamage(); 5653 host_impl_->SetFullRootLayerDamage();
5690 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 5654 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
5691 host_impl_->DrawLayers(&frame); 5655 host_impl_->DrawLayers(&frame);
5692 host_impl_->DidDrawAllLayers(frame); 5656 host_impl_->DidDrawAllLayers(frame);
5693 Mock::VerifyAndClearExpectations(&mock_context); 5657 Mock::VerifyAndClearExpectations(&mock_context);
5694 } 5658 }
5695 5659
5696 TEST_F(LayerTreeHostImplTest, ReleaseContentsTextureShouldTriggerCommit) {
5697 set_reduce_memory_result(false);
5698
5699 // If changing the memory limit wouldn't result in changing what was
5700 // committed, then no commit should be requested.
5701 set_reduce_memory_result(false);
5702 host_impl_->set_max_memory_needed_bytes(
5703 host_impl_->memory_allocation_limit_bytes() - 1);
5704 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
5705 host_impl_->memory_allocation_limit_bytes() - 1));
5706 EXPECT_FALSE(did_request_commit_);
5707 did_request_commit_ = false;
5708
5709 // If changing the memory limit would result in changing what was
5710 // committed, then a commit should be requested, even though nothing was
5711 // evicted.
5712 set_reduce_memory_result(false);
5713 host_impl_->set_max_memory_needed_bytes(
5714 host_impl_->memory_allocation_limit_bytes());
5715 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
5716 host_impl_->memory_allocation_limit_bytes() - 1));
5717 EXPECT_TRUE(did_request_commit_);
5718 did_request_commit_ = false;
5719
5720 // Especially if changing the memory limit caused evictions, we need
5721 // to re-commit.
5722 set_reduce_memory_result(true);
5723 host_impl_->set_max_memory_needed_bytes(1);
5724 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
5725 host_impl_->memory_allocation_limit_bytes() - 1));
5726 EXPECT_TRUE(did_request_commit_);
5727 did_request_commit_ = false;
5728
5729 // But if we set it to the same value that it was before, we shouldn't
5730 // re-commit.
5731 host_impl_->SetMemoryPolicy(ManagedMemoryPolicy(
5732 host_impl_->memory_allocation_limit_bytes()));
5733 EXPECT_FALSE(did_request_commit_);
5734 }
5735
5736 class LayerTreeHostImplTestWithDelegatingRenderer 5660 class LayerTreeHostImplTestWithDelegatingRenderer
5737 : public LayerTreeHostImplTest { 5661 : public LayerTreeHostImplTest {
5738 protected: 5662 protected:
5739 scoped_ptr<OutputSurface> CreateOutputSurface() override { 5663 scoped_ptr<OutputSurface> CreateOutputSurface() override {
5740 return FakeOutputSurface::CreateDelegating3d(); 5664 return FakeOutputSurface::CreateDelegating3d();
5741 } 5665 }
5742 5666
5743 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) { 5667 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) {
5744 bool expect_to_draw = !expected_damage.IsEmpty(); 5668 bool expect_to_draw = !expected_damage.IsEmpty();
5745 5669
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
6038 host_impl_ = LayerTreeHostImpl::Create( 5962 host_impl_ = LayerTreeHostImpl::Create(
6039 settings, this, &proxy_, &stats_instrumentation_, &shared_bitmap_manager_, 5963 settings, this, &proxy_, &stats_instrumentation_, &shared_bitmap_manager_,
6040 &gpu_memory_buffer_manager_, &task_graph_runner_, 0); 5964 &gpu_memory_buffer_manager_, &task_graph_runner_, 0);
6041 5965
6042 scoped_ptr<OutputSurface> output_surface( 5966 scoped_ptr<OutputSurface> output_surface(
6043 FakeOutputSurface::Create3d(TestWebGraphicsContext3D::Create())); 5967 FakeOutputSurface::Create3d(TestWebGraphicsContext3D::Create()));
6044 host_impl_->InitializeRenderer(output_surface.Pass()); 5968 host_impl_->InitializeRenderer(output_surface.Pass());
6045 EXPECT_LT(0ul, host_impl_->memory_allocation_limit_bytes()); 5969 EXPECT_LT(0ul, host_impl_->memory_allocation_limit_bytes());
6046 } 5970 }
6047 5971
6048 TEST_F(LayerTreeHostImplTest, MemoryPolicy) {
6049 ManagedMemoryPolicy policy1(
6050 456, gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, 1000);
6051 int everything_cutoff_value = ManagedMemoryPolicy::PriorityCutoffToValue(
6052 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING);
6053 int allow_nice_to_have_cutoff_value =
6054 ManagedMemoryPolicy::PriorityCutoffToValue(
6055 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE);
6056 int nothing_cutoff_value = ManagedMemoryPolicy::PriorityCutoffToValue(
6057 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING);
6058
6059 // GPU rasterization should be disabled by default on the tree(s)
6060 EXPECT_FALSE(host_impl_->active_tree()->use_gpu_rasterization());
6061 EXPECT_TRUE(host_impl_->pending_tree() == NULL);
6062
6063 host_impl_->SetVisible(true);
6064 host_impl_->SetMemoryPolicy(policy1);
6065 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_);
6066 EXPECT_EQ(everything_cutoff_value, current_priority_cutoff_value_);
6067
6068 host_impl_->SetVisible(false);
6069 EXPECT_EQ(0u, current_limit_bytes_);
6070 EXPECT_EQ(nothing_cutoff_value, current_priority_cutoff_value_);
6071
6072 host_impl_->SetVisible(true);
6073 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_);
6074 EXPECT_EQ(everything_cutoff_value, current_priority_cutoff_value_);
6075
6076 // Now enable GPU rasterization and test if we get nice to have cutoff,
6077 // when visible.
6078 LayerTreeSettings settings;
6079 settings.gpu_rasterization_enabled = true;
6080 CreateHostImpl(settings, CreateOutputSurface());
6081 host_impl_->SetContentIsSuitableForGpuRasterization(true);
6082 host_impl_->SetHasGpuRasterizationTrigger(true);
6083 host_impl_->SetVisible(true);
6084 host_impl_->SetMemoryPolicy(policy1);
6085 EXPECT_EQ(policy1.bytes_limit_when_visible, current_limit_bytes_);
6086 EXPECT_EQ(allow_nice_to_have_cutoff_value, current_priority_cutoff_value_);
6087
6088 host_impl_->SetVisible(false);
6089 EXPECT_EQ(0u, current_limit_bytes_);
6090 EXPECT_EQ(nothing_cutoff_value, current_priority_cutoff_value_);
6091 }
6092
6093 TEST_F(LayerTreeHostImplTest, RequireHighResWhenVisible) { 5972 TEST_F(LayerTreeHostImplTest, RequireHighResWhenVisible) {
6094 ASSERT_TRUE(host_impl_->active_tree()); 5973 ASSERT_TRUE(host_impl_->active_tree());
6095 5974
6096 // RequiresHighResToDraw is set when new output surface is used. 5975 // RequiresHighResToDraw is set when new output surface is used.
6097 EXPECT_TRUE(host_impl_->RequiresHighResToDraw()); 5976 EXPECT_TRUE(host_impl_->RequiresHighResToDraw());
6098 5977
6099 host_impl_->ResetRequiresHighResToDraw(); 5978 host_impl_->ResetRequiresHighResToDraw();
6100 5979
6101 host_impl_->SetVisible(false); 5980 host_impl_->SetVisible(false);
6102 EXPECT_FALSE(host_impl_->RequiresHighResToDraw()); 5981 EXPECT_FALSE(host_impl_->RequiresHighResToDraw());
(...skipping 1867 matching lines...) Expand 10 before | Expand all | Expand 10 after
7970 // Hold an unowned pointer to the output surface to use for mock expectations. 7849 // Hold an unowned pointer to the output surface to use for mock expectations.
7971 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get(); 7850 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get();
7972 7851
7973 CreateHostImpl(DefaultSettings(), output_surface.Pass()); 7852 CreateHostImpl(DefaultSettings(), output_surface.Pass());
7974 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1); 7853 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1);
7975 host_impl_->BeginCommit(); 7854 host_impl_->BeginCommit();
7976 } 7855 }
7977 7856
7978 } // namespace 7857 } // namespace
7979 } // namespace cc 7858 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698