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 | 9 |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 ideal_contents_scale_(0.f), | 47 ideal_contents_scale_(0.f), |
48 raster_page_scale_(0.f), | 48 raster_page_scale_(0.f), |
49 raster_device_scale_(0.f), | 49 raster_device_scale_(0.f), |
50 raster_source_scale_(0.f), | 50 raster_source_scale_(0.f), |
51 raster_contents_scale_(0.f), | 51 raster_contents_scale_(0.f), |
52 low_res_raster_contents_scale_(0.f), | 52 low_res_raster_contents_scale_(0.f), |
53 raster_source_scale_was_animating_(false), | 53 raster_source_scale_was_animating_(false), |
54 is_using_lcd_text_(tree_impl->settings().can_use_lcd_text), | 54 is_using_lcd_text_(tree_impl->settings().can_use_lcd_text), |
55 needs_post_commit_initialization_(true), | 55 needs_post_commit_initialization_(true), |
56 should_update_tile_priorities_(false), | 56 should_update_tile_priorities_(false), |
57 has_gpu_rasterization_hint_(false), | |
58 should_use_low_res_tiling_(tree_impl->settings().create_low_res_tiling), | 57 should_use_low_res_tiling_(tree_impl->settings().create_low_res_tiling), |
| 58 use_gpu_rasterization_(false), |
59 layer_needs_to_register_itself_(true) {} | 59 layer_needs_to_register_itself_(true) {} |
60 | 60 |
61 PictureLayerImpl::~PictureLayerImpl() { | 61 PictureLayerImpl::~PictureLayerImpl() { |
62 if (!layer_needs_to_register_itself_) | 62 if (!layer_needs_to_register_itself_) |
63 layer_tree_impl()->tile_manager()->UnregisterPictureLayerImpl(this); | 63 layer_tree_impl()->tile_manager()->UnregisterPictureLayerImpl(this); |
64 } | 64 } |
65 | 65 |
66 const char* PictureLayerImpl::LayerTypeAsString() const { | 66 const char* PictureLayerImpl::LayerTypeAsString() const { |
67 return "cc::PictureLayerImpl"; | 67 return "cc::PictureLayerImpl"; |
68 } | 68 } |
(...skipping 20 matching lines...) Expand all Loading... |
89 | 89 |
90 LayerImpl::PushPropertiesTo(base_layer); | 90 LayerImpl::PushPropertiesTo(base_layer); |
91 | 91 |
92 // When the pending tree pushes to the active tree, the pending twin | 92 // When the pending tree pushes to the active tree, the pending twin |
93 // disappears. | 93 // disappears. |
94 layer_impl->twin_layer_ = NULL; | 94 layer_impl->twin_layer_ = NULL; |
95 twin_layer_ = NULL; | 95 twin_layer_ = NULL; |
96 | 96 |
97 layer_impl->SetIsMask(is_mask_); | 97 layer_impl->SetIsMask(is_mask_); |
98 layer_impl->pile_ = pile_; | 98 layer_impl->pile_ = pile_; |
99 layer_impl->SetHasGpuRasterizationHint(has_gpu_rasterization_hint_); | 99 layer_impl->use_gpu_rasterization_ = use_gpu_rasterization_; |
100 | 100 |
101 // Tilings would be expensive to push, so we swap. This optimization requires | 101 // Tilings would be expensive to push, so we swap. This optimization requires |
102 // an extra invalidation in SyncFromActiveLayer. | 102 // an extra invalidation in SyncFromActiveLayer. |
103 layer_impl->tilings_.swap(tilings_); | 103 layer_impl->tilings_.swap(tilings_); |
104 layer_impl->tilings_->SetClient(layer_impl); | 104 layer_impl->tilings_->SetClient(layer_impl); |
105 if (tilings_) | 105 if (tilings_) |
106 tilings_->SetClient(this); | 106 tilings_->SetClient(this); |
107 | 107 |
108 layer_impl->raster_page_scale_ = raster_page_scale_; | 108 layer_impl->raster_page_scale_ = raster_page_scale_; |
109 layer_impl->raster_device_scale_ = raster_device_scale_; | 109 layer_impl->raster_device_scale_ = raster_device_scale_; |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 *contents_scale_x = max_contents_scale; | 472 *contents_scale_x = max_contents_scale; |
473 *contents_scale_y = max_contents_scale; | 473 *contents_scale_y = max_contents_scale; |
474 *content_bounds = gfx::ToCeiledSize( | 474 *content_bounds = gfx::ToCeiledSize( |
475 gfx::ScaleSize(bounds(), max_contents_scale, max_contents_scale)); | 475 gfx::ScaleSize(bounds(), max_contents_scale, max_contents_scale)); |
476 } | 476 } |
477 | 477 |
478 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() { | 478 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() { |
479 return pile_->GetFlattenedPicture(); | 479 return pile_->GetFlattenedPicture(); |
480 } | 480 } |
481 | 481 |
482 void PictureLayerImpl::SetHasGpuRasterizationHint(bool has_hint) { | 482 void PictureLayerImpl::SetUseGpuRasterization(bool use_gpu) { |
483 bool old_should_use_gpu_rasterization = ShouldUseGpuRasterization(); | 483 if (use_gpu_rasterization_ == use_gpu) |
484 has_gpu_rasterization_hint_ = has_hint; | 484 return; |
485 if (ShouldUseGpuRasterization() != old_should_use_gpu_rasterization) | |
486 RemoveAllTilings(); | |
487 } | |
488 | 485 |
489 bool PictureLayerImpl::ShouldUseGpuRasterization() const { | 486 use_gpu_rasterization_ = use_gpu; |
490 switch (layer_tree_impl()->settings().rasterization_site) { | 487 RemoveAllTilings(); |
491 case LayerTreeSettings::CpuRasterization: | |
492 return false; | |
493 case LayerTreeSettings::HybridRasterization: | |
494 return has_gpu_rasterization_hint_; | |
495 case LayerTreeSettings::GpuRasterization: | |
496 return true; | |
497 } | |
498 NOTREACHED(); | |
499 return false; | |
500 } | 488 } |
501 | 489 |
502 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, | 490 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, |
503 const gfx::Rect& content_rect) { | 491 const gfx::Rect& content_rect) { |
504 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) | 492 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) |
505 return scoped_refptr<Tile>(); | 493 return scoped_refptr<Tile>(); |
506 | 494 |
507 int flags = 0; | 495 int flags = 0; |
508 if (is_using_lcd_text_) | 496 if (is_using_lcd_text_) |
509 flags |= Tile::USE_LCD_TEXT; | 497 flags |= Tile::USE_LCD_TEXT; |
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 DCHECK(*this); | 1357 DCHECK(*this); |
1370 | 1358 |
1371 IteratorType index = stages_[current_stage_].iterator_type; | 1359 IteratorType index = stages_[current_stage_].iterator_type; |
1372 DCHECK(iterators_[index]); | 1360 DCHECK(iterators_[index]); |
1373 DCHECK(iterators_[index].get_type() == stages_[current_stage_].tile_type); | 1361 DCHECK(iterators_[index].get_type() == stages_[current_stage_].tile_type); |
1374 | 1362 |
1375 return *iterators_[index]; | 1363 return *iterators_[index]; |
1376 } | 1364 } |
1377 | 1365 |
1378 } // namespace cc | 1366 } // namespace cc |
OLD | NEW |