| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 | 271 |
| 272 size_t missing_tile_count = 0u; | 272 size_t missing_tile_count = 0u; |
| 273 size_t on_demand_missing_tile_count = 0u; | 273 size_t on_demand_missing_tile_count = 0u; |
| 274 for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(), | 274 for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(), |
| 275 max_contents_scale, | 275 max_contents_scale, |
| 276 scaled_visible_content_rect, | 276 scaled_visible_content_rect, |
| 277 ideal_contents_scale_); | 277 ideal_contents_scale_); |
| 278 iter; | 278 iter; |
| 279 ++iter) { | 279 ++iter) { |
| 280 gfx::Rect geometry_rect = iter.geometry_rect(); | 280 gfx::Rect geometry_rect = iter.geometry_rect(); |
| 281 gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect(); |
| 281 gfx::Rect visible_geometry_rect = occlusion_tracker.UnoccludedContentRect( | 282 gfx::Rect visible_geometry_rect = occlusion_tracker.UnoccludedContentRect( |
| 282 geometry_rect, scaled_draw_transform); | 283 geometry_rect, scaled_draw_transform); |
| 283 if (visible_geometry_rect.IsEmpty()) | 284 if (visible_geometry_rect.IsEmpty()) |
| 284 continue; | 285 continue; |
| 285 | 286 |
| 286 append_quads_data->visible_content_area += | 287 append_quads_data->visible_content_area += |
| 287 visible_geometry_rect.width() * visible_geometry_rect.height(); | 288 visible_geometry_rect.width() * visible_geometry_rect.height(); |
| 288 | 289 |
| 289 bool has_draw_quad = false; | 290 bool has_draw_quad = false; |
| 290 if (*iter && iter->IsReadyToDraw()) { | 291 if (*iter && iter->IsReadyToDraw()) { |
| 291 const ManagedTileState::TileVersion& tile_version = | 292 const ManagedTileState::TileVersion& tile_version = |
| 292 iter->GetTileVersionForDrawing(); | 293 iter->GetTileVersionForDrawing(); |
| 293 switch (tile_version.mode()) { | 294 switch (tile_version.mode()) { |
| 294 case ManagedTileState::TileVersion::RESOURCE_MODE: { | 295 case ManagedTileState::TileVersion::RESOURCE_MODE: { |
| 295 gfx::RectF texture_rect = iter.texture_rect(); | 296 gfx::RectF texture_rect = iter.texture_rect(); |
| 296 gfx::Rect opaque_rect = iter->opaque_rect(); | |
| 297 opaque_rect.Intersect(geometry_rect); | |
| 298 | 297 |
| 299 // The raster_contents_scale_ is the best scale that the layer is | 298 // The raster_contents_scale_ is the best scale that the layer is |
| 300 // trying to produce, even though it may not be ideal. Since that's | 299 // trying to produce, even though it may not be ideal. Since that's |
| 301 // the best the layer can promise in the future, consider those as | 300 // the best the layer can promise in the future, consider those as |
| 302 // complete. But if a tile is ideal scale, we don't want to consider | 301 // complete. But if a tile is ideal scale, we don't want to consider |
| 303 // it incomplete and trying to replace it with a tile at a worse | 302 // it incomplete and trying to replace it with a tile at a worse |
| 304 // scale. | 303 // scale. |
| 305 if (iter->contents_scale() != raster_contents_scale_ && | 304 if (iter->contents_scale() != raster_contents_scale_ && |
| 306 iter->contents_scale() != ideal_contents_scale_ && | 305 iter->contents_scale() != ideal_contents_scale_ && |
| 307 geometry_rect.Intersects(scaled_viewport_for_tile_priority)) { | 306 geometry_rect.Intersects(scaled_viewport_for_tile_priority)) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 323 } | 322 } |
| 324 case ManagedTileState::TileVersion::PICTURE_PILE_MODE: { | 323 case ManagedTileState::TileVersion::PICTURE_PILE_MODE: { |
| 325 if (!layer_tree_impl() | 324 if (!layer_tree_impl() |
| 326 ->GetRendererCapabilities() | 325 ->GetRendererCapabilities() |
| 327 .allow_rasterize_on_demand) { | 326 .allow_rasterize_on_demand) { |
| 328 ++on_demand_missing_tile_count; | 327 ++on_demand_missing_tile_count; |
| 329 break; | 328 break; |
| 330 } | 329 } |
| 331 | 330 |
| 332 gfx::RectF texture_rect = iter.texture_rect(); | 331 gfx::RectF texture_rect = iter.texture_rect(); |
| 333 gfx::Rect opaque_rect = iter->opaque_rect(); | |
| 334 opaque_rect.Intersect(geometry_rect); | |
| 335 | 332 |
| 336 ResourceProvider* resource_provider = | 333 ResourceProvider* resource_provider = |
| 337 layer_tree_impl()->resource_provider(); | 334 layer_tree_impl()->resource_provider(); |
| 338 ResourceFormat format = | 335 ResourceFormat format = |
| 339 resource_provider->memory_efficient_texture_format(); | 336 resource_provider->memory_efficient_texture_format(); |
| 340 PictureDrawQuad* quad = | 337 PictureDrawQuad* quad = |
| 341 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 338 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
| 342 quad->SetNew(shared_quad_state, | 339 quad->SetNew(shared_quad_state, |
| 343 geometry_rect, | 340 geometry_rect, |
| 344 opaque_rect, | 341 opaque_rect, |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 // memory savings that we can get. Note that we don't handle solid color | 577 // memory savings that we can get. Note that we don't handle solid color |
| 581 // masks, so we shouldn't bother analyzing those. | 578 // masks, so we shouldn't bother analyzing those. |
| 582 // Bugs: crbug.com/397198, crbug.com/396908 | 579 // Bugs: crbug.com/397198, crbug.com/396908 |
| 583 if (!pile_->is_mask()) | 580 if (!pile_->is_mask()) |
| 584 flags = Tile::USE_PICTURE_ANALYSIS; | 581 flags = Tile::USE_PICTURE_ANALYSIS; |
| 585 | 582 |
| 586 return layer_tree_impl()->tile_manager()->CreateTile( | 583 return layer_tree_impl()->tile_manager()->CreateTile( |
| 587 pile_.get(), | 584 pile_.get(), |
| 588 content_rect.size(), | 585 content_rect.size(), |
| 589 content_rect, | 586 content_rect, |
| 590 contents_opaque() ? content_rect : gfx::Rect(), | |
| 591 tiling->contents_scale(), | 587 tiling->contents_scale(), |
| 592 id(), | 588 id(), |
| 593 layer_tree_impl()->source_frame_number(), | 589 layer_tree_impl()->source_frame_number(), |
| 594 flags); | 590 flags); |
| 595 } | 591 } |
| 596 | 592 |
| 597 PicturePileImpl* PictureLayerImpl::GetPile() { | 593 PicturePileImpl* PictureLayerImpl::GetPile() { |
| 598 return pile_.get(); | 594 return pile_.get(); |
| 599 } | 595 } |
| 600 | 596 |
| (...skipping 1165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); | 1762 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); |
| 1767 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; | 1763 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; |
| 1768 return tiling_range.end - 1 - current_tiling_range_offset; | 1764 return tiling_range.end - 1 - current_tiling_range_offset; |
| 1769 } | 1765 } |
| 1770 } | 1766 } |
| 1771 NOTREACHED(); | 1767 NOTREACHED(); |
| 1772 return 0; | 1768 return 0; |
| 1773 } | 1769 } |
| 1774 | 1770 |
| 1775 } // namespace cc | 1771 } // namespace cc |
| OLD | NEW |