Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 1130123003: cc: Separate the priority from the tile and put in new PrioritizedTile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/resources/eviction_tile_priority_queue.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1739 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 host_impl_.SetCurrentBeginFrameArgs( 1750 host_impl_.SetCurrentBeginFrameArgs(
1751 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 1751 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
1752 pending_layer_->UpdateTiles(resourceless_software_draw); 1752 pending_layer_->UpdateTiles(resourceless_software_draw);
1753 1753
1754 int num_visible = 0; 1754 int num_visible = 0;
1755 int num_offscreen = 0; 1755 int num_offscreen = 0;
1756 1756
1757 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll( 1757 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll(
1758 pending_layer_->picture_layer_tiling_set(), false)); 1758 pending_layer_->picture_layer_tiling_set(), false));
1759 for (; !queue->IsEmpty(); queue->Pop()) { 1759 for (; !queue->IsEmpty(); queue->Pop()) {
1760 const Tile* tile = queue->Top(); 1760 const PrioritizedTile& prioritized_tile = queue->Top();
1761 DCHECK(tile); 1761 DCHECK(prioritized_tile.tile());
1762 if (tile->priority().distance_to_visible == 0.f) { 1762 if (prioritized_tile.priority().distance_to_visible == 0.f) {
1763 EXPECT_TRUE(tile->required_for_activation()); 1763 EXPECT_TRUE(prioritized_tile.tile()->required_for_activation());
1764 num_visible++; 1764 num_visible++;
1765 } else { 1765 } else {
1766 EXPECT_FALSE(tile->required_for_activation()); 1766 EXPECT_FALSE(prioritized_tile.tile()->required_for_activation());
1767 num_offscreen++; 1767 num_offscreen++;
1768 } 1768 }
1769 } 1769 }
1770 1770
1771 EXPECT_GT(num_visible, 0); 1771 EXPECT_GT(num_visible, 0);
1772 EXPECT_GT(num_offscreen, 0); 1772 EXPECT_GT(num_offscreen, 0);
1773 } 1773 }
1774 1774
1775 TEST_F(NoLowResPictureLayerImplTest, 1775 TEST_F(NoLowResPictureLayerImplTest,
1776 TileOutsideOfViewportForTilePriorityNotRequired) { 1776 TileOutsideOfViewportForTilePriorityNotRequired) {
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
2064 gfx::Size layer_bounds(400, 400); 2064 gfx::Size layer_bounds(400, 400);
2065 gfx::Size tile_size(100, 100); 2065 gfx::Size tile_size(100, 100);
2066 2066
2067 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, 2067 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size,
2068 gfx::Rect(layer_bounds)); 2068 gfx::Rect(layer_bounds));
2069 2069
2070 active_layer_->SetAllTilesReady(); 2070 active_layer_->SetAllTilesReady();
2071 2071
2072 // All active tiles ready, so pending can only activate with all high res 2072 // All active tiles ready, so pending can only activate with all high res
2073 // tiles. 2073 // tiles.
2074 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2074 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2075 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2075 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2076 2076
2077 AssertAllTilesRequired(pending_layer_->HighResTiling()); 2077 AssertAllTilesRequired(pending_layer_->HighResTiling());
2078 AssertNoTilesRequired(pending_layer_->LowResTiling()); 2078 AssertNoTilesRequired(pending_layer_->LowResTiling());
2079 } 2079 }
2080 2080
2081 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) { 2081 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) {
2082 gfx::Size layer_bounds(400, 400); 2082 gfx::Size layer_bounds(400, 400);
2083 gfx::Size tile_size(100, 100); 2083 gfx::Size tile_size(100, 100);
2084 2084
2085 // No invalidation. 2085 // No invalidation.
2086 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); 2086 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
2087 2087
2088 // Verify active tree not ready. 2088 // Verify active tree not ready.
2089 Tile* some_active_tile = 2089 Tile* some_active_tile =
2090 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 2090 active_layer_->HighResTiling()->AllTilesForTesting()[0];
2091 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 2091 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
2092 2092
2093 // When high res are required, all tiles in active high res tiling should be 2093 // When high res are required, all tiles in active high res tiling should be
2094 // required for activation. 2094 // required for activation.
2095 host_impl_.SetRequiresHighResToDraw(); 2095 host_impl_.SetRequiresHighResToDraw();
2096 2096
2097 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2097 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2098 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2098 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2099 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2099 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2100 active_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2100 active_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2101 2101
2102 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty()); 2102 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty());
2103 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty()); 2103 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty());
2104 AssertAllTilesRequired(active_layer_->HighResTiling()); 2104 AssertAllTilesRequired(active_layer_->HighResTiling());
2105 AssertNoTilesRequired(active_layer_->LowResTiling()); 2105 AssertNoTilesRequired(active_layer_->LowResTiling());
2106 } 2106 }
2107 2107
2108 TEST_F(PictureLayerImplTest, AllHighResRequiredEvenIfNotChanged) { 2108 TEST_F(PictureLayerImplTest, AllHighResRequiredEvenIfNotChanged) {
2109 gfx::Size layer_bounds(400, 400); 2109 gfx::Size layer_bounds(400, 400);
2110 gfx::Size tile_size(100, 100); 2110 gfx::Size tile_size(100, 100);
2111 2111
2112 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); 2112 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
2113 2113
2114 Tile* some_active_tile = 2114 Tile* some_active_tile =
2115 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 2115 active_layer_->HighResTiling()->AllTilesForTesting()[0];
2116 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 2116 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
2117 2117
2118 // Since there are no invalidations, pending tree should have no tiles. 2118 // Since there are no invalidations, pending tree should have no tiles.
2119 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty()); 2119 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty());
2120 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty()); 2120 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty());
2121 2121
2122 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2122 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2123 active_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2123 active_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2124 2124
2125 AssertAllTilesRequired(active_layer_->HighResTiling()); 2125 AssertAllTilesRequired(active_layer_->HighResTiling());
2126 AssertNoTilesRequired(active_layer_->LowResTiling()); 2126 AssertNoTilesRequired(active_layer_->LowResTiling());
2127 } 2127 }
2128 2128
2129 TEST_F(PictureLayerImplTest, DisallowRequiredForActivation) { 2129 TEST_F(PictureLayerImplTest, DisallowRequiredForActivation) {
2130 gfx::Size layer_bounds(400, 400); 2130 gfx::Size layer_bounds(400, 400);
2131 gfx::Size tile_size(100, 100); 2131 gfx::Size tile_size(100, 100);
2132 2132
2133 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); 2133 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
2134 2134
2135 Tile* some_active_tile = 2135 Tile* some_active_tile =
2136 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 2136 active_layer_->HighResTiling()->AllTilesForTesting()[0];
2137 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 2137 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
2138 2138
2139 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty()); 2139 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty());
2140 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty()); 2140 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty());
2141 active_layer_->HighResTiling()->set_can_require_tiles_for_activation(false); 2141 active_layer_->HighResTiling()->set_can_require_tiles_for_activation(false);
2142 active_layer_->LowResTiling()->set_can_require_tiles_for_activation(false); 2142 active_layer_->LowResTiling()->set_can_require_tiles_for_activation(false);
2143 pending_layer_->HighResTiling()->set_can_require_tiles_for_activation(false); 2143 pending_layer_->HighResTiling()->set_can_require_tiles_for_activation(false);
2144 pending_layer_->LowResTiling()->set_can_require_tiles_for_activation(false); 2144 pending_layer_->LowResTiling()->set_can_require_tiles_for_activation(false);
2145 2145
2146 // If we disallow required for activation, no tiles can be required. 2146 // If we disallow required for activation, no tiles can be required.
2147 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2147 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2148 active_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2148 active_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2149 2149
2150 AssertNoTilesRequired(active_layer_->HighResTiling()); 2150 AssertNoTilesRequired(active_layer_->HighResTiling());
2151 AssertNoTilesRequired(active_layer_->LowResTiling()); 2151 AssertNoTilesRequired(active_layer_->LowResTiling());
2152 } 2152 }
2153 2153
2154 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { 2154 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) {
2155 gfx::Size layer_bounds(400, 400); 2155 gfx::Size layer_bounds(400, 400);
2156 gfx::Size tile_size(100, 100); 2156 gfx::Size tile_size(100, 100);
2157 2157
2158 scoped_refptr<FakePicturePileImpl> pending_pile = 2158 scoped_refptr<FakePicturePileImpl> pending_pile =
2159 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 2159 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2160 // This pile will create tilings, but has no recordings so will not create any 2160 // This pile will create tilings, but has no recordings so will not create any
2161 // tiles. This is attempting to simulate scrolling past the end of recorded 2161 // tiles. This is attempting to simulate scrolling past the end of recorded
2162 // content on the active layer, where the recordings are so far away that 2162 // content on the active layer, where the recordings are so far away that
2163 // no tiles are created. 2163 // no tiles are created.
2164 bool is_solid_color = false; 2164 bool is_solid_color = false;
2165 scoped_refptr<FakePicturePileImpl> active_pile = 2165 scoped_refptr<FakePicturePileImpl> active_pile =
2166 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( 2166 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
2167 tile_size, layer_bounds, is_solid_color); 2167 tile_size, layer_bounds, is_solid_color);
2168 2168
2169 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region()); 2169 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region());
2170 2170
2171 // Active layer has tilings, but no tiles due to missing recordings. 2171 // Active layer has tilings, but no tiles due to missing recordings.
2172 EXPECT_TRUE(active_layer_->CanHaveTilings()); 2172 EXPECT_TRUE(active_layer_->CanHaveTilings());
2173 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 2u); 2173 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 2u);
2174 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); 2174 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u);
2175 2175
2176 // Since the active layer has no tiles at all, the pending layer doesn't 2176 // Since the active layer has no tiles at all, the pending layer doesn't
2177 // need content in order to activate. 2177 // need content in order to activate.
2178 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2178 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2179 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2179 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2180 2180
2181 AssertNoTilesRequired(pending_layer_->HighResTiling()); 2181 AssertNoTilesRequired(pending_layer_->HighResTiling());
2182 AssertNoTilesRequired(pending_layer_->LowResTiling()); 2182 AssertNoTilesRequired(pending_layer_->LowResTiling());
2183 } 2183 }
2184 2184
2185 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) { 2185 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) {
2186 gfx::Size layer_bounds(400, 400); 2186 gfx::Size layer_bounds(400, 400);
2187 gfx::Size tile_size(100, 100); 2187 gfx::Size tile_size(100, 100);
2188 2188
2189 scoped_refptr<FakePicturePileImpl> pending_pile = 2189 scoped_refptr<FakePicturePileImpl> pending_pile =
2190 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 2190 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2191 scoped_refptr<FakePicturePileImpl> active_pile = 2191 scoped_refptr<FakePicturePileImpl> active_pile =
2192 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); 2192 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds);
2193 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region()); 2193 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region());
2194 2194
2195 // Active layer can't have tiles. 2195 // Active layer can't have tiles.
2196 EXPECT_FALSE(active_layer_->CanHaveTilings()); 2196 EXPECT_FALSE(active_layer_->CanHaveTilings());
2197 2197
2198 // All high res tiles required. This should be considered identical 2198 // All high res tiles required. This should be considered identical
2199 // to the case where there is no active layer, to avoid flashing content. 2199 // to the case where there is no active layer, to avoid flashing content.
2200 // This can happen if a layer exists for a while and switches from 2200 // This can happen if a layer exists for a while and switches from
2201 // not being able to have content to having content. 2201 // not being able to have content to having content.
2202 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2202 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2203 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2203 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2204 2204
2205 AssertAllTilesRequired(pending_layer_->HighResTiling()); 2205 AssertAllTilesRequired(pending_layer_->HighResTiling());
2206 AssertNoTilesRequired(pending_layer_->LowResTiling()); 2206 AssertNoTilesRequired(pending_layer_->LowResTiling());
2207 } 2207 }
2208 2208
2209 TEST_F(PictureLayerImplTest, HighResRequiredWhenActiveHasDifferentBounds) { 2209 TEST_F(PictureLayerImplTest, HighResRequiredWhenActiveHasDifferentBounds) {
2210 gfx::Size pending_layer_bounds(400, 400); 2210 gfx::Size pending_layer_bounds(400, 400);
2211 gfx::Size active_layer_bounds(200, 200); 2211 gfx::Size active_layer_bounds(200, 200);
2212 gfx::Size tile_size(100, 100); 2212 gfx::Size tile_size(100, 100);
2213 2213
2214 scoped_refptr<FakePicturePileImpl> pending_pile = 2214 scoped_refptr<FakePicturePileImpl> pending_pile =
2215 FakePicturePileImpl::CreateFilledPile(tile_size, pending_layer_bounds); 2215 FakePicturePileImpl::CreateFilledPile(tile_size, pending_layer_bounds);
2216 scoped_refptr<FakePicturePileImpl> active_pile = 2216 scoped_refptr<FakePicturePileImpl> active_pile =
2217 FakePicturePileImpl::CreateFilledPile(tile_size, active_layer_bounds); 2217 FakePicturePileImpl::CreateFilledPile(tile_size, active_layer_bounds);
2218 2218
2219 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region()); 2219 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region());
2220 2220
2221 // Since the active layer has different bounds, the pending layer needs all 2221 // Since the active layer has different bounds, the pending layer needs all
2222 // high res tiles in order to activate. 2222 // high res tiles in order to activate.
2223 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2223 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2224 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2224 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2225 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2225 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2226 active_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 2226 active_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
2227 2227
2228 AssertAllTilesRequired(pending_layer_->HighResTiling()); 2228 AssertAllTilesRequired(pending_layer_->HighResTiling());
2229 AssertAllTilesRequired(active_layer_->HighResTiling()); 2229 AssertAllTilesRequired(active_layer_->HighResTiling());
2230 AssertNoTilesRequired(active_layer_->LowResTiling()); 2230 AssertNoTilesRequired(active_layer_->LowResTiling());
2231 // Since the test doesn't invalidate the resized region, we expect that the 2231 // Since the test doesn't invalidate the resized region, we expect that the
2232 // same low res tile would exist (which means we don't create a new one of the 2232 // same low res tile would exist (which means we don't create a new one of the
2233 // pending tree). 2233 // pending tree).
2234 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty()); 2234 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty());
2235 } 2235 }
2236 2236
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
2546 gfx::Size viewport_size(1000, 1000); 2546 gfx::Size viewport_size(1000, 1000);
2547 host_impl_.SetViewportSize(viewport_size); 2547 host_impl_.SetViewportSize(viewport_size);
2548 2548
2549 gfx::Size layer_bounds(4000, 4000); 2549 gfx::Size layer_bounds(4000, 4000);
2550 SetupDefaultTrees(layer_bounds); 2550 SetupDefaultTrees(layer_bounds);
2551 EXPECT_TRUE(host_impl_.use_gpu_rasterization()); 2551 EXPECT_TRUE(host_impl_.use_gpu_rasterization());
2552 2552
2553 // Should only have the high-res tiling. 2553 // Should only have the high-res tiling.
2554 EXPECT_EQ(1u, active_layer_->tilings()->num_tilings()); 2554 EXPECT_EQ(1u, active_layer_->tilings()->num_tilings());
2555 2555
2556 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 2556 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
2557 2557
2558 // High res tiling should have 64 tiles (4x16 tile grid). 2558 // High res tiling should have 64 tiles (4x16 tile grid).
2559 EXPECT_EQ(64u, active_layer_->HighResTiling()->AllTilesForTesting().size()); 2559 EXPECT_EQ(64u, active_layer_->HighResTiling()->AllTilesForTesting().size());
2560 2560
2561 // Visible viewport should be covered by 4 tiles. No other 2561 // Visible viewport should be covered by 4 tiles. No other
2562 // tiles should be required for activation. 2562 // tiles should be required for activation.
2563 EXPECT_EQ(4u, NumberOfTilesRequired(active_layer_->HighResTiling())); 2563 EXPECT_EQ(4u, NumberOfTilesRequired(active_layer_->HighResTiling()));
2564 } 2564 }
2565 2565
2566 TEST_F(PictureLayerImplTest, NoTilingIfDoesNotDrawContent) { 2566 TEST_F(PictureLayerImplTest, NoTilingIfDoesNotDrawContent) {
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
2915 2915
2916 std::set<Tile*> unique_tiles; 2916 std::set<Tile*> unique_tiles;
2917 bool reached_prepaint = false; 2917 bool reached_prepaint = false;
2918 int non_ideal_tile_count = 0u; 2918 int non_ideal_tile_count = 0u;
2919 int low_res_tile_count = 0u; 2919 int low_res_tile_count = 0u;
2920 int high_res_tile_count = 0u; 2920 int high_res_tile_count = 0u;
2921 int high_res_now_tiles = 0u; 2921 int high_res_now_tiles = 0u;
2922 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll( 2922 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll(
2923 pending_layer_->picture_layer_tiling_set(), false)); 2923 pending_layer_->picture_layer_tiling_set(), false));
2924 while (!queue->IsEmpty()) { 2924 while (!queue->IsEmpty()) {
2925 Tile* tile = queue->Top(); 2925 PrioritizedTile prioritized_tile = queue->Top();
2926 TilePriority priority = tile->priority(); 2926 TilePriority priority = prioritized_tile.priority();
2927 2927
2928 EXPECT_TRUE(tile); 2928 EXPECT_TRUE(prioritized_tile.tile());
2929 2929
2930 // Non-high res tiles only get visible tiles. Also, prepaint should only 2930 // Non-high res tiles only get visible tiles. Also, prepaint should only
2931 // come at the end of the iteration. 2931 // come at the end of the iteration.
2932 if (priority.resolution != HIGH_RESOLUTION) { 2932 if (priority.resolution != HIGH_RESOLUTION) {
2933 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 2933 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
2934 } else if (reached_prepaint) { 2934 } else if (reached_prepaint) {
2935 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 2935 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
2936 } else { 2936 } else {
2937 reached_prepaint = priority.priority_bin != TilePriority::NOW; 2937 reached_prepaint = priority.priority_bin != TilePriority::NOW;
2938 if (!reached_prepaint) 2938 if (!reached_prepaint)
2939 ++high_res_now_tiles; 2939 ++high_res_now_tiles;
2940 } 2940 }
2941 2941
2942 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; 2942 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION;
2943 low_res_tile_count += priority.resolution == LOW_RESOLUTION; 2943 low_res_tile_count += priority.resolution == LOW_RESOLUTION;
2944 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 2944 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
2945 2945
2946 unique_tiles.insert(tile); 2946 unique_tiles.insert(prioritized_tile.tile());
2947 queue->Pop(); 2947 queue->Pop();
2948 } 2948 }
2949 2949
2950 EXPECT_TRUE(reached_prepaint); 2950 EXPECT_TRUE(reached_prepaint);
2951 EXPECT_EQ(0, non_ideal_tile_count); 2951 EXPECT_EQ(0, non_ideal_tile_count);
2952 EXPECT_EQ(0, low_res_tile_count); 2952 EXPECT_EQ(0, low_res_tile_count);
2953 2953
2954 // With layer size being 1000x1000 and default tile size 256x256, we expect to 2954 // With layer size being 1000x1000 and default tile size 256x256, we expect to
2955 // see 4 now tiles out of 16 total high res tiles. 2955 // see 4 now tiles out of 16 total high res tiles.
2956 EXPECT_EQ(16, high_res_tile_count); 2956 EXPECT_EQ(16, high_res_tile_count);
2957 EXPECT_EQ(4, high_res_now_tiles); 2957 EXPECT_EQ(4, high_res_now_tiles);
2958 EXPECT_EQ(low_res_tile_count + high_res_tile_count + non_ideal_tile_count, 2958 EXPECT_EQ(low_res_tile_count + high_res_tile_count + non_ideal_tile_count,
2959 static_cast<int>(unique_tiles.size())); 2959 static_cast<int>(unique_tiles.size()));
2960 2960
2961 scoped_ptr<TilingSetRasterQueueRequired> required_queue( 2961 scoped_ptr<TilingSetRasterQueueRequired> required_queue(
2962 new TilingSetRasterQueueRequired( 2962 new TilingSetRasterQueueRequired(
2963 pending_layer_->picture_layer_tiling_set(), 2963 pending_layer_->picture_layer_tiling_set(),
2964 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)); 2964 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
2965 EXPECT_TRUE(required_queue->IsEmpty()); 2965 EXPECT_TRUE(required_queue->IsEmpty());
2966 2966
2967 required_queue.reset(new TilingSetRasterQueueRequired( 2967 required_queue.reset(new TilingSetRasterQueueRequired(
2968 pending_layer_->picture_layer_tiling_set(), 2968 pending_layer_->picture_layer_tiling_set(),
2969 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)); 2969 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION));
2970 EXPECT_FALSE(required_queue->IsEmpty()); 2970 EXPECT_FALSE(required_queue->IsEmpty());
2971 int required_for_activation_count = 0; 2971 int required_for_activation_count = 0;
2972 while (!required_queue->IsEmpty()) { 2972 while (!required_queue->IsEmpty()) {
2973 Tile* tile = required_queue->Top(); 2973 PrioritizedTile prioritized_tile = required_queue->Top();
2974 EXPECT_TRUE(tile->required_for_activation()); 2974 EXPECT_TRUE(prioritized_tile.tile()->required_for_activation());
2975 EXPECT_FALSE(tile->IsReadyToDraw()); 2975 EXPECT_FALSE(prioritized_tile.tile()->IsReadyToDraw());
2976 ++required_for_activation_count; 2976 ++required_for_activation_count;
2977 required_queue->Pop(); 2977 required_queue->Pop();
2978 } 2978 }
2979 2979
2980 // All of the high res tiles should be required for activation, since there is 2980 // All of the high res tiles should be required for activation, since there is
2981 // no active twin. 2981 // no active twin.
2982 EXPECT_EQ(high_res_now_tiles, required_for_activation_count); 2982 EXPECT_EQ(high_res_now_tiles, required_for_activation_count);
2983 2983
2984 // No NOW tiles. 2984 // No NOW tiles.
2985 time_ticks += base::TimeDelta::FromMilliseconds(200); 2985 time_ticks += base::TimeDelta::FromMilliseconds(200);
2986 host_impl_.SetCurrentBeginFrameArgs( 2986 host_impl_.SetCurrentBeginFrameArgs(
2987 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 2987 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
2988 2988
2989 pending_layer_->draw_properties().visible_content_rect = 2989 pending_layer_->draw_properties().visible_content_rect =
2990 gfx::Rect(1100, 1100, 500, 500); 2990 gfx::Rect(1100, 1100, 500, 500);
2991 bool resourceless_software_draw = false; 2991 bool resourceless_software_draw = false;
2992 pending_layer_->UpdateTiles(resourceless_software_draw); 2992 pending_layer_->UpdateTiles(resourceless_software_draw);
2993 2993
2994 unique_tiles.clear(); 2994 unique_tiles.clear();
2995 high_res_tile_count = 0u; 2995 high_res_tile_count = 0u;
2996 queue.reset(new TilingSetRasterQueueAll( 2996 queue.reset(new TilingSetRasterQueueAll(
2997 pending_layer_->picture_layer_tiling_set(), false)); 2997 pending_layer_->picture_layer_tiling_set(), false));
2998 while (!queue->IsEmpty()) { 2998 while (!queue->IsEmpty()) {
2999 Tile* tile = queue->Top(); 2999 PrioritizedTile prioritized_tile = queue->Top();
3000 TilePriority priority = tile->priority(); 3000 TilePriority priority = prioritized_tile.priority();
3001 3001
3002 EXPECT_TRUE(tile); 3002 EXPECT_TRUE(prioritized_tile.tile());
3003 3003
3004 // Non-high res tiles only get visible tiles. 3004 // Non-high res tiles only get visible tiles.
3005 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution); 3005 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution);
3006 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 3006 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
3007 3007
3008 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 3008 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
3009 3009
3010 unique_tiles.insert(tile); 3010 unique_tiles.insert(prioritized_tile.tile());
3011 queue->Pop(); 3011 queue->Pop();
3012 } 3012 }
3013 3013
3014 EXPECT_EQ(16, high_res_tile_count); 3014 EXPECT_EQ(16, high_res_tile_count);
3015 EXPECT_EQ(high_res_tile_count, static_cast<int>(unique_tiles.size())); 3015 EXPECT_EQ(high_res_tile_count, static_cast<int>(unique_tiles.size()));
3016 3016
3017 time_ticks += base::TimeDelta::FromMilliseconds(200); 3017 time_ticks += base::TimeDelta::FromMilliseconds(200);
3018 host_impl_.SetCurrentBeginFrameArgs( 3018 host_impl_.SetCurrentBeginFrameArgs(
3019 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 3019 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
3020 3020
(...skipping 10 matching lines...) Expand all
3031 TileDrawInfo& draw_info = tile->draw_info(); 3031 TileDrawInfo& draw_info = tile->draw_info();
3032 draw_info.SetSolidColorForTesting(SK_ColorRED); 3032 draw_info.SetSolidColorForTesting(SK_ColorRED);
3033 } 3033 }
3034 3034
3035 non_ideal_tile_count = 0; 3035 non_ideal_tile_count = 0;
3036 low_res_tile_count = 0; 3036 low_res_tile_count = 0;
3037 high_res_tile_count = 0; 3037 high_res_tile_count = 0;
3038 queue.reset(new TilingSetRasterQueueAll( 3038 queue.reset(new TilingSetRasterQueueAll(
3039 pending_layer_->picture_layer_tiling_set(), true)); 3039 pending_layer_->picture_layer_tiling_set(), true));
3040 while (!queue->IsEmpty()) { 3040 while (!queue->IsEmpty()) {
3041 Tile* tile = queue->Top(); 3041 PrioritizedTile prioritized_tile = queue->Top();
3042 TilePriority priority = tile->priority(); 3042 TilePriority priority = prioritized_tile.priority();
3043 3043
3044 EXPECT_TRUE(tile); 3044 EXPECT_TRUE(prioritized_tile.tile());
3045 3045
3046 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; 3046 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION;
3047 low_res_tile_count += priority.resolution == LOW_RESOLUTION; 3047 low_res_tile_count += priority.resolution == LOW_RESOLUTION;
3048 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 3048 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
3049 queue->Pop(); 3049 queue->Pop();
3050 } 3050 }
3051 3051
3052 EXPECT_EQ(0, non_ideal_tile_count); 3052 EXPECT_EQ(0, non_ideal_tile_count);
3053 EXPECT_EQ(1, low_res_tile_count); 3053 EXPECT_EQ(1, low_res_tile_count);
3054 EXPECT_EQ(0, high_res_tile_count); 3054 EXPECT_EQ(0, high_res_tile_count);
(...skipping 16 matching lines...) Expand all
3071 SetupPendingTree(pending_pile); 3071 SetupPendingTree(pending_pile);
3072 ActivateTree(); 3072 ActivateTree();
3073 EXPECT_EQ(2u, active_layer_->num_tilings()); 3073 EXPECT_EQ(2u, active_layer_->num_tilings());
3074 3074
3075 scoped_ptr<TilingSetRasterQueueRequired> queue( 3075 scoped_ptr<TilingSetRasterQueueRequired> queue(
3076 new TilingSetRasterQueueRequired( 3076 new TilingSetRasterQueueRequired(
3077 active_layer_->picture_layer_tiling_set(), 3077 active_layer_->picture_layer_tiling_set(),
3078 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)); 3078 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
3079 EXPECT_FALSE(queue->IsEmpty()); 3079 EXPECT_FALSE(queue->IsEmpty());
3080 while (!queue->IsEmpty()) { 3080 while (!queue->IsEmpty()) {
3081 Tile* tile = queue->Top(); 3081 PrioritizedTile prioritized_tile = queue->Top();
3082 EXPECT_TRUE(tile->required_for_draw()); 3082 EXPECT_TRUE(prioritized_tile.tile()->required_for_draw());
3083 EXPECT_FALSE(tile->IsReadyToDraw()); 3083 EXPECT_FALSE(prioritized_tile.tile()->IsReadyToDraw());
3084 queue->Pop(); 3084 queue->Pop();
3085 } 3085 }
3086 3086
3087 queue.reset(new TilingSetRasterQueueRequired( 3087 queue.reset(new TilingSetRasterQueueRequired(
3088 active_layer_->picture_layer_tiling_set(), 3088 active_layer_->picture_layer_tiling_set(),
3089 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)); 3089 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION));
3090 EXPECT_TRUE(queue->IsEmpty()); 3090 EXPECT_TRUE(queue->IsEmpty());
3091 } 3091 }
3092 3092
3093 TEST_F(PictureLayerImplTest, TilingSetRasterQueueRequiredNoHighRes) { 3093 TEST_F(PictureLayerImplTest, TilingSetRasterQueueRequiredNoHighRes) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
3166 scoped_ptr<TilingSetEvictionQueue> queue( 3166 scoped_ptr<TilingSetEvictionQueue> queue(
3167 new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set())); 3167 new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set()));
3168 EXPECT_TRUE(queue->IsEmpty()); 3168 EXPECT_TRUE(queue->IsEmpty());
3169 3169
3170 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); 3170 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles);
3171 3171
3172 std::set<Tile*> unique_tiles; 3172 std::set<Tile*> unique_tiles;
3173 float expected_scales[] = {low_res_factor, 1.f}; 3173 float expected_scales[] = {low_res_factor, 1.f};
3174 size_t scale_index = 0; 3174 size_t scale_index = 0;
3175 bool reached_visible = false; 3175 bool reached_visible = false;
3176 Tile* last_tile = nullptr; 3176 PrioritizedTile last_tile;
3177 size_t distance_decreasing = 0; 3177 size_t distance_decreasing = 0;
3178 size_t distance_increasing = 0; 3178 size_t distance_increasing = 0;
3179 queue.reset( 3179 queue.reset(
3180 new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set())); 3180 new TilingSetEvictionQueue(pending_layer_->picture_layer_tiling_set()));
3181 while (!queue->IsEmpty()) { 3181 while (!queue->IsEmpty()) {
3182 Tile* tile = queue->Top(); 3182 PrioritizedTile prioritized_tile = queue->Top();
3183 if (!last_tile) 3183 Tile* tile = prioritized_tile.tile();
3184 last_tile = tile; 3184 if (!last_tile.tile())
3185 last_tile = prioritized_tile;
3185 3186
3186 EXPECT_TRUE(tile); 3187 EXPECT_TRUE(tile);
3187 3188
3188 TilePriority priority = tile->priority(); 3189 TilePriority priority = prioritized_tile.priority();
3189 3190
3190 if (priority.priority_bin == TilePriority::NOW) { 3191 if (priority.priority_bin == TilePriority::NOW) {
3191 reached_visible = true; 3192 reached_visible = true;
3192 last_tile = tile; 3193 last_tile = prioritized_tile;
3193 break; 3194 break;
3194 } 3195 }
3195 3196
3196 EXPECT_FALSE(tile->required_for_activation()); 3197 EXPECT_FALSE(tile->required_for_activation());
3197 3198
3198 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > 3199 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) >
3199 std::numeric_limits<float>::epsilon()) { 3200 std::numeric_limits<float>::epsilon()) {
3200 ++scale_index; 3201 ++scale_index;
3201 ASSERT_LT(scale_index, arraysize(expected_scales)); 3202 ASSERT_LT(scale_index, arraysize(expected_scales));
3202 } 3203 }
3203 3204
3204 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); 3205 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]);
3205 unique_tiles.insert(tile); 3206 unique_tiles.insert(tile);
3206 3207
3207 if (tile->required_for_activation() == 3208 if (tile->required_for_activation() ==
3208 last_tile->required_for_activation() && 3209 last_tile.tile()->required_for_activation() &&
3209 std::abs(tile->contents_scale() - last_tile->contents_scale()) < 3210 std::abs(tile->contents_scale() - last_tile.tile()->contents_scale()) <
3210 std::numeric_limits<float>::epsilon()) { 3211 std::numeric_limits<float>::epsilon()) {
3211 if (priority.distance_to_visible <= 3212 if (priority.distance_to_visible <=
3212 last_tile->priority().distance_to_visible) 3213 last_tile.priority().distance_to_visible)
3213 ++distance_decreasing; 3214 ++distance_decreasing;
3214 else 3215 else
3215 ++distance_increasing; 3216 ++distance_increasing;
3216 } 3217 }
3217 3218
3218 last_tile = tile; 3219 last_tile = prioritized_tile;
3219 queue->Pop(); 3220 queue->Pop();
3220 } 3221 }
3221 3222
3222 // 4 high res tiles are inside the viewport, the rest are evicted. 3223 // 4 high res tiles are inside the viewport, the rest are evicted.
3223 EXPECT_TRUE(reached_visible); 3224 EXPECT_TRUE(reached_visible);
3224 EXPECT_EQ(12u, unique_tiles.size()); 3225 EXPECT_EQ(12u, unique_tiles.size());
3225 EXPECT_EQ(1u, distance_increasing); 3226 EXPECT_EQ(1u, distance_increasing);
3226 EXPECT_EQ(11u, distance_decreasing); 3227 EXPECT_EQ(11u, distance_decreasing);
3227 3228
3228 scale_index = 0; 3229 scale_index = 0;
3229 bool reached_required = false; 3230 bool reached_required = false;
3230 while (!queue->IsEmpty()) { 3231 while (!queue->IsEmpty()) {
3231 Tile* tile = queue->Top(); 3232 PrioritizedTile prioritized_tile = queue->Top();
3233 Tile* tile = prioritized_tile.tile();
3232 EXPECT_TRUE(tile); 3234 EXPECT_TRUE(tile);
3233 3235
3234 TilePriority priority = tile->priority(); 3236 TilePriority priority = prioritized_tile.priority();
3235 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 3237 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
3236 3238
3237 if (reached_required) { 3239 if (reached_required) {
3238 EXPECT_TRUE(tile->required_for_activation()); 3240 EXPECT_TRUE(tile->required_for_activation());
3239 } else if (tile->required_for_activation()) { 3241 } else if (tile->required_for_activation()) {
3240 reached_required = true; 3242 reached_required = true;
3241 scale_index = 0; 3243 scale_index = 0;
3242 } 3244 }
3243 3245
3244 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > 3246 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) >
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
3566 3568
3567 Tile* some_active_tile = 3569 Tile* some_active_tile =
3568 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 3570 active_layer_->HighResTiling()->AllTilesForTesting()[0];
3569 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 3571 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
3570 3572
3571 // Since there is no invalidation, pending tree should have no tiles. 3573 // Since there is no invalidation, pending tree should have no tiles.
3572 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty()); 3574 EXPECT_TRUE(pending_layer_->HighResTiling()->AllTilesForTesting().empty());
3573 if (host_impl_.settings().create_low_res_tiling) 3575 if (host_impl_.settings().create_low_res_tiling)
3574 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty()); 3576 EXPECT_TRUE(pending_layer_->LowResTiling()->AllTilesForTesting().empty());
3575 3577
3576 active_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 3578 active_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
3577 if (host_impl_.settings().create_low_res_tiling) 3579 if (host_impl_.settings().create_low_res_tiling)
3578 active_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 3580 active_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
3579 3581
3580 AssertAllTilesRequired(active_layer_->HighResTiling()); 3582 AssertAllTilesRequired(active_layer_->HighResTiling());
3581 if (host_impl_.settings().create_low_res_tiling) 3583 if (host_impl_.settings().create_low_res_tiling)
3582 AssertNoTilesRequired(active_layer_->LowResTiling()); 3584 AssertNoTilesRequired(active_layer_->LowResTiling());
3583 } 3585 }
3584 3586
3585 TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { 3587 TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) {
3586 gfx::Size layer_bounds(400, 400); 3588 gfx::Size layer_bounds(400, 400);
3587 gfx::Size tile_size(100, 100); 3589 gfx::Size tile_size(100, 100);
3588 3590
(...skipping 11 matching lines...) Expand all
3600 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region()); 3602 SetupTreesWithFixedTileSize(pending_pile, active_pile, tile_size, Region());
3601 3603
3602 // Active layer has tilings, but no tiles due to missing recordings. 3604 // Active layer has tilings, but no tiles due to missing recordings.
3603 EXPECT_TRUE(active_layer_->CanHaveTilings()); 3605 EXPECT_TRUE(active_layer_->CanHaveTilings());
3604 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 3606 EXPECT_EQ(active_layer_->tilings()->num_tilings(),
3605 host_impl_.settings().create_low_res_tiling ? 2u : 1u); 3607 host_impl_.settings().create_low_res_tiling ? 2u : 1u);
3606 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); 3608 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u);
3607 3609
3608 // Since the active layer has no tiles at all, the pending layer doesn't 3610 // Since the active layer has no tiles at all, the pending layer doesn't
3609 // need content in order to activate. 3611 // need content in order to activate.
3610 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 3612 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
3611 if (host_impl_.settings().create_low_res_tiling) 3613 if (host_impl_.settings().create_low_res_tiling)
3612 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); 3614 pending_layer_->LowResTiling()->UpdateAllRequiredStateForTesting();
3613 3615
3614 AssertNoTilesRequired(pending_layer_->HighResTiling()); 3616 AssertNoTilesRequired(pending_layer_->HighResTiling());
3615 if (host_impl_.settings().create_low_res_tiling) 3617 if (host_impl_.settings().create_low_res_tiling)
3616 AssertNoTilesRequired(pending_layer_->LowResTiling()); 3618 AssertNoTilesRequired(pending_layer_->LowResTiling());
3617 } 3619 }
3618 3620
3619 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) { 3621 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
3620 base::TimeTicks time_ticks; 3622 base::TimeTicks time_ticks;
3621 time_ticks += base::TimeDelta::FromMilliseconds(1); 3623 time_ticks += base::TimeDelta::FromMilliseconds(1);
3622 host_impl_.SetCurrentBeginFrameArgs( 3624 host_impl_.SetCurrentBeginFrameArgs(
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
3965 class OcclusionTrackingPictureLayerImplTest : public PictureLayerImplTest { 3967 class OcclusionTrackingPictureLayerImplTest : public PictureLayerImplTest {
3966 public: 3968 public:
3967 OcclusionTrackingPictureLayerImplTest() 3969 OcclusionTrackingPictureLayerImplTest()
3968 : PictureLayerImplTest(OcclusionTrackingSettings()) {} 3970 : PictureLayerImplTest(OcclusionTrackingSettings()) {}
3969 3971
3970 void VerifyEvictionConsidersOcclusion(FakePictureLayerImpl* layer, 3972 void VerifyEvictionConsidersOcclusion(FakePictureLayerImpl* layer,
3971 WhichTree tree, 3973 WhichTree tree,
3972 size_t expected_occluded_tile_count, 3974 size_t expected_occluded_tile_count,
3973 int source_line) { 3975 int source_line) {
3974 size_t occluded_tile_count = 0u; 3976 size_t occluded_tile_count = 0u;
3975 Tile* last_tile = nullptr; 3977 PrioritizedTile last_tile;
3976 3978
3977 scoped_ptr<TilingSetEvictionQueue> queue( 3979 scoped_ptr<TilingSetEvictionQueue> queue(
3978 new TilingSetEvictionQueue(layer->picture_layer_tiling_set())); 3980 new TilingSetEvictionQueue(layer->picture_layer_tiling_set()));
3979 while (!queue->IsEmpty()) { 3981 while (!queue->IsEmpty()) {
3980 Tile* tile = queue->Top(); 3982 PrioritizedTile prioritized_tile = queue->Top();
3981 if (!last_tile) 3983 Tile* tile = prioritized_tile.tile();
3982 last_tile = tile; 3984 if (!last_tile.tile())
3985 last_tile = prioritized_tile;
3983 3986
3984 // The only way we will encounter an occluded tile after an unoccluded 3987 // The only way we will encounter an occluded tile after an unoccluded
3985 // tile is if the priorty bin decreased, the tile is required for 3988 // tile is if the priorty bin decreased, the tile is required for
3986 // activation, or the scale changed. 3989 // activation, or the scale changed.
3987 bool tile_is_occluded = tile->is_occluded(); 3990 bool tile_is_occluded = prioritized_tile.is_occluded();
3988 if (tile_is_occluded) { 3991 if (tile_is_occluded) {
3989 occluded_tile_count++; 3992 occluded_tile_count++;
3990 3993
3991 bool last_tile_is_occluded = last_tile->is_occluded(); 3994 bool last_tile_is_occluded = last_tile.is_occluded();
3992 if (!last_tile_is_occluded) { 3995 if (!last_tile_is_occluded) {
3993 TilePriority::PriorityBin tile_priority_bin = 3996 TilePriority::PriorityBin tile_priority_bin =
3994 tile->priority().priority_bin; 3997 prioritized_tile.priority().priority_bin;
3995 TilePriority::PriorityBin last_tile_priority_bin = 3998 TilePriority::PriorityBin last_tile_priority_bin =
3996 last_tile->priority().priority_bin; 3999 last_tile.priority().priority_bin;
3997 4000
3998 EXPECT_TRUE(tile_priority_bin < last_tile_priority_bin || 4001 EXPECT_TRUE(tile_priority_bin < last_tile_priority_bin ||
3999 tile->required_for_activation() || 4002 tile->required_for_activation() ||
4000 tile->contents_scale() != last_tile->contents_scale()) 4003 tile->contents_scale() !=
4004 last_tile.tile()->contents_scale())
4001 << "line: " << source_line; 4005 << "line: " << source_line;
4002 } 4006 }
4003 } 4007 }
4004 last_tile = tile; 4008 last_tile = prioritized_tile;
4005 queue->Pop(); 4009 queue->Pop();
4006 } 4010 }
4007 EXPECT_EQ(expected_occluded_tile_count, occluded_tile_count) 4011 EXPECT_EQ(expected_occluded_tile_count, occluded_tile_count)
4008 << "line: " << source_line; 4012 << "line: " << source_line;
4009 } 4013 }
4010 }; 4014 };
4011 4015
4012 TEST_F(OcclusionTrackingPictureLayerImplTest, 4016 TEST_F(OcclusionTrackingPictureLayerImplTest,
4013 OccludedTilesSkippedDuringRasterization) { 4017 OccludedTilesSkippedDuringRasterization) {
4014 base::TimeTicks time_ticks; 4018 base::TimeTicks time_ticks;
(...skipping 10 matching lines...) Expand all
4025 4029
4026 scoped_refptr<FakePicturePileImpl> pending_pile = 4030 scoped_refptr<FakePicturePileImpl> pending_pile =
4027 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 4031 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
4028 SetupPendingTreeWithFixedTileSize(pending_pile, tile_size, Region()); 4032 SetupPendingTreeWithFixedTileSize(pending_pile, tile_size, Region());
4029 4033
4030 // No occlusion. 4034 // No occlusion.
4031 int unoccluded_tile_count = 0; 4035 int unoccluded_tile_count = 0;
4032 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll( 4036 scoped_ptr<TilingSetRasterQueueAll> queue(new TilingSetRasterQueueAll(
4033 pending_layer_->picture_layer_tiling_set(), false)); 4037 pending_layer_->picture_layer_tiling_set(), false));
4034 while (!queue->IsEmpty()) { 4038 while (!queue->IsEmpty()) {
4035 Tile* tile = queue->Top(); 4039 PrioritizedTile prioritized_tile = queue->Top();
4040 Tile* tile = prioritized_tile.tile();
4036 4041
4037 // Occluded tiles should not be iterated over. 4042 // Occluded tiles should not be iterated over.
4038 EXPECT_FALSE(tile->is_occluded()); 4043 EXPECT_FALSE(prioritized_tile.is_occluded());
4039 4044
4040 // Some tiles may not be visible (i.e. outside the viewport). The rest are 4045 // Some tiles may not be visible (i.e. outside the viewport). The rest are
4041 // visible and at least partially unoccluded, verified by the above expect. 4046 // visible and at least partially unoccluded, verified by the above expect.
4042 bool tile_is_visible = 4047 bool tile_is_visible =
4043 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 4048 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
4044 if (tile_is_visible) 4049 if (tile_is_visible)
4045 unoccluded_tile_count++; 4050 unoccluded_tile_count++;
4046 queue->Pop(); 4051 queue->Pop();
4047 } 4052 }
4048 EXPECT_EQ(unoccluded_tile_count, 25); 4053 EXPECT_EQ(unoccluded_tile_count, 25);
(...skipping 10 matching lines...) Expand all
4059 time_ticks += base::TimeDelta::FromMilliseconds(200); 4064 time_ticks += base::TimeDelta::FromMilliseconds(200);
4060 host_impl_.SetCurrentBeginFrameArgs( 4065 host_impl_.SetCurrentBeginFrameArgs(
4061 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 4066 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
4062 bool update_lcd_text = false; 4067 bool update_lcd_text = false;
4063 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 4068 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
4064 4069
4065 unoccluded_tile_count = 0; 4070 unoccluded_tile_count = 0;
4066 queue.reset(new TilingSetRasterQueueAll( 4071 queue.reset(new TilingSetRasterQueueAll(
4067 pending_layer_->picture_layer_tiling_set(), false)); 4072 pending_layer_->picture_layer_tiling_set(), false));
4068 while (!queue->IsEmpty()) { 4073 while (!queue->IsEmpty()) {
4069 Tile* tile = queue->Top(); 4074 PrioritizedTile prioritized_tile = queue->Top();
4075 Tile* tile = prioritized_tile.tile();
4070 4076
4071 EXPECT_FALSE(tile->is_occluded()); 4077 EXPECT_FALSE(prioritized_tile.is_occluded());
4072 4078
4073 bool tile_is_visible = 4079 bool tile_is_visible =
4074 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 4080 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
4075 if (tile_is_visible) 4081 if (tile_is_visible)
4076 unoccluded_tile_count++; 4082 unoccluded_tile_count++;
4077 queue->Pop(); 4083 queue->Pop();
4078 } 4084 }
4079 EXPECT_EQ(20, unoccluded_tile_count); 4085 EXPECT_EQ(20, unoccluded_tile_count);
4080 4086
4081 // Full occlusion. 4087 // Full occlusion.
4082 layer1->SetPosition(gfx::Point(0, 0)); 4088 layer1->SetPosition(gfx::Point(0, 0));
4083 4089
4084 time_ticks += base::TimeDelta::FromMilliseconds(200); 4090 time_ticks += base::TimeDelta::FromMilliseconds(200);
4085 host_impl_.SetCurrentBeginFrameArgs( 4091 host_impl_.SetCurrentBeginFrameArgs(
4086 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 4092 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
4087 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 4093 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
4088 4094
4089 unoccluded_tile_count = 0; 4095 unoccluded_tile_count = 0;
4090 queue.reset(new TilingSetRasterQueueAll( 4096 queue.reset(new TilingSetRasterQueueAll(
4091 pending_layer_->picture_layer_tiling_set(), false)); 4097 pending_layer_->picture_layer_tiling_set(), false));
4092 while (!queue->IsEmpty()) { 4098 while (!queue->IsEmpty()) {
4093 Tile* tile = queue->Top(); 4099 PrioritizedTile prioritized_tile = queue->Top();
4100 Tile* tile = prioritized_tile.tile();
4094 4101
4095 EXPECT_FALSE(tile->is_occluded()); 4102 EXPECT_FALSE(prioritized_tile.is_occluded());
4096 4103
4097 bool tile_is_visible = 4104 bool tile_is_visible =
4098 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 4105 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
4099 if (tile_is_visible) 4106 if (tile_is_visible)
4100 unoccluded_tile_count++; 4107 unoccluded_tile_count++;
4101 queue->Pop(); 4108 queue->Pop();
4102 } 4109 }
4103 EXPECT_EQ(unoccluded_tile_count, 0); 4110 EXPECT_EQ(unoccluded_tile_count, 0);
4104 } 4111 }
4105 4112
(...skipping 12 matching lines...) Expand all
4118 host_impl_.SetViewportSize(viewport_size); 4125 host_impl_.SetViewportSize(viewport_size);
4119 4126
4120 scoped_refptr<FakePicturePileImpl> pending_pile = 4127 scoped_refptr<FakePicturePileImpl> pending_pile =
4121 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 4128 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
4122 SetupPendingTreeWithFixedTileSize(pending_pile, tile_size, Region()); 4129 SetupPendingTreeWithFixedTileSize(pending_pile, tile_size, Region());
4123 4130
4124 // No occlusion. 4131 // No occlusion.
4125 int occluded_tile_count = 0; 4132 int occluded_tile_count = 0;
4126 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4133 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4127 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4134 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
4128 tiling->UpdateAllTilePrioritiesForTesting(); 4135 auto prioritized_tiles =
4136 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4129 4137
4130 occluded_tile_count = 0; 4138 occluded_tile_count = 0;
4131 for (PictureLayerTiling::CoverageIterator iter( 4139 for (PictureLayerTiling::CoverageIterator iter(
4132 tiling, 4140 tiling,
4133 pending_layer_->contents_scale_x(), 4141 pending_layer_->contents_scale_x(),
4134 gfx::Rect(layer_bounds)); 4142 gfx::Rect(layer_bounds));
4135 iter; 4143 iter;
4136 ++iter) { 4144 ++iter) {
4137 if (!*iter) 4145 if (!*iter)
4138 continue; 4146 continue;
4139 const Tile* tile = *iter; 4147 const Tile* tile = *iter;
4140 4148
4141 // Fully occluded tiles are not required for activation. 4149 // Fully occluded tiles are not required for activation.
4142 if (tile->is_occluded()) { 4150 if (prioritized_tiles[tile].is_occluded()) {
4143 EXPECT_FALSE(tile->required_for_activation()); 4151 EXPECT_FALSE(tile->required_for_activation());
4144 occluded_tile_count++; 4152 occluded_tile_count++;
4145 } 4153 }
4146 } 4154 }
4147 EXPECT_EQ(occluded_tile_count, 0); 4155 EXPECT_EQ(occluded_tile_count, 0);
4148 } 4156 }
4149 4157
4150 // Partial occlusion. 4158 // Partial occlusion.
4151 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1)); 4159 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1));
4152 LayerImpl* layer1 = pending_layer_->children()[0]; 4160 LayerImpl* layer1 = pending_layer_->children()[0];
4153 layer1->SetBounds(layer_bounds); 4161 layer1->SetBounds(layer_bounds);
4154 layer1->SetContentBounds(layer_bounds); 4162 layer1->SetContentBounds(layer_bounds);
4155 layer1->SetDrawsContent(true); 4163 layer1->SetDrawsContent(true);
4156 layer1->SetContentsOpaque(true); 4164 layer1->SetContentsOpaque(true);
4157 layer1->SetPosition(occluding_layer_position); 4165 layer1->SetPosition(occluding_layer_position);
4158 4166
4159 time_ticks += base::TimeDelta::FromMilliseconds(200); 4167 time_ticks += base::TimeDelta::FromMilliseconds(200);
4160 host_impl_.SetCurrentBeginFrameArgs( 4168 host_impl_.SetCurrentBeginFrameArgs(
4161 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 4169 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
4162 bool update_lcd_text = false; 4170 bool update_lcd_text = false;
4163 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 4171 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
4164 4172
4165 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4173 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4166 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4174 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
4167 tiling->UpdateAllTilePrioritiesForTesting(); 4175 auto prioritized_tiles =
4176 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4168 4177
4169 occluded_tile_count = 0; 4178 occluded_tile_count = 0;
4170 for (PictureLayerTiling::CoverageIterator iter( 4179 for (PictureLayerTiling::CoverageIterator iter(
4171 tiling, 4180 tiling,
4172 pending_layer_->contents_scale_x(), 4181 pending_layer_->contents_scale_x(),
4173 gfx::Rect(layer_bounds)); 4182 gfx::Rect(layer_bounds));
4174 iter; 4183 iter;
4175 ++iter) { 4184 ++iter) {
4176 if (!*iter) 4185 if (!*iter)
4177 continue; 4186 continue;
4178 const Tile* tile = *iter; 4187 const Tile* tile = *iter;
4179 4188
4180 if (tile->is_occluded()) { 4189 if (prioritized_tiles[tile].is_occluded()) {
4181 EXPECT_FALSE(tile->required_for_activation()); 4190 EXPECT_FALSE(tile->required_for_activation());
4182 occluded_tile_count++; 4191 occluded_tile_count++;
4183 } 4192 }
4184 } 4193 }
4185 switch (i) { 4194 switch (i) {
4186 case 0: 4195 case 0:
4187 EXPECT_EQ(occluded_tile_count, 5); 4196 EXPECT_EQ(occluded_tile_count, 5);
4188 break; 4197 break;
4189 case 1: 4198 case 1:
4190 EXPECT_EQ(occluded_tile_count, 2); 4199 EXPECT_EQ(occluded_tile_count, 2);
4191 break; 4200 break;
4192 default: 4201 default:
4193 NOTREACHED(); 4202 NOTREACHED();
4194 } 4203 }
4195 } 4204 }
4196 4205
4197 // Full occlusion. 4206 // Full occlusion.
4198 layer1->SetPosition(gfx::PointF(0, 0)); 4207 layer1->SetPosition(gfx::PointF(0, 0));
4199 4208
4200 time_ticks += base::TimeDelta::FromMilliseconds(200); 4209 time_ticks += base::TimeDelta::FromMilliseconds(200);
4201 host_impl_.SetCurrentBeginFrameArgs( 4210 host_impl_.SetCurrentBeginFrameArgs(
4202 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 4211 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
4203 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 4212 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
4204 4213
4205 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4214 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4206 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4215 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
4207 tiling->UpdateAllTilePrioritiesForTesting(); 4216 auto prioritized_tiles =
4217 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4208 4218
4209 occluded_tile_count = 0; 4219 occluded_tile_count = 0;
4210 for (PictureLayerTiling::CoverageIterator iter( 4220 for (PictureLayerTiling::CoverageIterator iter(
4211 tiling, 4221 tiling,
4212 pending_layer_->contents_scale_x(), 4222 pending_layer_->contents_scale_x(),
4213 gfx::Rect(layer_bounds)); 4223 gfx::Rect(layer_bounds));
4214 iter; 4224 iter;
4215 ++iter) { 4225 ++iter) {
4216 if (!*iter) 4226 if (!*iter)
4217 continue; 4227 continue;
4218 const Tile* tile = *iter; 4228 const Tile* tile = *iter;
4219 4229
4220 if (tile->is_occluded()) { 4230 if (prioritized_tiles[tile].is_occluded()) {
4221 EXPECT_FALSE(tile->required_for_activation()); 4231 EXPECT_FALSE(tile->required_for_activation());
4222 occluded_tile_count++; 4232 occluded_tile_count++;
4223 } 4233 }
4224 } 4234 }
4225 switch (i) { 4235 switch (i) {
4226 case 0: 4236 case 0:
4227 EXPECT_EQ(25, occluded_tile_count); 4237 EXPECT_EQ(25, occluded_tile_count);
4228 break; 4238 break;
4229 case 1: 4239 case 1:
4230 EXPECT_EQ(4, occluded_tile_count); 4240 EXPECT_EQ(4, occluded_tile_count);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4275 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 4285 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
4276 // UpdateDrawProperties with the occluding layer. 4286 // UpdateDrawProperties with the occluding layer.
4277 bool update_lcd_text = false; 4287 bool update_lcd_text = false;
4278 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); 4288 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
4279 4289
4280 EXPECT_EQ(5u, pending_layer_->num_tilings()); 4290 EXPECT_EQ(5u, pending_layer_->num_tilings());
4281 4291
4282 int occluded_tile_count = 0; 4292 int occluded_tile_count = 0;
4283 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4293 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4284 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4294 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
4285 tiling->UpdateAllTilePrioritiesForTesting(); 4295 auto prioritized_tiles =
4296 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4286 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); 4297 std::vector<Tile*> tiles = tiling->AllTilesForTesting();
4287 4298
4288 occluded_tile_count = 0; 4299 occluded_tile_count = 0;
4289 for (size_t j = 0; j < tiles.size(); ++j) { 4300 for (size_t j = 0; j < tiles.size(); ++j) {
4290 if (tiles[j]->is_occluded()) { 4301 if (prioritized_tiles[tiles[j]].is_occluded()) {
4291 gfx::Rect scaled_content_rect = ScaleToEnclosingRect( 4302 gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
4292 tiles[j]->content_rect(), 1.0f / tiles[j]->contents_scale()); 4303 tiles[j]->content_rect(), 1.0f / tiles[j]->contents_scale());
4293 EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x()); 4304 EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x());
4294 occluded_tile_count++; 4305 occluded_tile_count++;
4295 } 4306 }
4296 } 4307 }
4297 4308
4298 switch (i) { 4309 switch (i) {
4299 case 0: 4310 case 0:
4300 EXPECT_EQ(occluded_tile_count, 30); 4311 EXPECT_EQ(occluded_tile_count, 30);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4336 layer1->SetBounds(layer_bounds); 4347 layer1->SetBounds(layer_bounds);
4337 layer1->SetContentBounds(layer_bounds); 4348 layer1->SetContentBounds(layer_bounds);
4338 layer1->SetDrawsContent(true); 4349 layer1->SetDrawsContent(true);
4339 layer1->SetContentsOpaque(true); 4350 layer1->SetContentsOpaque(true);
4340 layer1->SetPosition(occluding_layer_position); 4351 layer1->SetPosition(occluding_layer_position);
4341 4352
4342 ActivateTree(); 4353 ActivateTree();
4343 4354
4344 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { 4355 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
4345 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); 4356 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
4346 tiling->UpdateAllTilePrioritiesForTesting(); 4357 auto prioritized_tiles =
4358 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4347 4359
4348 for ( 4360 for (
4349 PictureLayerTiling::CoverageIterator iter( 4361 PictureLayerTiling::CoverageIterator iter(
4350 tiling, active_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); 4362 tiling, active_layer_->contents_scale_x(), gfx::Rect(layer_bounds));
4351 iter; ++iter) { 4363 iter; ++iter) {
4352 if (!*iter) 4364 if (!*iter)
4353 continue; 4365 continue;
4354 const Tile* tile = *iter; 4366 const Tile* tile = *iter;
4355 4367
4356 gfx::Rect scaled_content_rect = ScaleToEnclosingRect( 4368 gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
4357 tile->content_rect(), 1.0f / tile->contents_scale()); 4369 tile->content_rect(), 1.0f / tile->contents_scale());
4358 // Tiles are occluded on the active tree iff they lie beneath the 4370 // Tiles are occluded on the active tree iff they lie beneath the
4359 // occluding layer. 4371 // occluding layer.
4360 EXPECT_EQ(tile->is_occluded(), 4372 EXPECT_EQ(prioritized_tiles[tile].is_occluded(),
4361 scaled_content_rect.x() >= occluding_layer_position.x()); 4373 scaled_content_rect.x() >= occluding_layer_position.x());
4362 } 4374 }
4363 } 4375 }
4364 4376
4365 // Partially invalidate the pending layer. 4377 // Partially invalidate the pending layer.
4366 SetupPendingTreeWithInvalidation(pending_pile, invalidation_rect); 4378 SetupPendingTreeWithInvalidation(pending_pile, invalidation_rect);
4367 4379
4368 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { 4380 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
4369 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); 4381 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
4370 tiling->UpdateAllTilePrioritiesForTesting(); 4382 auto prioritized_tiles =
4383 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4371 4384
4372 for (PictureLayerTiling::CoverageIterator iter( 4385 for (PictureLayerTiling::CoverageIterator iter(
4373 tiling, 4386 tiling,
4374 active_layer_->contents_scale_x(), 4387 active_layer_->contents_scale_x(),
4375 gfx::Rect(layer_bounds)); 4388 gfx::Rect(layer_bounds));
4376 iter; 4389 iter;
4377 ++iter) { 4390 ++iter) {
4378 if (!*iter) 4391 if (!*iter)
4379 continue; 4392 continue;
4380 const Tile* tile = *iter; 4393 const Tile* tile = *iter;
4381 4394
4382 // All tiles are unoccluded, because the pending tree has no occlusion. 4395 // All tiles are unoccluded, because the pending tree has no occlusion.
4383 EXPECT_FALSE(tile->is_occluded()); 4396 EXPECT_FALSE(prioritized_tiles[tile].is_occluded());
4384 EXPECT_FALSE(tile->is_occluded());
4385 4397
4386 Tile* twin_tile = active_layer_->GetPendingOrActiveTwinTiling(tiling) 4398 Tile* twin_tile = active_layer_->GetPendingOrActiveTwinTiling(tiling)
4387 ->TileAt(iter.i(), iter.j()); 4399 ->TileAt(iter.i(), iter.j());
4388 gfx::Rect scaled_content_rect = ScaleToEnclosingRect( 4400 gfx::Rect scaled_content_rect = ScaleToEnclosingRect(
4389 tile->content_rect(), 1.0f / tile->contents_scale()); 4401 tile->content_rect(), 1.0f / tile->contents_scale());
4390 4402
4391 if (scaled_content_rect.Intersects(invalidation_rect)) { 4403 if (scaled_content_rect.Intersects(invalidation_rect)) {
4392 // Tiles inside the invalidation rect exist on both trees. 4404 // Tiles inside the invalidation rect exist on both trees.
4393 EXPECT_TRUE(tile); 4405 EXPECT_TRUE(tile);
4394 EXPECT_TRUE(twin_tile); 4406 EXPECT_TRUE(twin_tile);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
4462 4474
4463 // The expected number of occluded tiles on each of the 2 tilings for each of 4475 // The expected number of occluded tiles on each of the 2 tilings for each of
4464 // the 3 tree priorities. 4476 // the 3 tree priorities.
4465 size_t expected_occluded_tile_count_on_pending[] = {4u, 0u}; 4477 size_t expected_occluded_tile_count_on_pending[] = {4u, 0u};
4466 size_t expected_occluded_tile_count_on_active[] = {12u, 1u}; 4478 size_t expected_occluded_tile_count_on_active[] = {12u, 1u};
4467 size_t total_expected_occluded_tile_count_on_trees[] = {13u, 4u}; 4479 size_t total_expected_occluded_tile_count_on_trees[] = {13u, 4u};
4468 4480
4469 // Verify number of occluded tiles on the pending layer for each tiling. 4481 // Verify number of occluded tiles on the pending layer for each tiling.
4470 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4482 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4471 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4483 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
4472 tiling->UpdateAllTilePrioritiesForTesting(); 4484 auto prioritized_tiles =
4485 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4473 4486
4474 size_t occluded_tile_count_on_pending = 0u; 4487 size_t occluded_tile_count_on_pending = 0u;
4475 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, 4488 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f,
4476 gfx::Rect(layer_bounds)); 4489 gfx::Rect(layer_bounds));
4477 iter; ++iter) { 4490 iter; ++iter) {
4478 Tile* tile = *iter; 4491 Tile* tile = *iter;
4479 4492
4480 if (invalidation_rect.Intersects(iter.geometry_rect())) 4493 if (invalidation_rect.Intersects(iter.geometry_rect()))
4481 EXPECT_TRUE(tile); 4494 EXPECT_TRUE(tile);
4482 else 4495 else
4483 EXPECT_FALSE(tile); 4496 EXPECT_FALSE(tile);
4484 4497
4485 if (!tile) 4498 if (!tile)
4486 continue; 4499 continue;
4487 if (tile->is_occluded()) 4500 if (prioritized_tiles[tile].is_occluded())
4488 occluded_tile_count_on_pending++; 4501 occluded_tile_count_on_pending++;
4489 } 4502 }
4490 EXPECT_EQ(expected_occluded_tile_count_on_pending[i], 4503 EXPECT_EQ(expected_occluded_tile_count_on_pending[i],
4491 occluded_tile_count_on_pending) 4504 occluded_tile_count_on_pending)
4492 << tiling->contents_scale(); 4505 << tiling->contents_scale();
4493 } 4506 }
4494 4507
4495 // Verify number of occluded tiles on the active layer for each tiling. 4508 // Verify number of occluded tiles on the active layer for each tiling.
4496 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { 4509 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
4497 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); 4510 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
4498 tiling->UpdateAllTilePrioritiesForTesting(); 4511 auto prioritized_tiles =
4512 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
4499 4513
4500 size_t occluded_tile_count_on_active = 0u; 4514 size_t occluded_tile_count_on_active = 0u;
4501 for (PictureLayerTiling::CoverageIterator iter( 4515 for (PictureLayerTiling::CoverageIterator iter(
4502 tiling, 4516 tiling,
4503 pending_layer_->contents_scale_x(), 4517 pending_layer_->contents_scale_x(),
4504 gfx::Rect(layer_bounds)); 4518 gfx::Rect(layer_bounds));
4505 iter; 4519 iter;
4506 ++iter) { 4520 ++iter) {
4507 Tile* tile = *iter; 4521 Tile* tile = *iter;
4508 4522
4509 if (!tile) 4523 if (!tile)
4510 continue; 4524 continue;
4511 if (tile->is_occluded()) 4525 if (prioritized_tiles[tile].is_occluded())
4512 occluded_tile_count_on_active++; 4526 occluded_tile_count_on_active++;
4513 } 4527 }
4514 EXPECT_EQ(expected_occluded_tile_count_on_active[i], 4528 EXPECT_EQ(expected_occluded_tile_count_on_active[i],
4515 occluded_tile_count_on_active) 4529 occluded_tile_count_on_active)
4516 << i; 4530 << i;
4517 } 4531 }
4518 4532
4519 std::vector<Tile*> all_tiles; 4533 std::vector<Tile*> all_tiles;
4520 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 4534 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
4521 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 4535 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
4751 gfx::Rect viewport = gfx::Rect(0, 0, 100, 100); 4765 gfx::Rect viewport = gfx::Rect(0, 0, 100, 100);
4752 gfx::Transform transform; 4766 gfx::Transform transform;
4753 4767
4754 host_impl_.SetRequiresHighResToDraw(); 4768 host_impl_.SetRequiresHighResToDraw();
4755 4769
4756 // Update tiles. 4770 // Update tiles.
4757 pending_layer_->draw_properties().visible_content_rect = viewport; 4771 pending_layer_->draw_properties().visible_content_rect = viewport;
4758 pending_layer_->draw_properties().screen_space_transform = transform; 4772 pending_layer_->draw_properties().screen_space_transform = transform;
4759 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, 4773 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
4760 false); 4774 false);
4761 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 4775 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
4762 4776
4763 // Ensure we can't activate. 4777 // Ensure we can't activate.
4764 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); 4778 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
4765 4779
4766 // Now in the same frame, move the viewport (this can happen during 4780 // Now in the same frame, move the viewport (this can happen during
4767 // animation). 4781 // animation).
4768 viewport = gfx::Rect(0, 2000, 100, 100); 4782 viewport = gfx::Rect(0, 2000, 100, 100);
4769 4783
4770 // Update tiles. 4784 // Update tiles.
4771 pending_layer_->draw_properties().visible_content_rect = viewport; 4785 pending_layer_->draw_properties().visible_content_rect = viewport;
4772 pending_layer_->draw_properties().screen_space_transform = transform; 4786 pending_layer_->draw_properties().screen_space_transform = transform;
4773 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, 4787 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
4774 false); 4788 false);
4775 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); 4789 pending_layer_->HighResTiling()->UpdateAllRequiredStateForTesting();
4776 4790
4777 // Make sure all viewport tiles (viewport from the tiling) are ready to draw. 4791 // Make sure all viewport tiles (viewport from the tiling) are ready to draw.
4778 std::vector<Tile*> tiles; 4792 std::vector<Tile*> tiles;
4779 for (PictureLayerTiling::CoverageIterator iter( 4793 for (PictureLayerTiling::CoverageIterator iter(
4780 pending_layer_->HighResTiling(), 4794 pending_layer_->HighResTiling(),
4781 1.f, 4795 1.f,
4782 pending_layer_->HighResTiling()->GetCurrentVisibleRectForTesting()); 4796 pending_layer_->HighResTiling()->GetCurrentVisibleRectForTesting());
4783 iter; 4797 iter;
4784 ++iter) { 4798 ++iter) {
4785 if (*iter) 4799 if (*iter)
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
5060 result = layer->CalculateTileSize(gfx::Size(447, 400)); 5074 result = layer->CalculateTileSize(gfx::Size(447, 400));
5061 EXPECT_EQ(result.width(), 448); 5075 EXPECT_EQ(result.width(), 448);
5062 EXPECT_EQ(result.height(), 448); 5076 EXPECT_EQ(result.height(), 448);
5063 result = layer->CalculateTileSize(gfx::Size(500, 499)); 5077 result = layer->CalculateTileSize(gfx::Size(500, 499));
5064 EXPECT_EQ(result.width(), 512); 5078 EXPECT_EQ(result.width(), 512);
5065 EXPECT_EQ(result.height(), 500 + 2); 5079 EXPECT_EQ(result.height(), 500 + 2);
5066 } 5080 }
5067 5081
5068 } // namespace 5082 } // namespace
5069 } // namespace cc 5083 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/resources/eviction_tile_priority_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698