| 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 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 } | 532 } |
| 533 | 533 |
| 534 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, | 534 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, |
| 535 const gfx::Rect& content_rect) { | 535 const gfx::Rect& content_rect) { |
| 536 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) | 536 if (!pile_->CanRaster(tiling->contents_scale(), content_rect)) |
| 537 return scoped_refptr<Tile>(); | 537 return scoped_refptr<Tile>(); |
| 538 | 538 |
| 539 int flags = 0; | 539 int flags = 0; |
| 540 if (is_using_lcd_text_) | 540 if (is_using_lcd_text_) |
| 541 flags |= Tile::USE_LCD_TEXT; | 541 flags |= Tile::USE_LCD_TEXT; |
| 542 if (use_gpu_rasterization()) | 542 if (layer_tree_impl()->use_gpu_rasterization()) |
| 543 flags |= Tile::USE_GPU_RASTERIZATION; | 543 flags |= Tile::USE_GPU_RASTERIZATION; |
| 544 return layer_tree_impl()->tile_manager()->CreateTile( | 544 return layer_tree_impl()->tile_manager()->CreateTile( |
| 545 pile_.get(), | 545 pile_.get(), |
| 546 content_rect.size(), | 546 content_rect.size(), |
| 547 content_rect, | 547 content_rect, |
| 548 contents_opaque() ? content_rect : gfx::Rect(), | 548 contents_opaque() ? content_rect : gfx::Rect(), |
| 549 tiling->contents_scale(), | 549 tiling->contents_scale(), |
| 550 id(), | 550 id(), |
| 551 layer_tree_impl()->source_frame_number(), | 551 layer_tree_impl()->source_frame_number(), |
| 552 flags); | 552 flags); |
| 553 } | 553 } |
| 554 | 554 |
| 555 void PictureLayerImpl::UpdatePile(Tile* tile) { | 555 void PictureLayerImpl::UpdatePile(Tile* tile) { |
| 556 tile->set_picture_pile(pile_); | 556 tile->set_picture_pile(pile_); |
| 557 } | 557 } |
| 558 | 558 |
| 559 const Region* PictureLayerImpl::GetInvalidation() { | 559 const Region* PictureLayerImpl::GetInvalidation() { |
| 560 return &invalidation_; | 560 return &invalidation_; |
| 561 } | 561 } |
| 562 | 562 |
| 563 const PictureLayerTiling* PictureLayerImpl::GetTwinTiling( | 563 const PictureLayerTiling* PictureLayerImpl::GetTwinTiling( |
| 564 const PictureLayerTiling* tiling) const { | 564 const PictureLayerTiling* tiling) const { |
| 565 if (!twin_layer_ || | 565 if (!twin_layer_) |
| 566 twin_layer_->use_gpu_rasterization() != use_gpu_rasterization()) | |
| 567 return NULL; | 566 return NULL; |
| 568 for (size_t i = 0; i < twin_layer_->tilings_->num_tilings(); ++i) | 567 for (size_t i = 0; i < twin_layer_->tilings_->num_tilings(); ++i) |
| 569 if (twin_layer_->tilings_->tiling_at(i)->contents_scale() == | 568 if (twin_layer_->tilings_->tiling_at(i)->contents_scale() == |
| 570 tiling->contents_scale()) | 569 tiling->contents_scale()) |
| 571 return twin_layer_->tilings_->tiling_at(i); | 570 return twin_layer_->tilings_->tiling_at(i); |
| 572 return NULL; | 571 return NULL; |
| 573 } | 572 } |
| 574 | 573 |
| 575 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { | 574 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { |
| 576 return layer_tree_impl()->settings().max_tiles_for_interest_area; | 575 return layer_tree_impl()->settings().max_tiles_for_interest_area; |
| 577 } | 576 } |
| 578 | 577 |
| 579 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { | 578 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { |
| 580 float skewport_target_time_in_frames = use_gpu_rasterization() | 579 float skewport_target_time_in_frames = |
| 581 ? kGpuSkewportTargetTimeInFrames | 580 layer_tree_impl()->use_gpu_rasterization() |
| 582 : kCpuSkewportTargetTimeInFrames; | 581 ? kGpuSkewportTargetTimeInFrames |
| 582 : kCpuSkewportTargetTimeInFrames; |
| 583 return skewport_target_time_in_frames * | 583 return skewport_target_time_in_frames * |
| 584 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * | 584 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * |
| 585 layer_tree_impl()->settings().skewport_target_time_multiplier; | 585 layer_tree_impl()->settings().skewport_target_time_multiplier; |
| 586 } | 586 } |
| 587 | 587 |
| 588 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { | 588 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { |
| 589 return layer_tree_impl() | 589 return layer_tree_impl() |
| 590 ->settings() | 590 ->settings() |
| 591 .skewport_extrapolation_limit_in_content_pixels; | 591 .skewport_extrapolation_limit_in_content_pixels; |
| 592 } | 592 } |
| 593 | 593 |
| 594 gfx::Size PictureLayerImpl::CalculateTileSize( | 594 gfx::Size PictureLayerImpl::CalculateTileSize( |
| 595 const gfx::Size& content_bounds) const { | 595 const gfx::Size& content_bounds) const { |
| 596 if (is_mask_) { | 596 if (is_mask_) { |
| 597 int max_size = layer_tree_impl()->MaxTextureSize(); | 597 int max_size = layer_tree_impl()->MaxTextureSize(); |
| 598 return gfx::Size( | 598 return gfx::Size( |
| 599 std::min(max_size, content_bounds.width()), | 599 std::min(max_size, content_bounds.width()), |
| 600 std::min(max_size, content_bounds.height())); | 600 std::min(max_size, content_bounds.height())); |
| 601 } | 601 } |
| 602 | 602 |
| 603 int max_texture_size = | 603 int max_texture_size = |
| 604 layer_tree_impl()->resource_provider()->max_texture_size(); | 604 layer_tree_impl()->resource_provider()->max_texture_size(); |
| 605 | 605 |
| 606 gfx::Size default_tile_size = layer_tree_impl()->settings().default_tile_size; | 606 gfx::Size default_tile_size = layer_tree_impl()->settings().default_tile_size; |
| 607 if (use_gpu_rasterization()) { | 607 if (layer_tree_impl()->use_gpu_rasterization()) { |
| 608 // TODO(ernstm) crbug.com/365877: We need a unified way to override the | 608 // TODO(ernstm) crbug.com/365877: We need a unified way to override the |
| 609 // default-tile-size. | 609 // default-tile-size. |
| 610 default_tile_size = | 610 default_tile_size = |
| 611 gfx::Size(layer_tree_impl()->device_viewport_size().width(), | 611 gfx::Size(layer_tree_impl()->device_viewport_size().width(), |
| 612 layer_tree_impl()->device_viewport_size().height() / 4); | 612 layer_tree_impl()->device_viewport_size().height() / 4); |
| 613 } | 613 } |
| 614 default_tile_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); | 614 default_tile_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); |
| 615 | 615 |
| 616 gfx::Size max_untiled_content_size = | 616 gfx::Size max_untiled_content_size = |
| 617 layer_tree_impl()->settings().max_untiled_layer_size; | 617 layer_tree_impl()->settings().max_untiled_layer_size; |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 } | 924 } |
| 925 | 925 |
| 926 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { | 926 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { |
| 927 DCHECK(CanHaveTilingWithScale(contents_scale)) << | 927 DCHECK(CanHaveTilingWithScale(contents_scale)) << |
| 928 "contents_scale: " << contents_scale; | 928 "contents_scale: " << contents_scale; |
| 929 | 929 |
| 930 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale); | 930 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale); |
| 931 | 931 |
| 932 DCHECK(pile_->HasRecordings()); | 932 DCHECK(pile_->HasRecordings()); |
| 933 | 933 |
| 934 if (twin_layer_ && | 934 if (twin_layer_) |
| 935 twin_layer_->use_gpu_rasterization() == use_gpu_rasterization()) | |
| 936 twin_layer_->SyncTiling(tiling); | 935 twin_layer_->SyncTiling(tiling); |
| 937 | 936 |
| 938 return tiling; | 937 return tiling; |
| 939 } | 938 } |
| 940 | 939 |
| 941 void PictureLayerImpl::RemoveTiling(float contents_scale) { | 940 void PictureLayerImpl::RemoveTiling(float contents_scale) { |
| 942 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 941 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
| 943 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 942 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
| 944 if (tiling->contents_scale() == contents_scale) { | 943 if (tiling->contents_scale() == contents_scale) { |
| 945 tilings_->Remove(tiling); | 944 tilings_->Remove(tiling); |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1329 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); | 1328 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); |
| 1330 tile_data->Set("geometry_rect", | 1329 tile_data->Set("geometry_rect", |
| 1331 MathUtil::AsValue(iter.geometry_rect()).release()); | 1330 MathUtil::AsValue(iter.geometry_rect()).release()); |
| 1332 if (*iter) | 1331 if (*iter) |
| 1333 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); | 1332 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); |
| 1334 | 1333 |
| 1335 coverage_tiles->Append(tile_data.release()); | 1334 coverage_tiles->Append(tile_data.release()); |
| 1336 } | 1335 } |
| 1337 state->Set("coverage_tiles", coverage_tiles.release()); | 1336 state->Set("coverage_tiles", coverage_tiles.release()); |
| 1338 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_); | 1337 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_); |
| 1339 state->SetBoolean("using_gpu_rasterization", use_gpu_rasterization()); | |
| 1340 } | 1338 } |
| 1341 | 1339 |
| 1342 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { | 1340 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { |
| 1343 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); | 1341 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); |
| 1344 return tilings_->GPUMemoryUsageInBytes(); | 1342 return tilings_->GPUMemoryUsageInBytes(); |
| 1345 } | 1343 } |
| 1346 | 1344 |
| 1347 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { | 1345 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { |
| 1348 benchmark->RunOnLayer(this); | 1346 benchmark->RunOnLayer(this); |
| 1349 } | 1347 } |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1572 return iterator_index_ < iterators_.size(); | 1570 return iterator_index_ < iterators_.size(); |
| 1573 } | 1571 } |
| 1574 | 1572 |
| 1575 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( | 1573 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( |
| 1576 PictureLayerTiling::TilingEvictionTileIterator* it) const { | 1574 PictureLayerTiling::TilingEvictionTileIterator* it) const { |
| 1577 return it->get_type() == iteration_stage_ && | 1575 return it->get_type() == iteration_stage_ && |
| 1578 (**it)->required_for_activation() == required_for_activation_; | 1576 (**it)->required_for_activation() == required_for_activation_; |
| 1579 } | 1577 } |
| 1580 | 1578 |
| 1581 } // namespace cc | 1579 } // namespace cc |
| OLD | NEW |