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 |