| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cc/test/test_layer_tree_host_base.h" | |
| 6 | |
| 7 #include "cc/test/fake_output_surface.h" | |
| 8 #include "cc/test/fake_raster_source.h" | |
| 9 #include "cc/trees/layer_tree_impl.h" | |
| 10 | |
| 11 namespace cc { | |
| 12 | |
| 13 TestLayerTreeHostBase::TestLayerTreeHostBase() | |
| 14 : task_runner_provider_(base::ThreadTaskRunnerHandle::Get()), | |
| 15 pending_layer_(nullptr), | |
| 16 active_layer_(nullptr), | |
| 17 old_pending_layer_(nullptr), | |
| 18 root_id_(6), | |
| 19 id_(7) {} | |
| 20 | |
| 21 TestLayerTreeHostBase::~TestLayerTreeHostBase() = default; | |
| 22 | |
| 23 void TestLayerTreeHostBase::SetUp() { | |
| 24 output_surface_ = CreateOutputSurface(); | |
| 25 task_graph_runner_ = CreateTaskGraphRunner(); | |
| 26 host_impl_ = CreateHostImpl(CreateSettings(), &task_runner_provider_, | |
| 27 &shared_bitmap_manager_, task_graph_runner_.get(), | |
| 28 &gpu_memory_buffer_manager_); | |
| 29 InitializeRenderer(); | |
| 30 SetInitialTreePriority(); | |
| 31 } | |
| 32 | |
| 33 LayerTreeSettings TestLayerTreeHostBase::CreateSettings() { | |
| 34 return LayerTreeSettings(); | |
| 35 } | |
| 36 | |
| 37 std::unique_ptr<OutputSurface> TestLayerTreeHostBase::CreateOutputSurface() { | |
| 38 return FakeOutputSurface::Create3d(); | |
| 39 } | |
| 40 | |
| 41 std::unique_ptr<FakeLayerTreeHostImpl> TestLayerTreeHostBase::CreateHostImpl( | |
| 42 const LayerTreeSettings& settings, | |
| 43 TaskRunnerProvider* task_runner_provider, | |
| 44 SharedBitmapManager* shared_bitmap_manager, | |
| 45 TaskGraphRunner* task_graph_runner, | |
| 46 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) { | |
| 47 return base::WrapUnique(new FakeLayerTreeHostImpl( | |
| 48 settings, task_runner_provider, shared_bitmap_manager, task_graph_runner, | |
| 49 gpu_memory_buffer_manager)); | |
| 50 } | |
| 51 | |
| 52 std::unique_ptr<TaskGraphRunner> | |
| 53 TestLayerTreeHostBase::CreateTaskGraphRunner() { | |
| 54 return base::WrapUnique(new TestTaskGraphRunner); | |
| 55 } | |
| 56 | |
| 57 void TestLayerTreeHostBase::InitializeRenderer() { | |
| 58 host_impl_->SetVisible(true); | |
| 59 host_impl_->InitializeRenderer(output_surface_.get()); | |
| 60 } | |
| 61 | |
| 62 void TestLayerTreeHostBase::ResetOutputSurface( | |
| 63 std::unique_ptr<OutputSurface> output_surface) { | |
| 64 host_impl()->DidLoseOutputSurface(); | |
| 65 host_impl()->SetVisible(true); | |
| 66 host_impl()->InitializeRenderer(output_surface.get()); | |
| 67 output_surface_ = std::move(output_surface); | |
| 68 } | |
| 69 | |
| 70 std::unique_ptr<FakeLayerTreeHostImpl> TestLayerTreeHostBase::TakeHostImpl() { | |
| 71 return std::move(host_impl_); | |
| 72 } | |
| 73 | |
| 74 void TestLayerTreeHostBase::SetupDefaultTrees(const gfx::Size& layer_bounds) { | |
| 75 scoped_refptr<FakeRasterSource> pending_raster_source = | |
| 76 FakeRasterSource::CreateFilled(layer_bounds); | |
| 77 scoped_refptr<FakeRasterSource> active_raster_source = | |
| 78 FakeRasterSource::CreateFilled(layer_bounds); | |
| 79 | |
| 80 SetupTrees(std::move(pending_raster_source), std::move(active_raster_source)); | |
| 81 } | |
| 82 | |
| 83 void TestLayerTreeHostBase::SetupTrees( | |
| 84 scoped_refptr<RasterSource> pending_raster_source, | |
| 85 scoped_refptr<RasterSource> active_raster_source) { | |
| 86 SetupPendingTree(std::move(active_raster_source)); | |
| 87 ActivateTree(); | |
| 88 SetupPendingTree(std::move(pending_raster_source)); | |
| 89 } | |
| 90 | |
| 91 void TestLayerTreeHostBase::SetupPendingTree( | |
| 92 scoped_refptr<RasterSource> raster_source) { | |
| 93 SetupPendingTree(std::move(raster_source), gfx::Size(), Region()); | |
| 94 } | |
| 95 | |
| 96 void TestLayerTreeHostBase::SetupPendingTree( | |
| 97 scoped_refptr<RasterSource> raster_source, | |
| 98 const gfx::Size& tile_size, | |
| 99 const Region& invalidation) { | |
| 100 host_impl()->CreatePendingTree(); | |
| 101 host_impl()->pending_tree()->PushPageScaleFromMainThread(1.f, 0.00001f, | |
| 102 100000.f); | |
| 103 LayerTreeImpl* pending_tree = host_impl()->pending_tree(); | |
| 104 pending_tree->SetDeviceScaleFactor( | |
| 105 host_impl()->active_tree()->device_scale_factor()); | |
| 106 | |
| 107 // Steal from the recycled tree if possible. | |
| 108 LayerImpl* pending_root = pending_tree->root_layer(); | |
| 109 std::unique_ptr<FakePictureLayerImpl> pending_layer; | |
| 110 DCHECK(!pending_root || pending_root->id() == root_id_); | |
| 111 if (!pending_root) { | |
| 112 std::unique_ptr<LayerImpl> new_pending_root = | |
| 113 LayerImpl::Create(pending_tree, root_id_); | |
| 114 pending_layer = FakePictureLayerImpl::Create(pending_tree, id_); | |
| 115 if (!tile_size.IsEmpty()) | |
| 116 pending_layer->set_fixed_tile_size(tile_size); | |
| 117 pending_layer->SetDrawsContent(true); | |
| 118 pending_layer->SetScrollClipLayer(new_pending_root->id()); | |
| 119 pending_root = new_pending_root.get(); | |
| 120 pending_tree->SetRootLayer(std::move(new_pending_root)); | |
| 121 } else { | |
| 122 pending_layer.reset(static_cast<FakePictureLayerImpl*>( | |
| 123 pending_root->RemoveChildForTesting(pending_root->children()[0]) | |
| 124 .release())); | |
| 125 if (!tile_size.IsEmpty()) | |
| 126 pending_layer->set_fixed_tile_size(tile_size); | |
| 127 } | |
| 128 pending_root->test_properties()->force_render_surface = true; | |
| 129 // The bounds() just mirror the raster source size. | |
| 130 pending_layer->SetBounds(raster_source->GetSize()); | |
| 131 pending_layer->SetRasterSourceOnPending(raster_source, invalidation); | |
| 132 | |
| 133 pending_root->AddChild(std::move(pending_layer)); | |
| 134 pending_tree->SetViewportLayersFromIds(Layer::INVALID_ID, | |
| 135 pending_tree->root_layer()->id(), | |
| 136 Layer::INVALID_ID, Layer::INVALID_ID); | |
| 137 | |
| 138 pending_layer_ = static_cast<FakePictureLayerImpl*>( | |
| 139 host_impl()->pending_tree()->LayerById(id_)); | |
| 140 | |
| 141 // Add tilings/tiles for the layer. | |
| 142 bool update_lcd_text = false; | |
| 143 RebuildPropertyTreesOnPendingTree(); | |
| 144 host_impl()->pending_tree()->UpdateDrawProperties(update_lcd_text); | |
| 145 } | |
| 146 | |
| 147 void TestLayerTreeHostBase::ActivateTree() { | |
| 148 RebuildPropertyTreesOnPendingTree(); | |
| 149 host_impl()->ActivateSyncTree(); | |
| 150 CHECK(!host_impl()->pending_tree()); | |
| 151 CHECK(host_impl()->recycle_tree()); | |
| 152 old_pending_layer_ = pending_layer_; | |
| 153 pending_layer_ = nullptr; | |
| 154 active_layer_ = static_cast<FakePictureLayerImpl*>( | |
| 155 host_impl()->active_tree()->LayerById(id_)); | |
| 156 | |
| 157 bool update_lcd_text = false; | |
| 158 host_impl()->active_tree()->UpdateDrawProperties(update_lcd_text); | |
| 159 } | |
| 160 | |
| 161 void TestLayerTreeHostBase::RebuildPropertyTreesOnPendingTree() { | |
| 162 host_impl()->pending_tree()->property_trees()->needs_rebuild = true; | |
| 163 host_impl()->pending_tree()->BuildPropertyTreesForTesting(); | |
| 164 } | |
| 165 | |
| 166 void TestLayerTreeHostBase::SetInitialTreePriority() { | |
| 167 GlobalStateThatImpactsTilePriority state; | |
| 168 | |
| 169 state.soft_memory_limit_in_bytes = 100 * 1000 * 1000; | |
| 170 state.num_resources_limit = 10000; | |
| 171 state.hard_memory_limit_in_bytes = state.soft_memory_limit_in_bytes * 2; | |
| 172 state.memory_limit_policy = ALLOW_ANYTHING; | |
| 173 state.tree_priority = SAME_PRIORITY_FOR_BOTH_TREES; | |
| 174 | |
| 175 host_impl_->resource_pool()->SetResourceUsageLimits( | |
| 176 state.soft_memory_limit_in_bytes, state.num_resources_limit); | |
| 177 host_impl_->tile_manager()->SetGlobalStateForTesting(state); | |
| 178 } | |
| 179 | |
| 180 } // namespace cc | |
| OLD | NEW |