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 | 9 |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 535 } | 535 } |
| 536 | 536 |
| 537 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, | 537 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, |
| 538 const gfx::Rect& content_rect) { | 538 const gfx::Rect& content_rect) { |
| 539 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) | 539 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) |
| 540 return scoped_refptr<Tile>(); | 540 return scoped_refptr<Tile>(); |
| 541 | 541 |
| 542 int flags = 0; | 542 int flags = 0; |
| 543 if (is_using_lcd_text_) | 543 if (is_using_lcd_text_) |
| 544 flags |= Tile::USE_LCD_TEXT; | 544 flags |= Tile::USE_LCD_TEXT; |
| 545 if (use_gpu_rasterization()) | 545 if (layer_tree_impl()->use_gpu_rasterization()) |
| 546 flags |= Tile::USE_GPU_RASTERIZATION; | 546 flags |= Tile::USE_GPU_RASTERIZATION; |
| 547 return layer_tree_impl()->tile_manager()->CreateTile( | 547 return layer_tree_impl()->tile_manager()->CreateTile( |
| 548 pile_.get(), | 548 pile_.get(), |
| 549 content_rect.size(), | 549 content_rect.size(), |
| 550 content_rect, | 550 content_rect, |
| 551 contents_opaque() ? content_rect : gfx::Rect(), | 551 contents_opaque() ? content_rect : gfx::Rect(), |
| 552 tiling->contents_scale(), | 552 tiling->contents_scale(), |
| 553 id(), | 553 id(), |
| 554 layer_tree_impl()->source_frame_number(), | 554 layer_tree_impl()->source_frame_number(), |
| 555 flags); | 555 flags); |
| 556 } | 556 } |
| 557 | 557 |
| 558 void PictureLayerImpl::UpdatePile(Tile* tile) { | 558 void PictureLayerImpl::UpdatePile(Tile* tile) { |
| 559 tile->set_picture_pile(pile_); | 559 tile->set_picture_pile(pile_); |
| 560 } | 560 } |
| 561 | 561 |
| 562 const Region* PictureLayerImpl::GetInvalidation() { | 562 const Region* PictureLayerImpl::GetInvalidation() { |
| 563 return &invalidation_; | 563 return &invalidation_; |
| 564 } | 564 } |
| 565 | 565 |
| 566 const PictureLayerTiling* PictureLayerImpl::GetTwinTiling( | 566 const PictureLayerTiling* PictureLayerImpl::GetTwinTiling( |
| 567 const PictureLayerTiling* tiling) const { | 567 const PictureLayerTiling* tiling) const { |
| 568 if (!twin_layer_ || | 568 if (!twin_layer_) |
| 569 twin_layer_->use_gpu_rasterization() != use_gpu_rasterization()) | |
| 570 return NULL; | 569 return NULL; |
| 571 for (size_t i = 0; i < twin_layer_->tilings_->num_tilings(); ++i) | 570 for (size_t i = 0; i < twin_layer_->tilings_->num_tilings(); ++i) |
| 572 if (twin_layer_->tilings_->tiling_at(i)->contents_scale() == | 571 if (twin_layer_->tilings_->tiling_at(i)->contents_scale() == |
| 573 tiling->contents_scale()) | 572 tiling->contents_scale()) |
| 574 return twin_layer_->tilings_->tiling_at(i); | 573 return twin_layer_->tilings_->tiling_at(i); |
| 575 return NULL; | 574 return NULL; |
| 576 } | 575 } |
| 577 | 576 |
| 578 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { | 577 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { |
| 579 return layer_tree_impl()->settings().max_tiles_for_interest_area; | 578 return layer_tree_impl()->settings().max_tiles_for_interest_area; |
| 580 } | 579 } |
| 581 | 580 |
| 582 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { | 581 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { |
| 583 float skewport_target_time_in_frames = use_gpu_rasterization() | 582 float skewport_target_time_in_frames = |
| 584 ? kGpuSkewportTargetTimeInFrames | 583 layer_tree_impl()->use_gpu_rasterization() |
| 585 : kCpuSkewportTargetTimeInFrames; | 584 ? kGpuSkewportTargetTimeInFrames |
| 585 : kCpuSkewportTargetTimeInFrames; | |
| 586 return skewport_target_time_in_frames * | 586 return skewport_target_time_in_frames * |
| 587 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * | 587 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * |
| 588 layer_tree_impl()->settings().skewport_target_time_multiplier; | 588 layer_tree_impl()->settings().skewport_target_time_multiplier; |
| 589 } | 589 } |
| 590 | 590 |
| 591 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { | 591 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { |
| 592 return layer_tree_impl() | 592 return layer_tree_impl() |
| 593 ->settings() | 593 ->settings() |
| 594 .skewport_extrapolation_limit_in_content_pixels; | 594 .skewport_extrapolation_limit_in_content_pixels; |
| 595 } | 595 } |
| 596 | 596 |
| 597 gfx::Size PictureLayerImpl::CalculateTileSize( | 597 gfx::Size PictureLayerImpl::CalculateTileSize( |
| 598 const gfx::Size& content_bounds) const { | 598 const gfx::Size& content_bounds) const { |
| 599 if (is_mask_) { | 599 if (is_mask_) { |
| 600 int max_size = layer_tree_impl()->MaxTextureSize(); | 600 int max_size = layer_tree_impl()->MaxTextureSize(); |
| 601 return gfx::Size( | 601 return gfx::Size( |
| 602 std::min(max_size, content_bounds.width()), | 602 std::min(max_size, content_bounds.width()), |
| 603 std::min(max_size, content_bounds.height())); | 603 std::min(max_size, content_bounds.height())); |
| 604 } | 604 } |
| 605 | 605 |
| 606 int max_texture_size = | 606 int max_texture_size = |
| 607 layer_tree_impl()->resource_provider()->max_texture_size(); | 607 layer_tree_impl()->resource_provider()->max_texture_size(); |
| 608 | 608 |
| 609 gfx::Size default_tile_size = layer_tree_impl()->settings().default_tile_size; | 609 gfx::Size default_tile_size = layer_tree_impl()->settings().default_tile_size; |
| 610 if (use_gpu_rasterization()) { | 610 if (layer_tree_impl()->use_gpu_rasterization()) { |
| 611 // TODO(ernstm) crbug.com/365877: We need a unified way to override the | 611 // TODO(ernstm) crbug.com/365877: We need a unified way to override the |
| 612 // default-tile-size. | 612 // default-tile-size. |
| 613 default_tile_size = | 613 default_tile_size = |
| 614 gfx::Size(layer_tree_impl()->device_viewport_size().width(), | 614 gfx::Size(layer_tree_impl()->device_viewport_size().width(), |
| 615 layer_tree_impl()->device_viewport_size().height() / 4); | 615 layer_tree_impl()->device_viewport_size().height() / 4); |
| 616 } | 616 } |
| 617 default_tile_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); | 617 default_tile_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); |
| 618 | 618 |
| 619 gfx::Size max_untiled_content_size = | 619 gfx::Size max_untiled_content_size = |
| 620 layer_tree_impl()->settings().max_untiled_layer_size; | 620 layer_tree_impl()->settings().max_untiled_layer_size; |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 915 } | 915 } |
| 916 | 916 |
| 917 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { | 917 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { |
| 918 DCHECK(CanHaveTilingWithScale(contents_scale)) << | 918 DCHECK(CanHaveTilingWithScale(contents_scale)) << |
| 919 "contents_scale: " << contents_scale; | 919 "contents_scale: " << contents_scale; |
| 920 | 920 |
| 921 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale); | 921 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale); |
| 922 | 922 |
| 923 DCHECK(pile_->HasRecordings()); | 923 DCHECK(pile_->HasRecordings()); |
| 924 | 924 |
| 925 if (twin_layer_ && | 925 if (twin_layer_) |
| 926 twin_layer_->use_gpu_rasterization() == use_gpu_rasterization()) | |
| 927 twin_layer_->SyncTiling(tiling); | 926 twin_layer_->SyncTiling(tiling); |
| 928 | 927 |
| 929 return tiling; | 928 return tiling; |
| 930 } | 929 } |
| 931 | 930 |
| 932 void PictureLayerImpl::RemoveTiling(float contents_scale) { | 931 void PictureLayerImpl::RemoveTiling(float contents_scale) { |
| 933 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 932 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
| 934 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 933 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
| 935 if (tiling->contents_scale() == contents_scale) { | 934 if (tiling->contents_scale() == contents_scale) { |
| 936 tilings_->Remove(tiling); | 935 tilings_->Remove(tiling); |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1320 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); | 1319 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); |
| 1321 tile_data->Set("geometry_rect", | 1320 tile_data->Set("geometry_rect", |
| 1322 MathUtil::AsValue(iter.geometry_rect()).release()); | 1321 MathUtil::AsValue(iter.geometry_rect()).release()); |
| 1323 if (*iter) | 1322 if (*iter) |
| 1324 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); | 1323 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); |
| 1325 | 1324 |
| 1326 coverage_tiles->Append(tile_data.release()); | 1325 coverage_tiles->Append(tile_data.release()); |
| 1327 } | 1326 } |
| 1328 state->Set("coverage_tiles", coverage_tiles.release()); | 1327 state->Set("coverage_tiles", coverage_tiles.release()); |
| 1329 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_); | 1328 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_); |
| 1330 state->SetBoolean("using_gpu_rasterization", use_gpu_rasterization()); | |
|
alokp
2014/05/16 20:08:28
nduca: would removing this require any changes to
| |
| 1331 } | 1329 } |
| 1332 | 1330 |
| 1333 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { | 1331 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { |
| 1334 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); | 1332 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); |
| 1335 return tilings_->GPUMemoryUsageInBytes(); | 1333 return tilings_->GPUMemoryUsageInBytes(); |
| 1336 } | 1334 } |
| 1337 | 1335 |
| 1338 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { | 1336 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { |
| 1339 benchmark->RunOnLayer(this); | 1337 benchmark->RunOnLayer(this); |
| 1340 } | 1338 } |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1563 return iterator_index_ < iterators_.size(); | 1561 return iterator_index_ < iterators_.size(); |
| 1564 } | 1562 } |
| 1565 | 1563 |
| 1566 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( | 1564 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( |
| 1567 PictureLayerTiling::TilingEvictionTileIterator* it) const { | 1565 PictureLayerTiling::TilingEvictionTileIterator* it) const { |
| 1568 return it->get_type() == iteration_stage_ && | 1566 return it->get_type() == iteration_stage_ && |
| 1569 (**it)->required_for_activation() == required_for_activation_; | 1567 (**it)->required_for_activation() == required_for_activation_; |
| 1570 } | 1568 } |
| 1571 | 1569 |
| 1572 } // namespace cc | 1570 } // namespace cc |
| OLD | NEW |