OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include <utility> | 10 #include <utility> |
(...skipping 1965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1976 tilings.begin(); | 1976 tilings.begin(); |
1977 tiling_iterator != tilings.end(); | 1977 tiling_iterator != tilings.end(); |
1978 ++tiling_iterator) { | 1978 ++tiling_iterator) { |
1979 std::vector<Tile*> tiles = (*tiling_iterator)->AllTilesForTesting(); | 1979 std::vector<Tile*> tiles = (*tiling_iterator)->AllTilesForTesting(); |
1980 std::copy(tiles.begin(), tiles.end(), std::back_inserter(all_tiles)); | 1980 std::copy(tiles.begin(), tiles.end(), std::back_inserter(all_tiles)); |
1981 } | 1981 } |
1982 | 1982 |
1983 std::set<Tile*> all_tiles_set(all_tiles.begin(), all_tiles.end()); | 1983 std::set<Tile*> all_tiles_set(all_tiles.begin(), all_tiles.end()); |
1984 | 1984 |
1985 bool mark_required = false; | 1985 bool mark_required = false; |
1986 for (std::vector<Tile*>::iterator it = all_tiles.begin(); | 1986 size_t number_of_marked_tiles = 0u; |
1987 it != all_tiles.end(); | 1987 size_t number_of_unmarked_tiles = 0u; |
1988 ++it) { | 1988 for (size_t i = 0; i < tilings.size(); ++i) { |
1989 Tile* tile = *it; | 1989 PictureLayerTiling* tiling = tilings.at(i); |
1990 if (mark_required) | 1990 for (PictureLayerTiling::CoverageIterator iter( |
1991 tile->MarkRequiredForActivation(); | 1991 tiling, |
1992 mark_required = !mark_required; | 1992 pending_layer_->contents_scale_x(), |
| 1993 pending_layer_->visible_content_rect()); |
| 1994 iter; |
| 1995 ++iter) { |
| 1996 if (mark_required) { |
| 1997 number_of_marked_tiles++; |
| 1998 iter->MarkRequiredForActivation(); |
| 1999 } else { |
| 2000 number_of_unmarked_tiles++; |
| 2001 } |
| 2002 mark_required = !mark_required; |
| 2003 } |
1993 } | 2004 } |
1994 | 2005 |
1995 // Sanity checks. | 2006 // Sanity checks. |
1996 EXPECT_EQ(91u, all_tiles.size()); | 2007 EXPECT_EQ(91u, all_tiles.size()); |
1997 EXPECT_EQ(91u, all_tiles_set.size()); | 2008 EXPECT_EQ(91u, all_tiles_set.size()); |
| 2009 EXPECT_GT(number_of_marked_tiles, 1u); |
| 2010 EXPECT_GT(number_of_unmarked_tiles, 1u); |
1998 | 2011 |
1999 // Empty iterator. | 2012 // Empty iterator. |
2000 PictureLayerImpl::LayerEvictionTileIterator it; | 2013 PictureLayerImpl::LayerEvictionTileIterator it; |
2001 EXPECT_FALSE(it); | 2014 EXPECT_FALSE(it); |
2002 | 2015 |
2003 // Tiles don't have resources yet. | 2016 // Tiles don't have resources yet. |
2004 it = PictureLayerImpl::LayerEvictionTileIterator( | 2017 it = PictureLayerImpl::LayerEvictionTileIterator( |
2005 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); | 2018 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); |
2006 EXPECT_FALSE(it); | 2019 EXPECT_FALSE(it); |
2007 | 2020 |
2008 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); | 2021 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); |
2009 | 2022 |
2010 std::set<Tile*> unique_tiles; | 2023 std::set<Tile*> unique_tiles; |
2011 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f}; | 2024 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f}; |
2012 size_t scale_index = 0; | 2025 size_t scale_index = 0; |
2013 bool reached_visible = false; | 2026 bool reached_visible = false; |
2014 bool reached_required = false; | |
2015 Tile* last_tile = NULL; | 2027 Tile* last_tile = NULL; |
2016 for (it = PictureLayerImpl::LayerEvictionTileIterator( | 2028 for (it = PictureLayerImpl::LayerEvictionTileIterator( |
2017 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); | 2029 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); |
2018 it; | 2030 it; |
2019 ++it) { | 2031 ++it) { |
2020 Tile* tile = *it; | 2032 Tile* tile = *it; |
2021 if (!last_tile) | 2033 if (!last_tile) |
2022 last_tile = tile; | 2034 last_tile = tile; |
2023 | 2035 |
2024 EXPECT_TRUE(tile); | 2036 EXPECT_TRUE(tile); |
2025 | 2037 |
2026 TilePriority priority = tile->priority(PENDING_TREE); | 2038 TilePriority priority = tile->priority(PENDING_TREE); |
2027 | 2039 |
2028 if (priority.priority_bin == TilePriority::NOW) { | 2040 if (priority.priority_bin == TilePriority::NOW) { |
2029 reached_visible = true; | 2041 reached_visible = true; |
2030 last_tile = tile; | 2042 last_tile = tile; |
2031 break; | 2043 break; |
2032 } | 2044 } |
2033 | 2045 |
2034 if (reached_required) { | 2046 EXPECT_FALSE(tile->required_for_activation()); |
2035 EXPECT_TRUE(tile->required_for_activation()); | |
2036 } else if (tile->required_for_activation()) { | |
2037 reached_required = true; | |
2038 scale_index = 0; | |
2039 } | |
2040 | 2047 |
2041 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > | 2048 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > |
2042 std::numeric_limits<float>::epsilon()) { | 2049 std::numeric_limits<float>::epsilon()) { |
2043 ++scale_index; | 2050 ++scale_index; |
2044 ASSERT_LT(scale_index, arraysize(expected_scales)); | 2051 ASSERT_LT(scale_index, arraysize(expected_scales)); |
2045 } | 2052 } |
2046 | 2053 |
2047 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); | 2054 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); |
2048 unique_tiles.insert(tile); | 2055 unique_tiles.insert(tile); |
2049 | 2056 |
2050 // If the tile is the same rough bin as last tile (same activation, bin, and | 2057 // If the tile is the same rough bin as last tile (same activation, bin, and |
2051 // scale), then distance should be decreasing. | 2058 // scale), then distance should be decreasing. |
2052 if (tile->required_for_activation() == | 2059 if (tile->required_for_activation() == |
2053 last_tile->required_for_activation() && | 2060 last_tile->required_for_activation() && |
2054 priority.priority_bin == | 2061 priority.priority_bin == |
2055 last_tile->priority(PENDING_TREE).priority_bin && | 2062 last_tile->priority(PENDING_TREE).priority_bin && |
2056 std::abs(tile->contents_scale() - last_tile->contents_scale()) < | 2063 std::abs(tile->contents_scale() - last_tile->contents_scale()) < |
2057 std::numeric_limits<float>::epsilon()) { | 2064 std::numeric_limits<float>::epsilon()) { |
2058 EXPECT_LE(priority.distance_to_visible, | 2065 EXPECT_LE(priority.distance_to_visible, |
2059 last_tile->priority(PENDING_TREE).distance_to_visible); | 2066 last_tile->priority(PENDING_TREE).distance_to_visible); |
2060 } | 2067 } |
2061 | 2068 |
2062 last_tile = tile; | 2069 last_tile = tile; |
2063 } | 2070 } |
2064 | 2071 |
2065 EXPECT_TRUE(reached_visible); | 2072 EXPECT_TRUE(reached_visible); |
2066 EXPECT_TRUE(reached_required); | |
2067 EXPECT_EQ(65u, unique_tiles.size()); | 2073 EXPECT_EQ(65u, unique_tiles.size()); |
2068 | 2074 |
2069 scale_index = 0; | 2075 scale_index = 0; |
2070 reached_required = false; | 2076 bool reached_required = false; |
2071 for (; it; ++it) { | 2077 for (; it; ++it) { |
2072 Tile* tile = *it; | 2078 Tile* tile = *it; |
2073 EXPECT_TRUE(tile); | 2079 EXPECT_TRUE(tile); |
2074 | 2080 |
2075 TilePriority priority = tile->priority(PENDING_TREE); | 2081 TilePriority priority = tile->priority(PENDING_TREE); |
2076 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 2082 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
2077 | 2083 |
2078 if (reached_required) { | 2084 if (reached_required) { |
2079 EXPECT_TRUE(tile->required_for_activation()); | 2085 EXPECT_TRUE(tile->required_for_activation()); |
2080 } else if (tile->required_for_activation()) { | 2086 } else if (tile->required_for_activation()) { |
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3089 NOTREACHED(); | 3095 NOTREACHED(); |
3090 } | 3096 } |
3091 | 3097 |
3092 tiling_count++; | 3098 tiling_count++; |
3093 } | 3099 } |
3094 | 3100 |
3095 EXPECT_EQ(tiling_count, 5); | 3101 EXPECT_EQ(tiling_count, 5); |
3096 } | 3102 } |
3097 } // namespace | 3103 } // namespace |
3098 } // namespace cc | 3104 } // namespace cc |
OLD | NEW |