| 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 27 matching lines...) Expand all Loading... |
| 38 const float kSnapToExistingTilingRatio = 1.2f; | 38 const float kSnapToExistingTilingRatio = 1.2f; |
| 39 | 39 |
| 40 // Estimate skewport 60 frames ahead for pre-rasterization on the CPU. | 40 // Estimate skewport 60 frames ahead for pre-rasterization on the CPU. |
| 41 const float kCpuSkewportTargetTimeInFrames = 60.0f; | 41 const float kCpuSkewportTargetTimeInFrames = 60.0f; |
| 42 | 42 |
| 43 // Don't pre-rasterize on the GPU (except for kBackflingGuardDistancePixels in | 43 // Don't pre-rasterize on the GPU (except for kBackflingGuardDistancePixels in |
| 44 // TileManager::BinFromTilePriority). | 44 // TileManager::BinFromTilePriority). |
| 45 const float kGpuSkewportTargetTimeInFrames = 0.0f; | 45 const float kGpuSkewportTargetTimeInFrames = 0.0f; |
| 46 | 46 |
| 47 // Even for really wide viewports, at some point GPU raster should use | 47 // Even for really wide viewports, at some point GPU raster should use |
| 48 // less than 4 tiles to fill the viewport. This is set to 128 as a | 48 // less than 4 tiles to fill the viewport. This is set to 256 as a |
| 49 // sane minimum for now, but we might want to increase with tuning. | 49 // sane minimum for now, but we might want to tune this for low-end. |
| 50 const int kMinHeightForGpuRasteredTile = 128; | 50 const int kMinHeightForGpuRasteredTile = 256; |
| 51 | 51 |
| 52 // When making odd-sized tiles, round them up to increase the chances | 52 // When making odd-sized tiles, round them up to increase the chances |
| 53 // of using the same tile size. | 53 // of using the same tile size. |
| 54 const int kTileRoundUp = 64; | 54 const int kTileRoundUp = 64; |
| 55 | 55 |
| 56 } // namespace | 56 } // namespace |
| 57 | 57 |
| 58 namespace cc { | 58 namespace cc { |
| 59 | 59 |
| 60 PictureLayerImpl::Pair::Pair() : active(NULL), pending(NULL) { | 60 PictureLayerImpl::Pair::Pair() : active(NULL), pending(NULL) { |
| (...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 | 685 |
| 686 int default_tile_width = 0; | 686 int default_tile_width = 0; |
| 687 int default_tile_height = 0; | 687 int default_tile_height = 0; |
| 688 if (layer_tree_impl()->use_gpu_rasterization()) { | 688 if (layer_tree_impl()->use_gpu_rasterization()) { |
| 689 // For GPU rasterization, we pick an ideal tile size using the viewport | 689 // For GPU rasterization, we pick an ideal tile size using the viewport |
| 690 // so we don't need any settings. The current approach uses 4 tiles | 690 // so we don't need any settings. The current approach uses 4 tiles |
| 691 // to cover the viewport vertically. | 691 // to cover the viewport vertically. |
| 692 int viewport_width = layer_tree_impl()->device_viewport_size().width(); | 692 int viewport_width = layer_tree_impl()->device_viewport_size().width(); |
| 693 int viewport_height = layer_tree_impl()->device_viewport_size().height(); | 693 int viewport_height = layer_tree_impl()->device_viewport_size().height(); |
| 694 default_tile_width = viewport_width; | 694 default_tile_width = viewport_width; |
| 695 default_tile_height = viewport_height / 4; | 695 // Also, increase the height proportionally as the width decreases, and |
| 696 // pad by our border texels to make the tiles exactly match the viewport. |
| 697 int divisor = 4; |
| 698 if (content_bounds.width() <= viewport_width / 2) |
| 699 divisor = 2; |
| 700 if (content_bounds.width() <= viewport_width / 4) |
| 701 divisor = 1; |
| 702 default_tile_height = RoundUp(viewport_height, divisor) / divisor; |
| 703 default_tile_height += 2 * PictureLayerTiling::kBorderTexels; |
| 696 default_tile_height = | 704 default_tile_height = |
| 697 std::max(default_tile_height, kMinHeightForGpuRasteredTile); | 705 std::max(default_tile_height, kMinHeightForGpuRasteredTile); |
| 698 | |
| 699 // Increase the tile-height proportionally when the content width | |
| 700 // drops below half the viewport width. | |
| 701 if (content_bounds.width() <= viewport_width / 2) | |
| 702 default_tile_height *= 2; | |
| 703 } else { | 706 } else { |
| 704 // For CPU rasterization we use tile-size settings. | 707 // For CPU rasterization we use tile-size settings. |
| 705 const LayerTreeSettings& settings = layer_tree_impl()->settings(); | 708 const LayerTreeSettings& settings = layer_tree_impl()->settings(); |
| 706 int max_untiled_content_width = settings.max_untiled_layer_size.width(); | 709 int max_untiled_content_width = settings.max_untiled_layer_size.width(); |
| 707 int max_untiled_content_height = settings.max_untiled_layer_size.height(); | 710 int max_untiled_content_height = settings.max_untiled_layer_size.height(); |
| 708 default_tile_width = settings.default_tile_size.width(); | 711 default_tile_width = settings.default_tile_size.width(); |
| 709 default_tile_height = settings.default_tile_size.height(); | 712 default_tile_height = settings.default_tile_size.height(); |
| 710 | 713 |
| 711 // If the content width is small, increase tile size vertically. | 714 // If the content width is small, increase tile size vertically. |
| 712 // If the content height is small, increase tile size horizontally. | 715 // If the content height is small, increase tile size horizontally. |
| (...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1812 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); | 1815 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); |
| 1813 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; | 1816 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; |
| 1814 return tiling_range.end - 1 - current_tiling_range_offset; | 1817 return tiling_range.end - 1 - current_tiling_range_offset; |
| 1815 } | 1818 } |
| 1816 } | 1819 } |
| 1817 NOTREACHED(); | 1820 NOTREACHED(); |
| 1818 return 0; | 1821 return 0; |
| 1819 } | 1822 } |
| 1820 | 1823 |
| 1821 } // namespace cc | 1824 } // namespace cc |
| OLD | NEW |