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 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 namespace { | 33 namespace { |
34 // This must be > 1 as we multiply or divide by this to find a new raster | 34 // This must be > 1 as we multiply or divide by this to find a new raster |
35 // scale during pinch. | 35 // scale during pinch. |
36 const float kMaxScaleRatioDuringPinch = 2.0f; | 36 const float kMaxScaleRatioDuringPinch = 2.0f; |
37 | 37 |
38 // When creating a new tiling during pinch, snap to an existing | 38 // When creating a new tiling during pinch, snap to an existing |
39 // tiling's scale if the desired scale is within this ratio. | 39 // tiling's scale if the desired scale is within this ratio. |
40 const float kSnapToExistingTilingRatio = 1.2f; | 40 const float kSnapToExistingTilingRatio = 1.2f; |
41 | 41 |
42 // Estimate skewport 60 frames ahead for pre-rasterization on the CPU. | |
43 const float kCpuSkewportTargetTimeInFrames = 60.0f; | |
44 | |
45 // Don't pre-rasterize on the GPU (except for kBackflingGuardDistancePixels in | |
46 // TileManager::BinFromTilePriority). | |
47 const float kGpuSkewportTargetTimeInFrames = 0.0f; | |
48 | |
49 // Even for really wide viewports, at some point GPU raster should use | 42 // Even for really wide viewports, at some point GPU raster should use |
50 // less than 4 tiles to fill the viewport. This is set to 256 as a | 43 // less than 4 tiles to fill the viewport. This is set to 256 as a |
51 // sane minimum for now, but we might want to tune this for low-end. | 44 // sane minimum for now, but we might want to tune this for low-end. |
52 const int kMinHeightForGpuRasteredTile = 256; | 45 const int kMinHeightForGpuRasteredTile = 256; |
53 | 46 |
54 // When making odd-sized tiles, round them up to increase the chances | 47 // When making odd-sized tiles, round them up to increase the chances |
55 // of using the same tile size. | 48 // of using the same tile size. |
56 const int kTileRoundUp = 64; | 49 const int kTileRoundUp = 64; |
57 | 50 |
58 } // namespace | 51 } // namespace |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 } | 616 } |
624 | 617 |
625 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, | 618 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, |
626 const gfx::Rect& content_rect) { | 619 const gfx::Rect& content_rect) { |
627 DCHECK(!raster_source_->IsSolidColor()); | 620 DCHECK(!raster_source_->IsSolidColor()); |
628 if (!raster_source_->CoversRect(content_rect, tiling->contents_scale())) | 621 if (!raster_source_->CoversRect(content_rect, tiling->contents_scale())) |
629 return scoped_refptr<Tile>(); | 622 return scoped_refptr<Tile>(); |
630 | 623 |
631 int flags = 0; | 624 int flags = 0; |
632 | 625 |
633 // TODO(vmpstr): Revisit this. For now, enabling analysis means that we get as | 626 // We don't handle solid color masks, so we shouldn't bother analyzing those. |
634 // much savings on memory as we can. However, for some cases like ganesh or | 627 // Otherwise, always analyze to maximize memory savings. |
635 // small layers, the amount of time we spend analyzing might not justify | |
636 // memory savings that we can get. Note that we don't handle solid color | |
637 // masks, so we shouldn't bother analyzing those. | |
638 // Bugs: crbug.com/397198, crbug.com/396908 | |
639 if (!is_mask_) | 628 if (!is_mask_) |
640 flags = Tile::USE_PICTURE_ANALYSIS; | 629 flags = Tile::USE_PICTURE_ANALYSIS; |
641 | 630 |
642 return layer_tree_impl()->tile_manager()->CreateTile( | 631 return layer_tree_impl()->tile_manager()->CreateTile( |
643 raster_source_.get(), content_rect.size(), content_rect, | 632 raster_source_.get(), content_rect.size(), content_rect, |
644 tiling->contents_scale(), id(), layer_tree_impl()->source_frame_number(), | 633 tiling->contents_scale(), id(), layer_tree_impl()->source_frame_number(), |
645 flags); | 634 flags); |
646 } | 635 } |
647 | 636 |
648 const Region* PictureLayerImpl::GetPendingInvalidation() { | 637 const Region* PictureLayerImpl::GetPendingInvalidation() { |
(...skipping 28 matching lines...) Expand all Loading... |
677 if (!HasValidTilePriorities()) | 666 if (!HasValidTilePriorities()) |
678 return TilePriority::EVENTUALLY; | 667 return TilePriority::EVENTUALLY; |
679 return TilePriority::NOW; | 668 return TilePriority::NOW; |
680 } | 669 } |
681 | 670 |
682 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { | 671 size_t PictureLayerImpl::GetMaxTilesForInterestArea() const { |
683 return layer_tree_impl()->settings().max_tiles_for_interest_area; | 672 return layer_tree_impl()->settings().max_tiles_for_interest_area; |
684 } | 673 } |
685 | 674 |
686 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { | 675 float PictureLayerImpl::GetSkewportTargetTimeInSeconds() const { |
687 float skewport_target_time_in_frames = | 676 return layer_tree_impl()->use_gpu_rasterization() |
688 layer_tree_impl()->use_gpu_rasterization() | 677 ? 0.f |
689 ? kGpuSkewportTargetTimeInFrames | 678 : layer_tree_impl()->settings().skewport_target_time_in_seconds; |
690 : kCpuSkewportTargetTimeInFrames; | |
691 return skewport_target_time_in_frames * | |
692 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * | |
693 layer_tree_impl()->settings().skewport_target_time_multiplier; | |
694 } | 679 } |
695 | 680 |
696 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { | 681 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { |
697 return layer_tree_impl() | 682 return layer_tree_impl() |
698 ->settings() | 683 ->settings() |
699 .skewport_extrapolation_limit_in_content_pixels; | 684 .skewport_extrapolation_limit_in_content_pixels; |
700 } | 685 } |
701 | 686 |
702 bool PictureLayerImpl::RequiresHighResToDraw() const { | 687 bool PictureLayerImpl::RequiresHighResToDraw() const { |
703 return layer_tree_impl()->RequiresHighResToDraw(); | 688 return layer_tree_impl()->RequiresHighResToDraw(); |
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1370 | 1355 |
1371 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { | 1356 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { |
1372 if (!layer_tree_impl()->IsActiveTree()) | 1357 if (!layer_tree_impl()->IsActiveTree()) |
1373 return true; | 1358 return true; |
1374 | 1359 |
1375 return AllTilesRequiredAreReadyToDraw( | 1360 return AllTilesRequiredAreReadyToDraw( |
1376 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); | 1361 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); |
1377 } | 1362 } |
1378 | 1363 |
1379 } // namespace cc | 1364 } // namespace cc |
OLD | NEW |