Chromium Code Reviews| 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 81 raster_page_scale_(0.f), | 81 raster_page_scale_(0.f), |
| 82 raster_device_scale_(0.f), | 82 raster_device_scale_(0.f), |
| 83 raster_source_scale_(0.f), | 83 raster_source_scale_(0.f), |
| 84 raster_contents_scale_(0.f), | 84 raster_contents_scale_(0.f), |
| 85 low_res_raster_contents_scale_(0.f), | 85 low_res_raster_contents_scale_(0.f), |
| 86 raster_source_scale_is_fixed_(false), | 86 raster_source_scale_is_fixed_(false), |
| 87 was_screen_space_transform_animating_(false), | 87 was_screen_space_transform_animating_(false), |
| 88 needs_post_commit_initialization_(true), | 88 needs_post_commit_initialization_(true), |
| 89 should_update_tile_priorities_(false), | 89 should_update_tile_priorities_(false), |
| 90 only_used_low_res_last_append_quads_(false), | 90 only_used_low_res_last_append_quads_(false), |
| 91 is_mask_(false) { | 91 is_mask_(false), |
| 92 nearest_neighbor_(false) { | |
| 92 layer_tree_impl()->RegisterPictureLayerImpl(this); | 93 layer_tree_impl()->RegisterPictureLayerImpl(this); |
| 93 } | 94 } |
| 94 | 95 |
| 95 PictureLayerImpl::~PictureLayerImpl() { | 96 PictureLayerImpl::~PictureLayerImpl() { |
| 96 if (twin_layer_) | 97 if (twin_layer_) |
| 97 twin_layer_->twin_layer_ = nullptr; | 98 twin_layer_->twin_layer_ = nullptr; |
| 98 layer_tree_impl()->UnregisterPictureLayerImpl(this); | 99 layer_tree_impl()->UnregisterPictureLayerImpl(this); |
| 99 } | 100 } |
| 100 | 101 |
| 101 scoped_ptr<TilingSetEvictionQueue> PictureLayerImpl::CreateEvictionQueue( | 102 scoped_ptr<TilingSetEvictionQueue> PictureLayerImpl::CreateEvictionQueue( |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 127 DCHECK_IMPLIES(twin_layer_, twin_layer_ == layer_impl); | 128 DCHECK_IMPLIES(twin_layer_, twin_layer_ == layer_impl); |
| 128 DCHECK_IMPLIES(twin_layer_, layer_impl->twin_layer_ == this); | 129 DCHECK_IMPLIES(twin_layer_, layer_impl->twin_layer_ == this); |
| 129 // The twin relationship does not need to exist before the first | 130 // The twin relationship does not need to exist before the first |
| 130 // PushPropertiesTo from pending to active layer since before that the active | 131 // PushPropertiesTo from pending to active layer since before that the active |
| 131 // layer can not have a pile or tilings, it has only been created and inserted | 132 // layer can not have a pile or tilings, it has only been created and inserted |
| 132 // into the tree at that point. | 133 // into the tree at that point. |
| 133 twin_layer_ = layer_impl; | 134 twin_layer_ = layer_impl; |
| 134 layer_impl->twin_layer_ = this; | 135 layer_impl->twin_layer_ = this; |
| 135 | 136 |
| 136 layer_impl->set_is_mask(is_mask_); | 137 layer_impl->set_is_mask(is_mask_); |
| 138 layer_impl->SetNearestNeighbor(nearest_neighbor_); | |
| 137 layer_impl->UpdateRasterSource(raster_source_); | 139 layer_impl->UpdateRasterSource(raster_source_); |
| 138 | 140 |
| 139 DCHECK_IMPLIES(raster_source_->IsSolidColor(), tilings_->num_tilings() == 0); | 141 DCHECK_IMPLIES(raster_source_->IsSolidColor(), tilings_->num_tilings() == 0); |
| 140 // Tilings would be expensive to push, so we swap. | 142 // Tilings would be expensive to push, so we swap. |
| 141 layer_impl->tilings_.swap(tilings_); | 143 layer_impl->tilings_.swap(tilings_); |
| 142 layer_impl->tilings_->SetClient(layer_impl); | 144 layer_impl->tilings_->SetClient(layer_impl); |
| 143 if (tilings_) | 145 if (tilings_) |
| 144 tilings_->SetClient(this); | 146 tilings_->SetClient(this); |
| 145 | 147 |
| 146 // Ensure that the recycle tree doesn't have any unshared tiles. | 148 // Ensure that the recycle tree doesn't have any unshared tiles. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 243 if (visible_geometry_rect.IsEmpty()) | 245 if (visible_geometry_rect.IsEmpty()) |
| 244 return; | 246 return; |
| 245 | 247 |
| 246 gfx::Size texture_size = scaled_visible_content_rect.size(); | 248 gfx::Size texture_size = scaled_visible_content_rect.size(); |
| 247 gfx::RectF texture_rect = gfx::RectF(texture_size); | 249 gfx::RectF texture_rect = gfx::RectF(texture_size); |
| 248 gfx::Rect quad_content_rect = scaled_visible_content_rect; | 250 gfx::Rect quad_content_rect = scaled_visible_content_rect; |
| 249 | 251 |
| 250 PictureDrawQuad* quad = | 252 PictureDrawQuad* quad = |
| 251 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 253 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
| 252 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 254 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
| 253 visible_geometry_rect, texture_rect, texture_size, RGBA_8888, | 255 visible_geometry_rect, texture_rect, texture_size, |
| 254 quad_content_rect, max_contents_scale, raster_source_); | 256 nearest_neighbor_, RGBA_8888, quad_content_rect, |
| 257 max_contents_scale, raster_source_); | |
| 255 return; | 258 return; |
| 256 } | 259 } |
| 257 | 260 |
| 258 AppendDebugBorderQuad( | 261 AppendDebugBorderQuad( |
| 259 render_pass, scaled_content_bounds, shared_quad_state, append_quads_data); | 262 render_pass, scaled_content_bounds, shared_quad_state, append_quads_data); |
| 260 | 263 |
| 261 if (ShowDebugBorders()) { | 264 if (ShowDebugBorders()) { |
| 262 for (PictureLayerTilingSet::CoverageIterator iter( | 265 for (PictureLayerTilingSet::CoverageIterator iter( |
| 263 tilings_.get(), | 266 tilings_.get(), |
| 264 max_contents_scale, | 267 max_contents_scale, |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 356 | 359 |
| 357 TileDrawQuad* quad = | 360 TileDrawQuad* quad = |
| 358 render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); | 361 render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
| 359 quad->SetNew(shared_quad_state, | 362 quad->SetNew(shared_quad_state, |
| 360 geometry_rect, | 363 geometry_rect, |
| 361 opaque_rect, | 364 opaque_rect, |
| 362 visible_geometry_rect, | 365 visible_geometry_rect, |
| 363 draw_info.get_resource_id(), | 366 draw_info.get_resource_id(), |
| 364 texture_rect, | 367 texture_rect, |
| 365 iter.texture_size(), | 368 iter.texture_size(), |
| 366 draw_info.contents_swizzled()); | 369 draw_info.contents_swizzled(), |
| 370 nearest_neighbor_); | |
| 367 has_draw_quad = true; | 371 has_draw_quad = true; |
| 368 break; | 372 break; |
| 369 } | 373 } |
| 370 case ManagedTileState::DrawInfo::PICTURE_PILE_MODE: { | 374 case ManagedTileState::DrawInfo::PICTURE_PILE_MODE: { |
| 371 if (!layer_tree_impl() | 375 if (!layer_tree_impl() |
| 372 ->GetRendererCapabilities() | 376 ->GetRendererCapabilities() |
| 373 .allow_rasterize_on_demand) { | 377 .allow_rasterize_on_demand) { |
| 374 ++on_demand_missing_tile_count; | 378 ++on_demand_missing_tile_count; |
| 375 break; | 379 break; |
| 376 } | 380 } |
| 377 | 381 |
| 378 gfx::RectF texture_rect = iter.texture_rect(); | 382 gfx::RectF texture_rect = iter.texture_rect(); |
| 379 | 383 |
| 380 ResourceProvider* resource_provider = | 384 ResourceProvider* resource_provider = |
| 381 layer_tree_impl()->resource_provider(); | 385 layer_tree_impl()->resource_provider(); |
| 382 ResourceFormat format = | 386 ResourceFormat format = |
| 383 resource_provider->memory_efficient_texture_format(); | 387 resource_provider->memory_efficient_texture_format(); |
| 384 PictureDrawQuad* quad = | 388 PictureDrawQuad* quad = |
| 385 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 389 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
| 386 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 390 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
| 387 visible_geometry_rect, texture_rect, iter.texture_size(), | 391 visible_geometry_rect, texture_rect, iter.texture_size(), |
| 388 format, iter->content_rect(), iter->contents_scale(), | 392 nearest_neighbor_, format, iter->content_rect(), |
| 389 raster_source_); | 393 iter->contents_scale(), raster_source_); |
| 390 has_draw_quad = true; | 394 has_draw_quad = true; |
| 391 break; | 395 break; |
| 392 } | 396 } |
| 393 case ManagedTileState::DrawInfo::SOLID_COLOR_MODE: { | 397 case ManagedTileState::DrawInfo::SOLID_COLOR_MODE: { |
| 394 SolidColorDrawQuad* quad = | 398 SolidColorDrawQuad* quad = |
| 395 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 399 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 396 quad->SetNew(shared_quad_state, | 400 quad->SetNew(shared_quad_state, |
| 397 geometry_rect, | 401 geometry_rect, |
| 398 visible_geometry_rect, | 402 visible_geometry_rect, |
| 399 draw_info.get_solid_color(), | 403 draw_info.get_solid_color(), |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 854 if (!draw_info.IsReadyToDraw() || | 858 if (!draw_info.IsReadyToDraw() || |
| 855 draw_info.mode() != ManagedTileState::DrawInfo::RESOURCE_MODE) { | 859 draw_info.mode() != ManagedTileState::DrawInfo::RESOURCE_MODE) { |
| 856 *resource_id = 0; | 860 *resource_id = 0; |
| 857 return; | 861 return; |
| 858 } | 862 } |
| 859 | 863 |
| 860 *resource_id = draw_info.get_resource_id(); | 864 *resource_id = draw_info.get_resource_id(); |
| 861 *resource_size = iter.texture_size(); | 865 *resource_size = iter.texture_size(); |
| 862 } | 866 } |
| 863 | 867 |
| 868 void PictureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) { | |
| 869 if (nearest_neighbor_ != nearest_neighbor) { | |
|
danakj
2014/12/09 19:44:45
if == return
jackhou1
2014/12/10 01:04:15
Done.
| |
| 870 nearest_neighbor_ = nearest_neighbor; | |
| 871 SetNeedsPushProperties(); | |
|
danakj
2014/12/09 19:44:45
NoteLayerPropertyChanged instead
jackhou1
2014/12/10 01:04:15
Done.
| |
| 872 } | |
| 873 } | |
| 874 | |
| 864 void PictureLayerImpl::DoPostCommitInitialization() { | 875 void PictureLayerImpl::DoPostCommitInitialization() { |
| 865 DCHECK(needs_post_commit_initialization_); | 876 DCHECK(needs_post_commit_initialization_); |
| 866 DCHECK(layer_tree_impl()->IsPendingTree()); | 877 DCHECK(layer_tree_impl()->IsPendingTree()); |
| 867 | 878 |
| 868 if (!tilings_) | 879 if (!tilings_) |
| 869 tilings_ = PictureLayerTilingSet::Create(this); | 880 tilings_ = PictureLayerTilingSet::Create(this); |
| 870 | 881 |
| 871 PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer(); | 882 PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer(); |
| 872 if (twin_layer) { | 883 if (twin_layer) { |
| 873 // If the twin has never been pushed to, do not sync from it. | 884 // If the twin has never been pushed to, do not sync from it. |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1481 IteratorType index = stages_[current_stage_].iterator_type; | 1492 IteratorType index = stages_[current_stage_].iterator_type; |
| 1482 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; | 1493 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; |
| 1483 | 1494 |
| 1484 if (iterators_[index] && iterators_[index].get_type() == tile_type) | 1495 if (iterators_[index] && iterators_[index].get_type() == tile_type) |
| 1485 break; | 1496 break; |
| 1486 ++current_stage_; | 1497 ++current_stage_; |
| 1487 } | 1498 } |
| 1488 } | 1499 } |
| 1489 | 1500 |
| 1490 } // namespace cc | 1501 } // namespace cc |
| OLD | NEW |