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

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

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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/layers/picture_layer_unittest.cc » ('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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 active_layer_->AddTiling(2.3f); 127 active_layer_->AddTiling(2.3f);
128 active_layer_->AddTiling(1.0f); 128 active_layer_->AddTiling(1.0f);
129 active_layer_->AddTiling(0.5f); 129 active_layer_->AddTiling(0.5f);
130 for (size_t i = 0; i < active_layer_->tilings()->num_tilings(); ++i) 130 for (size_t i = 0; i < active_layer_->tilings()->num_tilings(); ++i)
131 active_layer_->tilings()->tiling_at(i)->CreateAllTilesForTesting(); 131 active_layer_->tilings()->tiling_at(i)->CreateAllTilesForTesting();
132 pending_layer_->set_invalidation(invalidation); 132 pending_layer_->set_invalidation(invalidation);
133 for (size_t i = 0; i < pending_layer_->tilings()->num_tilings(); ++i) 133 for (size_t i = 0; i < pending_layer_->tilings()->num_tilings(); ++i)
134 pending_layer_->tilings()->tiling_at(i)->CreateAllTilesForTesting(); 134 pending_layer_->tilings()->tiling_at(i)->CreateAllTilesForTesting();
135 } 135 }
136 136
137 void SetupPendingTree(scoped_refptr<PicturePileImpl> pile) { 137 void SetupPendingTree(scoped_refptr<RasterSource> raster_source) {
138 host_impl_.CreatePendingTree(); 138 host_impl_.CreatePendingTree();
139 host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f); 139 host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f);
140 LayerTreeImpl* pending_tree = host_impl_.pending_tree(); 140 LayerTreeImpl* pending_tree = host_impl_.pending_tree();
141 141
142 // Steal from the recycled tree. 142 // Steal from the recycled tree.
143 scoped_ptr<LayerImpl> old_pending_root = pending_tree->DetachLayerTree(); 143 scoped_ptr<LayerImpl> old_pending_root = pending_tree->DetachLayerTree();
144 DCHECK_IMPLIES(old_pending_root, old_pending_root->id() == id_); 144 DCHECK_IMPLIES(old_pending_root, old_pending_root->id() == id_);
145 145
146 scoped_ptr<FakePictureLayerImpl> pending_layer; 146 scoped_ptr<FakePictureLayerImpl> pending_layer;
147 if (old_pending_root) { 147 if (old_pending_root) {
148 pending_layer.reset( 148 pending_layer.reset(
149 static_cast<FakePictureLayerImpl*>(old_pending_root.release())); 149 static_cast<FakePictureLayerImpl*>(old_pending_root.release()));
150 pending_layer->SetPile(pile); 150 pending_layer->SetRasterSource(raster_source);
151 } else { 151 } else {
152 pending_layer = 152 pending_layer = FakePictureLayerImpl::CreateWithRasterSource(
153 FakePictureLayerImpl::CreateWithPile(pending_tree, id_, pile); 153 pending_tree, id_, raster_source);
154 pending_layer->SetDrawsContent(true); 154 pending_layer->SetDrawsContent(true);
155 } 155 }
156 // The bounds() just mirror the pile size. 156 // The bounds() just mirror the pile size.
157 pending_layer->SetBounds(pending_layer->pile()->tiling_size()); 157 pending_layer->SetBounds(pending_layer->raster_source()->GetSize());
158 pending_tree->SetRootLayer(pending_layer.Pass()); 158 pending_tree->SetRootLayer(pending_layer.Pass());
159 159
160 pending_layer_ = static_cast<FakePictureLayerImpl*>( 160 pending_layer_ = static_cast<FakePictureLayerImpl*>(
161 host_impl_.pending_tree()->LayerById(id_)); 161 host_impl_.pending_tree()->LayerById(id_));
162 pending_layer_->DoPostCommitInitializationIfNeeded(); 162 pending_layer_->DoPostCommitInitializationIfNeeded();
163 } 163 }
164 164
165 void SetupDrawPropertiesAndUpdateTiles(FakePictureLayerImpl* layer, 165 void SetupDrawPropertiesAndUpdateTiles(FakePictureLayerImpl* layer,
166 float ideal_contents_scale, 166 float ideal_contents_scale,
167 float device_scale_factor, 167 float device_scale_factor,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 active_pile->add_draw_rect(rect); 261 active_pile->add_draw_rect(rect);
262 rects.push_back(SkRect::MakeXYWH(rect.x(), rect.y(), 1, 1)); 262 rects.push_back(SkRect::MakeXYWH(rect.x(), rect.y(), 1, 1));
263 } 263 }
264 // Force re-record with newly injected content 264 // Force re-record with newly injected content
265 active_pile->RemoveRecordingAt(0, 0); 265 active_pile->RemoveRecordingAt(0, 0);
266 active_pile->AddRecordingAt(0, 0); 266 active_pile->AddRecordingAt(0, 0);
267 267
268 std::vector<SkRect>::const_iterator rect_iter = rects.begin(); 268 std::vector<SkRect>::const_iterator rect_iter = rects.begin();
269 for (tile_iter = tiles.begin(); tile_iter < tiles.end(); tile_iter++) { 269 for (tile_iter = tiles.begin(); tile_iter < tiles.end(); tile_iter++) {
270 MockCanvas mock_canvas(1000, 1000); 270 MockCanvas mock_canvas(1000, 1000);
271 active_pile->RasterDirect(&mock_canvas, (*tile_iter)->content_rect(), 271 active_pile->PlaybackToSharedCanvas(&mock_canvas,
272 1.0f); 272 (*tile_iter)->content_rect(), 1.0f);
273 273
274 // This test verifies that when drawing the contents of a specific tile 274 // This test verifies that when drawing the contents of a specific tile
275 // at content scale 1.0, the playback canvas never receives content from 275 // at content scale 1.0, the playback canvas never receives content from
276 // neighboring tiles which indicates that the tile grid embedded in 276 // neighboring tiles which indicates that the tile grid embedded in
277 // SkPicture is perfectly aligned with the compositor's tiles. 277 // SkPicture is perfectly aligned with the compositor's tiles.
278 EXPECT_EQ(1u, mock_canvas.rects_.size()); 278 EXPECT_EQ(1u, mock_canvas.rects_.size());
279 EXPECT_EQ(*rect_iter, mock_canvas.rects_[0]); 279 EXPECT_EQ(*rect_iter, mock_canvas.rects_[0]);
280 rect_iter++; 280 rect_iter++;
281 } 281 }
282 } 282 }
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 const PictureLayerTiling* tiling = tilings->tiling_at(i); 651 const PictureLayerTiling* tiling = tilings->tiling_at(i);
652 652
653 for (PictureLayerTiling::CoverageIterator iter( 653 for (PictureLayerTiling::CoverageIterator iter(
654 tiling, 654 tiling,
655 tiling->contents_scale(), 655 tiling->contents_scale(),
656 gfx::Rect(tiling->tiling_size())); 656 gfx::Rect(tiling->tiling_size()));
657 iter; 657 iter;
658 ++iter) { 658 ++iter) {
659 EXPECT_FALSE(iter.full_tile_geometry_rect().IsEmpty()); 659 EXPECT_FALSE(iter.full_tile_geometry_rect().IsEmpty());
660 // Ensure there is a recording for this tile. 660 // Ensure there is a recording for this tile.
661 bool in_pending = pending_pile->CanRaster(tiling->contents_scale(), 661 bool in_pending = pending_pile->CoversRect(iter.full_tile_geometry_rect(),
662 iter.full_tile_geometry_rect()); 662 tiling->contents_scale());
663 bool in_active = active_pile->CanRaster(tiling->contents_scale(), 663 bool in_active = active_pile->CoversRect(iter.full_tile_geometry_rect(),
664 iter.full_tile_geometry_rect()); 664 tiling->contents_scale());
665 665
666 if (in_pending && !in_active) 666 if (in_pending && !in_active)
667 EXPECT_EQ(pending_pile.get(), iter->raster_source()); 667 EXPECT_EQ(pending_pile.get(), iter->raster_source());
668 else if (in_active) 668 else if (in_active)
669 EXPECT_EQ(active_pile.get(), iter->raster_source()); 669 EXPECT_EQ(active_pile.get(), iter->raster_source());
670 else 670 else
671 EXPECT_FALSE(*iter); 671 EXPECT_FALSE(*iter);
672 } 672 }
673 } 673 }
674 } 674 }
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
1125 device_scale, 1125 device_scale,
1126 page_scale, 1126 page_scale,
1127 maximum_animation_scale, 1127 maximum_animation_scale,
1128 animating_transform); 1128 animating_transform);
1129 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); 1129 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
1130 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 2.f * low_res_factor); 1130 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 2.f * low_res_factor);
1131 EXPECT_BOTH_EQ(num_tilings(), 4u); 1131 EXPECT_BOTH_EQ(num_tilings(), 4u);
1132 } 1132 }
1133 1133
1134 TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { 1134 TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) {
1135 gfx::Size tile_size(host_impl_.settings().default_tile_size); 1135 gfx::Size layer_bounds(host_impl_.settings().default_tile_size);
1136 SetupDefaultTrees(tile_size); 1136 gfx::Size tile_size(100, 100);
1137
1138 scoped_refptr<FakePicturePileImpl> pending_pile =
1139 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1140 scoped_refptr<FakePicturePileImpl> active_pile =
1141 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1142
1143 SetupTrees(pending_pile, active_pile);
1137 1144
1138 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; 1145 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
1139 float device_scale = 1.f; 1146 float device_scale = 1.f;
1140 float page_scale = 1.f; 1147 float page_scale = 1.f;
1141 float maximum_animation_scale = 1.f; 1148 float maximum_animation_scale = 1.f;
1142 bool animating_transform = false; 1149 bool animating_transform = false;
1143 1150
1144 // Contents exactly fit on one tile at scale 1, no low res. 1151 // Contents exactly fit on one tile at scale 1, no low res.
1145 float contents_scale = 1.f; 1152 float contents_scale = 1.f;
1146 SetContentsScaleOnBothLayers(contents_scale, 1153 SetContentsScaleOnBothLayers(contents_scale,
(...skipping 27 matching lines...) Expand all
1174 maximum_animation_scale, 1181 maximum_animation_scale,
1175 animating_transform); 1182 animating_transform);
1176 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); 1183 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
1177 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 1184 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(),
1178 contents_scale * low_res_factor); 1185 contents_scale * low_res_factor);
1179 EXPECT_BOTH_EQ(num_tilings(), 2u); 1186 EXPECT_BOTH_EQ(num_tilings(), 2u);
1180 1187
1181 ResetTilingsAndRasterScales(); 1188 ResetTilingsAndRasterScales();
1182 1189
1183 // Mask layers dont create low res since they always fit on one tile. 1190 // Mask layers dont create low res since they always fit on one tile.
1184 pending_layer_->pile()->set_is_mask(true); 1191 pending_pile->SetIsMask(true);
1185 active_layer_->pile()->set_is_mask(true); 1192 active_pile->SetIsMask(true);
1186 SetContentsScaleOnBothLayers(contents_scale, 1193 SetContentsScaleOnBothLayers(contents_scale,
1187 device_scale, 1194 device_scale,
1188 page_scale, 1195 page_scale,
1189 maximum_animation_scale, 1196 maximum_animation_scale,
1190 animating_transform); 1197 animating_transform);
1191 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); 1198 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
1192 EXPECT_BOTH_EQ(num_tilings(), 1u); 1199 EXPECT_BOTH_EQ(num_tilings(), 1u);
1193 } 1200 }
1194 1201
1195 TEST_F(PictureLayerImplTest, HugeMasksDontGetTiles) { 1202 TEST_F(PictureLayerImplTest, HugeMasksDontGetTiles) {
1196 gfx::Size tile_size(100, 100); 1203 gfx::Size tile_size(100, 100);
1197 1204
1198 scoped_refptr<FakePicturePileImpl> valid_pile = 1205 scoped_refptr<FakePicturePileImpl> valid_pile =
1199 FakePicturePileImpl::CreateFilledPile(tile_size, gfx::Size(1000, 1000)); 1206 FakePicturePileImpl::CreateFilledPile(tile_size, gfx::Size(1000, 1000));
1200 valid_pile->set_is_mask(true); 1207 valid_pile->SetIsMask(true);
1201 SetupPendingTree(valid_pile); 1208 SetupPendingTree(valid_pile);
1202 1209
1203 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); 1210 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false);
1204 EXPECT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale()); 1211 EXPECT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale());
1205 EXPECT_EQ(1u, pending_layer_->num_tilings()); 1212 EXPECT_EQ(1u, pending_layer_->num_tilings());
1206 1213
1207 pending_layer_->HighResTiling()->CreateAllTilesForTesting(); 1214 pending_layer_->HighResTiling()->CreateAllTilesForTesting();
1208 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting( 1215 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(
1209 pending_layer_->HighResTiling()->AllTilesForTesting()); 1216 pending_layer_->HighResTiling()->AllTilesForTesting());
1210 1217
1211 ActivateTree(); 1218 ActivateTree();
1212 1219
1213 // Mask layers have a tiling with a single tile in it. 1220 // Mask layers have a tiling with a single tile in it.
1214 EXPECT_EQ(1u, active_layer_->HighResTiling()->AllTilesForTesting().size()); 1221 EXPECT_EQ(1u, active_layer_->HighResTiling()->AllTilesForTesting().size());
1215 // The mask resource exists. 1222 // The mask resource exists.
1216 ResourceProvider::ResourceId mask_resource_id; 1223 ResourceProvider::ResourceId mask_resource_id;
1217 gfx::Size mask_texture_size; 1224 gfx::Size mask_texture_size;
1218 active_layer_->GetContentsResourceId(&mask_resource_id, &mask_texture_size); 1225 active_layer_->GetContentsResourceId(&mask_resource_id, &mask_texture_size);
1219 EXPECT_NE(0u, mask_resource_id); 1226 EXPECT_NE(0u, mask_resource_id);
1220 EXPECT_EQ(mask_texture_size, active_layer_->bounds()); 1227 EXPECT_EQ(mask_texture_size, active_layer_->bounds());
1221 1228
1222 // Resize larger than the max texture size. 1229 // Resize larger than the max texture size.
1223 int max_texture_size = host_impl_.GetRendererCapabilities().max_texture_size; 1230 int max_texture_size = host_impl_.GetRendererCapabilities().max_texture_size;
1224 scoped_refptr<FakePicturePileImpl> huge_pile = 1231 scoped_refptr<FakePicturePileImpl> huge_pile =
1225 FakePicturePileImpl::CreateFilledPile( 1232 FakePicturePileImpl::CreateFilledPile(
1226 tile_size, gfx::Size(max_texture_size + 1, 10)); 1233 tile_size, gfx::Size(max_texture_size + 1, 10));
1227 huge_pile->set_is_mask(true); 1234 huge_pile->SetIsMask(true);
1228 SetupPendingTree(huge_pile); 1235 SetupPendingTree(huge_pile);
1229 1236
1230 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); 1237 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false);
1231 EXPECT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale()); 1238 EXPECT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale());
1232 EXPECT_EQ(1u, pending_layer_->num_tilings()); 1239 EXPECT_EQ(1u, pending_layer_->num_tilings());
1233 1240
1234 pending_layer_->HighResTiling()->CreateAllTilesForTesting(); 1241 pending_layer_->HighResTiling()->CreateAllTilesForTesting();
1235 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting( 1242 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(
1236 pending_layer_->HighResTiling()->AllTilesForTesting()); 1243 pending_layer_->HighResTiling()->AllTilesForTesting());
1237 1244
1238 ActivateTree(); 1245 ActivateTree();
1239 1246
1240 // Mask layers have a tiling, but there should be no tiles in it. 1247 // Mask layers have a tiling, but there should be no tiles in it.
1241 EXPECT_EQ(0u, active_layer_->HighResTiling()->AllTilesForTesting().size()); 1248 EXPECT_EQ(0u, active_layer_->HighResTiling()->AllTilesForTesting().size());
1242 // The mask resource is empty. 1249 // The mask resource is empty.
1243 active_layer_->GetContentsResourceId(&mask_resource_id, &mask_texture_size); 1250 active_layer_->GetContentsResourceId(&mask_resource_id, &mask_texture_size);
1244 EXPECT_EQ(0u, mask_resource_id); 1251 EXPECT_EQ(0u, mask_resource_id);
1245 } 1252 }
1246 1253
1247 TEST_F(PictureLayerImplTest, ScaledMaskLayer) { 1254 TEST_F(PictureLayerImplTest, ScaledMaskLayer) {
1248 gfx::Size tile_size(100, 100); 1255 gfx::Size tile_size(100, 100);
1249 1256
1250 scoped_refptr<FakePicturePileImpl> valid_pile = 1257 scoped_refptr<FakePicturePileImpl> valid_pile =
1251 FakePicturePileImpl::CreateFilledPile(tile_size, gfx::Size(1000, 1000)); 1258 FakePicturePileImpl::CreateFilledPile(tile_size, gfx::Size(1000, 1000));
1252 valid_pile->set_is_mask(true); 1259 valid_pile->SetIsMask(true);
1253 SetupPendingTree(valid_pile); 1260 SetupPendingTree(valid_pile);
1254 1261
1255 float ideal_contents_scale = 1.3f; 1262 float ideal_contents_scale = 1.3f;
1256 SetupDrawPropertiesAndUpdateTiles( 1263 SetupDrawPropertiesAndUpdateTiles(
1257 pending_layer_, ideal_contents_scale, 1.f, 1.f, 1.f, false); 1264 pending_layer_, ideal_contents_scale, 1.f, 1.f, 1.f, false);
1258 EXPECT_EQ(ideal_contents_scale, 1265 EXPECT_EQ(ideal_contents_scale,
1259 pending_layer_->HighResTiling()->contents_scale()); 1266 pending_layer_->HighResTiling()->contents_scale());
1260 EXPECT_EQ(1u, pending_layer_->num_tilings()); 1267 EXPECT_EQ(1u, pending_layer_->num_tilings());
1261 1268
1262 pending_layer_->HighResTiling()->CreateAllTilesForTesting(); 1269 pending_layer_->HighResTiling()->CreateAllTilesForTesting();
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 // Solid color layer should not have tilings. 1499 // Solid color layer should not have tilings.
1493 ASSERT_FALSE(active_layer_->CanHaveTilings()); 1500 ASSERT_FALSE(active_layer_->CanHaveTilings());
1494 1501
1495 // Update properties with solid color pile should not allow tilings at any 1502 // Update properties with solid color pile should not allow tilings at any
1496 // scale. 1503 // scale.
1497 host_impl_.active_tree()->UpdateDrawProperties(); 1504 host_impl_.active_tree()->UpdateDrawProperties();
1498 EXPECT_FALSE(active_layer_->CanHaveTilings()); 1505 EXPECT_FALSE(active_layer_->CanHaveTilings());
1499 EXPECT_EQ(0.f, active_layer_->ideal_contents_scale()); 1506 EXPECT_EQ(0.f, active_layer_->ideal_contents_scale());
1500 1507
1501 // Push non-solid-color pending pile makes active layer can have tilings. 1508 // Push non-solid-color pending pile makes active layer can have tilings.
1502 active_layer_->UpdatePile(pending_pile); 1509 active_layer_->UpdateRasterSource(pending_pile);
1503 ASSERT_TRUE(active_layer_->CanHaveTilings()); 1510 ASSERT_TRUE(active_layer_->CanHaveTilings());
1504 1511
1505 // Update properties with non-solid color pile should allow tilings. 1512 // Update properties with non-solid color pile should allow tilings.
1506 host_impl_.active_tree()->UpdateDrawProperties(); 1513 host_impl_.active_tree()->UpdateDrawProperties();
1507 EXPECT_TRUE(active_layer_->CanHaveTilings()); 1514 EXPECT_TRUE(active_layer_->CanHaveTilings());
1508 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f); 1515 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f);
1509 } 1516 }
1510 1517
1511 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { 1518 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) {
1512 gfx::Size tile_size(100, 100); 1519 gfx::Size tile_size(100, 100);
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) { 2044 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) {
2038 gfx::Size tile_size(100, 100); 2045 gfx::Size tile_size(100, 100);
2039 gfx::Size layer_bounds(400, 400); 2046 gfx::Size layer_bounds(400, 400);
2040 scoped_refptr<FakePicturePileImpl> pending_pile = 2047 scoped_refptr<FakePicturePileImpl> pending_pile =
2041 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 2048 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2042 2049
2043 host_impl_.CreatePendingTree(); 2050 host_impl_.CreatePendingTree();
2044 LayerTreeImpl* pending_tree = host_impl_.pending_tree(); 2051 LayerTreeImpl* pending_tree = host_impl_.pending_tree();
2045 2052
2046 scoped_ptr<FakePictureLayerImpl> pending_layer = 2053 scoped_ptr<FakePictureLayerImpl> pending_layer =
2047 FakePictureLayerImpl::CreateWithPile(pending_tree, id_, pending_pile); 2054 FakePictureLayerImpl::CreateWithRasterSource(pending_tree, id_,
2055 pending_pile);
2048 pending_layer->SetDrawsContent(true); 2056 pending_layer->SetDrawsContent(true);
2049 pending_tree->SetRootLayer(pending_layer.Pass()); 2057 pending_tree->SetRootLayer(pending_layer.Pass());
2050 2058
2051 pending_layer_ = static_cast<FakePictureLayerImpl*>( 2059 pending_layer_ = static_cast<FakePictureLayerImpl*>(
2052 host_impl_.pending_tree()->LayerById(id_)); 2060 host_impl_.pending_tree()->LayerById(id_));
2053 2061
2054 // Set some state on the pending layer, make sure it is not clobbered 2062 // Set some state on the pending layer, make sure it is not clobbered
2055 // by a sync from the active layer. This could happen because if the 2063 // by a sync from the active layer. This could happen because if the
2056 // pending layer has not been post-commit initialized it will attempt 2064 // pending layer has not been post-commit initialized it will attempt
2057 // to sync from the active layer. 2065 // to sync from the active layer.
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
3701 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.pending_tree(), 1); 3709 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.pending_tree(), 1);
3702 3710
3703 scoped_ptr<FakePictureLayerImpl> layer_with_mask = 3711 scoped_ptr<FakePictureLayerImpl> layer_with_mask =
3704 FakePictureLayerImpl::Create(host_impl_.pending_tree(), 2); 3712 FakePictureLayerImpl::Create(host_impl_.pending_tree(), 2);
3705 3713
3706 layer_with_mask->SetBounds(bounds); 3714 layer_with_mask->SetBounds(bounds);
3707 layer_with_mask->SetContentBounds(bounds); 3715 layer_with_mask->SetContentBounds(bounds);
3708 3716
3709 scoped_refptr<FakePicturePileImpl> pending_pile = 3717 scoped_refptr<FakePicturePileImpl> pending_pile =
3710 FakePicturePileImpl::CreateFilledPile(tile_size, bounds); 3718 FakePicturePileImpl::CreateFilledPile(tile_size, bounds);
3711 pending_pile->set_is_mask(true); 3719 pending_pile->SetIsMask(true);
3712 scoped_ptr<FakePictureLayerImpl> mask = FakePictureLayerImpl::CreateWithPile( 3720 scoped_ptr<FakePictureLayerImpl> mask =
3713 host_impl_.pending_tree(), 3, pending_pile); 3721 FakePictureLayerImpl::CreateWithRasterSource(host_impl_.pending_tree(), 3,
3722 pending_pile);
3714 3723
3715 mask->SetBounds(bounds); 3724 mask->SetBounds(bounds);
3716 mask->SetContentBounds(bounds); 3725 mask->SetContentBounds(bounds);
3717 mask->SetDrawsContent(true); 3726 mask->SetDrawsContent(true);
3718 3727
3719 FakePictureLayerImpl* pending_mask_content = mask.get(); 3728 FakePictureLayerImpl* pending_mask_content = mask.get();
3720 layer_with_mask->SetMaskLayer(mask.Pass()); 3729 layer_with_mask->SetMaskLayer(mask.Pass());
3721 3730
3722 scoped_ptr<FakePictureLayerImpl> child_of_layer_with_mask = 3731 scoped_ptr<FakePictureLayerImpl> child_of_layer_with_mask =
3723 FakePictureLayerImpl::Create(host_impl_.pending_tree(), 4); 3732 FakePictureLayerImpl::Create(host_impl_.pending_tree(), 4);
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
4478 4487
4479 gfx::Size tile_size(100, 100); 4488 gfx::Size tile_size(100, 100);
4480 gfx::Size layer_bounds(200, 200); 4489 gfx::Size layer_bounds(200, 200);
4481 gfx::Rect layer_rect(layer_bounds); 4490 gfx::Rect layer_rect(layer_bounds);
4482 4491
4483 FakeContentLayerClient client; 4492 FakeContentLayerClient client;
4484 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client); 4493 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client);
4485 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 4494 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
4486 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&host_client); 4495 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&host_client);
4487 host->SetRootLayer(layer); 4496 host->SetRootLayer(layer);
4488 PicturePile* pile = layer->GetPicturePileForTesting(); 4497 RecordingSource* recording_source = layer->GetRecordingSourceForTesting();
4489 4498
4490 host_impl_.SetViewportSize(layer_bounds); 4499 host_impl_.SetViewportSize(layer_bounds);
4491 4500
4492 int frame_number = 0; 4501 int frame_number = 0;
4493 FakeRenderingStatsInstrumentation stats_instrumentation;
4494 4502
4495 client.set_fill_with_nonsolid_color(!test_for_solid); 4503 client.set_fill_with_nonsolid_color(!test_for_solid);
4496 4504
4497 Region invalidation(layer_rect); 4505 Region invalidation(layer_rect);
4498 pile->UpdateAndExpandInvalidation(&client, 4506 recording_source->UpdateAndExpandInvalidation(
4499 &invalidation, 4507 &client, &invalidation, SK_ColorWHITE, false, false, layer_bounds,
4500 SK_ColorWHITE, 4508 layer_rect, frame_number++, Picture::RECORD_NORMALLY);
4501 false,
4502 false,
4503 layer_bounds,
4504 layer_rect,
4505 frame_number++,
4506 Picture::RECORD_NORMALLY,
4507 &stats_instrumentation);
4508 4509
4509 scoped_refptr<PicturePileImpl> pending_pile = 4510 scoped_refptr<RasterSource> pending_raster_source =
4510 PicturePileImpl::CreateFromOther(pile); 4511 recording_source->CreateRasterSource();
4511 4512
4512 SetupPendingTree(pending_pile); 4513 SetupPendingTree(pending_raster_source);
4513 ActivateTree(); 4514 ActivateTree();
4514 4515
4515 active_layer_->set_fixed_tile_size(tile_size); 4516 active_layer_->set_fixed_tile_size(tile_size);
4516 host_impl_.active_tree()->UpdateDrawProperties(); 4517 host_impl_.active_tree()->UpdateDrawProperties();
4517 if (test_for_solid) { 4518 if (test_for_solid) {
4518 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); 4519 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings());
4519 } else { 4520 } else {
4520 ASSERT_TRUE(active_layer_->tilings()); 4521 ASSERT_TRUE(active_layer_->tilings());
4521 ASSERT_GT(active_layer_->tilings()->num_tilings(), 0u); 4522 ASSERT_GT(active_layer_->tilings()->num_tilings(), 0u);
4522 std::vector<Tile*> tiles = 4523 std::vector<Tile*> tiles =
(...skipping 30 matching lines...) Expand all
4553 4554
4554 gfx::Size tile_size(100, 100); 4555 gfx::Size tile_size(100, 100);
4555 gfx::Size layer_bounds(200, 200); 4556 gfx::Size layer_bounds(200, 200);
4556 gfx::Rect layer_rect(layer_bounds); 4557 gfx::Rect layer_rect(layer_bounds);
4557 4558
4558 FakeContentLayerClient client; 4559 FakeContentLayerClient client;
4559 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client); 4560 scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client);
4560 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D); 4561 FakeLayerTreeHostClient host_client(FakeLayerTreeHostClient::DIRECT_3D);
4561 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&host_client); 4562 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&host_client);
4562 host->SetRootLayer(layer); 4563 host->SetRootLayer(layer);
4563 PicturePile* pile = layer->GetPicturePileForTesting(); 4564 RecordingSource* recording_source = layer->GetRecordingSourceForTesting();
4564 4565
4565 host_impl_.SetViewportSize(layer_bounds); 4566 host_impl_.SetViewportSize(layer_bounds);
4566 4567
4567 int frame_number = 0; 4568 int frame_number = 0;
4568 FakeRenderingStatsInstrumentation stats_instrumentation;
4569 4569
4570 client.set_fill_with_nonsolid_color(true); 4570 client.set_fill_with_nonsolid_color(true);
4571 4571
4572 Region invalidation1(layer_rect); 4572 Region invalidation1(layer_rect);
4573 pile->UpdateAndExpandInvalidation(&client, 4573 recording_source->UpdateAndExpandInvalidation(
4574 &invalidation1, 4574 &client, &invalidation1, SK_ColorWHITE, false, false, layer_bounds,
4575 SK_ColorWHITE, 4575 layer_rect, frame_number++, Picture::RECORD_NORMALLY);
4576 false,
4577 false,
4578 layer_bounds,
4579 layer_rect,
4580 frame_number++,
4581 Picture::RECORD_NORMALLY,
4582 &stats_instrumentation);
4583 4576
4584 scoped_refptr<PicturePileImpl> pending_pile1 = 4577 scoped_refptr<RasterSource> raster_source1 =
4585 PicturePileImpl::CreateFromOther(pile); 4578 recording_source->CreateRasterSource();
4586 4579
4587 SetupPendingTree(pending_pile1); 4580 SetupPendingTree(raster_source1);
4588 ActivateTree(); 4581 ActivateTree();
4589 host_impl_.active_tree()->UpdateDrawProperties(); 4582 host_impl_.active_tree()->UpdateDrawProperties();
4590 4583
4591 // We've started with a solid layer that contains some tilings. 4584 // We've started with a solid layer that contains some tilings.
4592 ASSERT_TRUE(active_layer_->tilings()); 4585 ASSERT_TRUE(active_layer_->tilings());
4593 EXPECT_NE(0u, active_layer_->tilings()->num_tilings()); 4586 EXPECT_NE(0u, active_layer_->tilings()->num_tilings());
4594 4587
4595 client.set_fill_with_nonsolid_color(false); 4588 client.set_fill_with_nonsolid_color(false);
4596 4589
4597 Region invalidation2(layer_rect); 4590 Region invalidation2(layer_rect);
4598 pile->UpdateAndExpandInvalidation(&client, 4591 recording_source->UpdateAndExpandInvalidation(
4599 &invalidation2, 4592 &client, &invalidation2, SK_ColorWHITE, false, false, layer_bounds,
4600 SK_ColorWHITE, 4593 layer_rect, frame_number++, Picture::RECORD_NORMALLY);
4601 false,
4602 false,
4603 layer_bounds,
4604 layer_rect,
4605 frame_number++,
4606 Picture::RECORD_NORMALLY,
4607 &stats_instrumentation);
4608 4594
4609 scoped_refptr<PicturePileImpl> pending_pile2 = 4595 scoped_refptr<RasterSource> raster_source2 =
4610 PicturePileImpl::CreateFromOther(pile); 4596 recording_source->CreateRasterSource();
4611 4597
4612 SetupPendingTree(pending_pile2); 4598 SetupPendingTree(raster_source2);
4613 ActivateTree(); 4599 ActivateTree();
4614 4600
4615 // We've switched to a solid color, so we should end up with no tilings. 4601 // We've switched to a solid color, so we should end up with no tilings.
4616 ASSERT_TRUE(active_layer_->tilings()); 4602 ASSERT_TRUE(active_layer_->tilings());
4617 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); 4603 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings());
4618 } 4604 }
4619 4605
4620 TEST_F(PictureLayerImplTest, ChangeInViewportAllowsTilingUpdates) { 4606 TEST_F(PictureLayerImplTest, ChangeInViewportAllowsTilingUpdates) {
4621 base::TimeTicks time_ticks; 4607 base::TimeTicks time_ticks;
4622 time_ticks += base::TimeDelta::FromMilliseconds(1); 4608 time_ticks += base::TimeDelta::FromMilliseconds(1);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
4736 result = layer->CalculateTileSize(gfx::Size(447, 400)); 4722 result = layer->CalculateTileSize(gfx::Size(447, 400));
4737 EXPECT_EQ(result.width(), 448); 4723 EXPECT_EQ(result.width(), 448);
4738 EXPECT_EQ(result.height(), 448); 4724 EXPECT_EQ(result.height(), 448);
4739 result = layer->CalculateTileSize(gfx::Size(500, 499)); 4725 result = layer->CalculateTileSize(gfx::Size(500, 499));
4740 EXPECT_EQ(result.width(), 512); 4726 EXPECT_EQ(result.width(), 512);
4741 EXPECT_EQ(result.height(), 500 + 2); 4727 EXPECT_EQ(result.height(), 500 + 2);
4742 } 4728 }
4743 4729
4744 } // namespace 4730 } // namespace
4745 } // namespace cc 4731 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/layers/picture_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698