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 |