| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 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/fake_picture_layer_impl.h" | |
| 6 | |
| 7 #include <vector> | |
| 8 #include "cc/resources/tile.h" | |
| 9 #include "cc/trees/layer_tree_impl.h" | |
| 10 | |
| 11 namespace cc { | |
| 12 | |
| 13 FakePictureLayerImpl::FakePictureLayerImpl( | |
| 14 LayerTreeImpl* tree_impl, | |
| 15 int id, | |
| 16 scoped_refptr<RasterSource> raster_source, | |
| 17 bool is_mask) | |
| 18 : PictureLayerImpl(tree_impl, | |
| 19 id, | |
| 20 is_mask, | |
| 21 new LayerImpl::SyncedScrollOffset), | |
| 22 append_quads_count_(0), | |
| 23 did_become_active_call_count_(0), | |
| 24 has_valid_tile_priorities_(false), | |
| 25 use_set_valid_tile_priorities_flag_(false), | |
| 26 release_resources_count_(0) { | |
| 27 SetBounds(raster_source->GetSize()); | |
| 28 SetContentBounds(raster_source->GetSize()); | |
| 29 SetRasterSourceOnPending(raster_source, Region()); | |
| 30 } | |
| 31 | |
| 32 FakePictureLayerImpl::FakePictureLayerImpl( | |
| 33 LayerTreeImpl* tree_impl, | |
| 34 int id, | |
| 35 scoped_refptr<RasterSource> raster_source, | |
| 36 bool is_mask, | |
| 37 const gfx::Size& layer_bounds) | |
| 38 : PictureLayerImpl(tree_impl, | |
| 39 id, | |
| 40 is_mask, | |
| 41 new LayerImpl::SyncedScrollOffset), | |
| 42 append_quads_count_(0), | |
| 43 did_become_active_call_count_(0), | |
| 44 has_valid_tile_priorities_(false), | |
| 45 use_set_valid_tile_priorities_flag_(false), | |
| 46 release_resources_count_(0) { | |
| 47 SetBounds(layer_bounds); | |
| 48 SetContentBounds(layer_bounds); | |
| 49 SetRasterSourceOnPending(raster_source, Region()); | |
| 50 } | |
| 51 | |
| 52 FakePictureLayerImpl::FakePictureLayerImpl(LayerTreeImpl* tree_impl, | |
| 53 int id, | |
| 54 bool is_mask) | |
| 55 : FakePictureLayerImpl(tree_impl, | |
| 56 id, | |
| 57 is_mask, | |
| 58 new LayerImpl::SyncedScrollOffset) { | |
| 59 } | |
| 60 | |
| 61 FakePictureLayerImpl::FakePictureLayerImpl( | |
| 62 LayerTreeImpl* tree_impl, | |
| 63 int id, | |
| 64 bool is_mask, | |
| 65 scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset) | |
| 66 : PictureLayerImpl(tree_impl, id, is_mask, synced_scroll_offset), | |
| 67 append_quads_count_(0), | |
| 68 did_become_active_call_count_(0), | |
| 69 has_valid_tile_priorities_(false), | |
| 70 use_set_valid_tile_priorities_flag_(false), | |
| 71 release_resources_count_(0) { | |
| 72 } | |
| 73 | |
| 74 scoped_ptr<LayerImpl> FakePictureLayerImpl::CreateLayerImpl( | |
| 75 LayerTreeImpl* tree_impl) { | |
| 76 return make_scoped_ptr(new FakePictureLayerImpl(tree_impl, id(), is_mask_, | |
| 77 synced_scroll_offset())); | |
| 78 } | |
| 79 | |
| 80 void FakePictureLayerImpl::PushPropertiesTo(LayerImpl* layer_impl) { | |
| 81 FakePictureLayerImpl* picture_layer_impl = | |
| 82 static_cast<FakePictureLayerImpl*>(layer_impl); | |
| 83 picture_layer_impl->fixed_tile_size_ = fixed_tile_size_; | |
| 84 PictureLayerImpl::PushPropertiesTo(layer_impl); | |
| 85 } | |
| 86 | |
| 87 void FakePictureLayerImpl::AppendQuads( | |
| 88 RenderPass* render_pass, | |
| 89 AppendQuadsData* append_quads_data) { | |
| 90 PictureLayerImpl::AppendQuads(render_pass, append_quads_data); | |
| 91 ++append_quads_count_; | |
| 92 } | |
| 93 | |
| 94 gfx::Size FakePictureLayerImpl::CalculateTileSize( | |
| 95 const gfx::Size& content_bounds) const { | |
| 96 if (fixed_tile_size_.IsEmpty()) { | |
| 97 return PictureLayerImpl::CalculateTileSize(content_bounds); | |
| 98 } | |
| 99 | |
| 100 return fixed_tile_size_; | |
| 101 } | |
| 102 | |
| 103 PictureLayerTiling* FakePictureLayerImpl::HighResTiling() const { | |
| 104 PictureLayerTiling* result = NULL; | |
| 105 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | |
| 106 PictureLayerTiling* tiling = tilings_->tiling_at(i); | |
| 107 if (tiling->resolution() == HIGH_RESOLUTION) { | |
| 108 // There should be only one high res tiling. | |
| 109 CHECK(!result); | |
| 110 result = tiling; | |
| 111 } | |
| 112 } | |
| 113 return result; | |
| 114 } | |
| 115 | |
| 116 PictureLayerTiling* FakePictureLayerImpl::LowResTiling() const { | |
| 117 PictureLayerTiling* result = NULL; | |
| 118 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | |
| 119 PictureLayerTiling* tiling = tilings_->tiling_at(i); | |
| 120 if (tiling->resolution() == LOW_RESOLUTION) { | |
| 121 // There should be only one low res tiling. | |
| 122 CHECK(!result); | |
| 123 result = tiling; | |
| 124 } | |
| 125 } | |
| 126 return result; | |
| 127 } | |
| 128 | |
| 129 void FakePictureLayerImpl::SetRasterSourceOnPending( | |
| 130 scoped_refptr<RasterSource> raster_source, | |
| 131 const Region& invalidation) { | |
| 132 DCHECK(layer_tree_impl()->IsPendingTree()); | |
| 133 Region invalidation_temp = invalidation; | |
| 134 const PictureLayerTilingSet* pending_set = nullptr; | |
| 135 set_gpu_raster_max_texture_size(layer_tree_impl()->device_viewport_size()); | |
| 136 UpdateRasterSource(raster_source, &invalidation_temp, pending_set); | |
| 137 } | |
| 138 | |
| 139 void FakePictureLayerImpl::SetIsDrawnRenderSurfaceLayerListMember(bool is) { | |
| 140 draw_properties().last_drawn_render_surface_layer_list_id = | |
| 141 is ? layer_tree_impl()->current_render_surface_list_id() | |
| 142 : layer_tree_impl()->current_render_surface_list_id() - 1; | |
| 143 } | |
| 144 | |
| 145 void FakePictureLayerImpl::CreateAllTiles() { | |
| 146 for (size_t i = 0; i < num_tilings(); ++i) | |
| 147 tilings_->tiling_at(i)->CreateAllTilesForTesting(); | |
| 148 } | |
| 149 | |
| 150 void FakePictureLayerImpl::SetAllTilesVisible() { | |
| 151 WhichTree tree = | |
| 152 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; | |
| 153 | |
| 154 for (size_t tiling_idx = 0; tiling_idx < tilings_->num_tilings(); | |
| 155 ++tiling_idx) { | |
| 156 PictureLayerTiling* tiling = tilings_->tiling_at(tiling_idx); | |
| 157 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | |
| 158 for (size_t tile_idx = 0; tile_idx < tiles.size(); ++tile_idx) { | |
| 159 Tile* tile = tiles[tile_idx]; | |
| 160 TilePriority priority; | |
| 161 priority.resolution = HIGH_RESOLUTION; | |
| 162 priority.priority_bin = TilePriority::NOW; | |
| 163 priority.distance_to_visible = 0.f; | |
| 164 tile->SetPriority(tree, priority); | |
| 165 } | |
| 166 } | |
| 167 } | |
| 168 | |
| 169 void FakePictureLayerImpl::ResetAllTilesPriorities() { | |
| 170 for (size_t tiling_idx = 0; tiling_idx < tilings_->num_tilings(); | |
| 171 ++tiling_idx) { | |
| 172 PictureLayerTiling* tiling = tilings_->tiling_at(tiling_idx); | |
| 173 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | |
| 174 for (size_t tile_idx = 0; tile_idx < tiles.size(); ++tile_idx) { | |
| 175 Tile* tile = tiles[tile_idx]; | |
| 176 tile->SetPriority(ACTIVE_TREE, TilePriority()); | |
| 177 tile->SetPriority(PENDING_TREE, TilePriority()); | |
| 178 } | |
| 179 } | |
| 180 } | |
| 181 | |
| 182 void FakePictureLayerImpl::SetAllTilesReady() { | |
| 183 for (size_t tiling_idx = 0; tiling_idx < tilings_->num_tilings(); | |
| 184 ++tiling_idx) { | |
| 185 PictureLayerTiling* tiling = tilings_->tiling_at(tiling_idx); | |
| 186 SetAllTilesReadyInTiling(tiling); | |
| 187 } | |
| 188 } | |
| 189 | |
| 190 void FakePictureLayerImpl::SetAllTilesReadyInTiling( | |
| 191 PictureLayerTiling* tiling) { | |
| 192 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | |
| 193 for (size_t tile_idx = 0; tile_idx < tiles.size(); ++tile_idx) { | |
| 194 Tile* tile = tiles[tile_idx]; | |
| 195 SetTileReady(tile); | |
| 196 } | |
| 197 } | |
| 198 | |
| 199 void FakePictureLayerImpl::SetTileReady(Tile* tile) { | |
| 200 TileDrawInfo& draw_info = tile->draw_info(); | |
| 201 draw_info.SetSolidColorForTesting(true); | |
| 202 DCHECK(tile->IsReadyToDraw()); | |
| 203 } | |
| 204 | |
| 205 void FakePictureLayerImpl::DidBecomeActive() { | |
| 206 PictureLayerImpl::DidBecomeActive(); | |
| 207 ++did_become_active_call_count_; | |
| 208 } | |
| 209 | |
| 210 bool FakePictureLayerImpl::HasValidTilePriorities() const { | |
| 211 return use_set_valid_tile_priorities_flag_ | |
| 212 ? has_valid_tile_priorities_ | |
| 213 : PictureLayerImpl::HasValidTilePriorities(); | |
| 214 } | |
| 215 | |
| 216 size_t FakePictureLayerImpl::CountTilesRequired( | |
| 217 TileRequirementCheck is_tile_required_callback) const { | |
| 218 if (!HasValidTilePriorities()) | |
| 219 return 0; | |
| 220 | |
| 221 if (!tilings_) | |
| 222 return 0; | |
| 223 | |
| 224 if (visible_rect_for_tile_priority_.IsEmpty()) | |
| 225 return 0; | |
| 226 | |
| 227 gfx::Rect rect = viewport_rect_for_tile_priority_in_content_space_; | |
| 228 rect.Intersect(visible_rect_for_tile_priority_); | |
| 229 | |
| 230 size_t count = 0; | |
| 231 | |
| 232 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | |
| 233 PictureLayerTiling* tiling = tilings_->tiling_at(i); | |
| 234 if (tiling->resolution() != HIGH_RESOLUTION && | |
| 235 tiling->resolution() != LOW_RESOLUTION) | |
| 236 continue; | |
| 237 | |
| 238 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter; | |
| 239 ++iter) { | |
| 240 const Tile* tile = *iter; | |
| 241 // A null tile (i.e. missing recording) can just be skipped. | |
| 242 // TODO(vmpstr): Verify this is true if we create tiles in raster | |
| 243 // iterators. | |
| 244 if (!tile) | |
| 245 continue; | |
| 246 | |
| 247 // We can't check tile->required_for_activation, because that value might | |
| 248 // be out of date. It is updated in the raster/eviction iterators. | |
| 249 // TODO(vmpstr): Remove the comment once you can't access this information | |
| 250 // from the tile. | |
| 251 if ((tiling->*is_tile_required_callback)(tile)) | |
| 252 ++count; | |
| 253 } | |
| 254 } | |
| 255 | |
| 256 return count; | |
| 257 } | |
| 258 | |
| 259 size_t FakePictureLayerImpl::CountTilesRequiredForActivation() const { | |
| 260 if (!layer_tree_impl()->IsPendingTree()) | |
| 261 return 0; | |
| 262 | |
| 263 return CountTilesRequired( | |
| 264 &PictureLayerTiling::IsTileRequiredForActivationIfVisible); | |
| 265 } | |
| 266 | |
| 267 size_t FakePictureLayerImpl::CountTilesRequiredForDraw() const { | |
| 268 if (!layer_tree_impl()->IsActiveTree()) | |
| 269 return 0; | |
| 270 | |
| 271 return CountTilesRequired( | |
| 272 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); | |
| 273 } | |
| 274 | |
| 275 void FakePictureLayerImpl::ReleaseResources() { | |
| 276 PictureLayerImpl::ReleaseResources(); | |
| 277 ++release_resources_count_; | |
| 278 } | |
| 279 | |
| 280 } // namespace cc | |
| OLD | NEW |