OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <limits> | 10 #include <limits> |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 | 282 |
283 class NoLowResPictureLayerImplTest : public PictureLayerImplTest { | 283 class NoLowResPictureLayerImplTest : public PictureLayerImplTest { |
284 public: | 284 public: |
285 LayerTreeSettings CreateSettings() override { | 285 LayerTreeSettings CreateSettings() override { |
286 LayerTreeSettings settings = PictureLayerImplTest::CreateSettings(); | 286 LayerTreeSettings settings = PictureLayerImplTest::CreateSettings(); |
287 settings.create_low_res_tiling = false; | 287 settings.create_low_res_tiling = false; |
288 return settings; | 288 return settings; |
289 } | 289 } |
290 }; | 290 }; |
291 | 291 |
292 TEST_F(PictureLayerImplTest, TileGridAlignment) { | |
293 // Layer to span 4 raster tiles in x and in y | |
294 LayerTreeSettings settings; | |
295 gfx::Size layer_size(settings.default_tile_size.width() * 7 / 2, | |
296 settings.default_tile_size.height() * 7 / 2); | |
297 | |
298 scoped_refptr<FakeRasterSource> pending_raster_source = | |
299 FakeRasterSource::CreateFilled(layer_size); | |
300 | |
301 // Create an active recording source, but make sure it's not solid. | |
302 std::unique_ptr<FakeRecordingSource> active_recording_source = | |
303 FakeRecordingSource::CreateFilledRecordingSource(layer_size); | |
304 active_recording_source->SetLayerBounds(layer_size); | |
305 active_recording_source->add_draw_rect(gfx::Rect(layer_size)); | |
306 active_recording_source->add_draw_rect( | |
307 gfx::Rect(0, 0, layer_size.width() - 1, layer_size.height() - 1)); | |
308 active_recording_source->Rerecord(); | |
309 scoped_refptr<FakeRasterSource> active_raster_source = | |
310 FakeRasterSource::CreateFromRecordingSource(active_recording_source.get(), | |
311 false); | |
312 | |
313 SetupTrees(pending_raster_source, active_raster_source); | |
314 | |
315 // Add 1x1 rects at the centers of each tile, then re-record recording source | |
316 // contents. | |
317 active_layer()->tilings()->tiling_at(0)->CreateAllTilesForTesting(); | |
318 std::vector<Tile*> tiles = | |
319 active_layer()->tilings()->tiling_at(0)->AllTilesForTesting(); | |
320 EXPECT_EQ(16u, tiles.size()); | |
321 std::vector<SkRect> rects; | |
322 std::vector<Tile*>::const_iterator tile_iter; | |
323 active_recording_source->reset_draws(); | |
324 for (tile_iter = tiles.begin(); tile_iter < tiles.end(); tile_iter++) { | |
325 gfx::Point tile_center = (*tile_iter)->content_rect().CenterPoint(); | |
326 gfx::Rect rect(tile_center.x(), tile_center.y(), 1, 1); | |
327 active_recording_source->add_draw_rect(rect); | |
328 rects.push_back(SkRect::MakeXYWH(rect.x(), rect.y(), 1, 1)); | |
329 } | |
330 | |
331 // Force re-raster with newly injected content | |
332 active_recording_source->Rerecord(); | |
333 | |
334 scoped_refptr<FakeRasterSource> updated_active_raster_source = | |
335 FakeRasterSource::CreateFromRecordingSource(active_recording_source.get(), | |
336 false); | |
337 | |
338 RasterSource::PlaybackSettings playback_settings; | |
339 playback_settings.playback_to_shared_canvas = true; | |
340 std::vector<SkRect>::const_iterator rect_iter = rects.begin(); | |
341 for (tile_iter = tiles.begin(); tile_iter < tiles.end(); tile_iter++) { | |
342 MockCanvas mock_canvas(1000, 1000); | |
343 const gfx::Rect& content_rect = (*tile_iter)->content_rect(); | |
344 updated_active_raster_source->RasterSource::PlaybackToCanvas( | |
345 &mock_canvas, content_rect, content_rect, gfx::SizeF(1.f, 1.f), | |
346 playback_settings); | |
347 | |
348 // This test verifies that when drawing the contents of a specific tile | |
349 // at content scale 1.0, the playback canvas never receives content from | |
350 // neighboring tiles which indicates that the tile grid embedded in | |
351 // SkPicture is perfectly aligned with the compositor's tiles. | |
352 EXPECT_EQ(1u, mock_canvas.rects_.size()); | |
353 EXPECT_EQ(*rect_iter, mock_canvas.rects_[0]); | |
354 rect_iter++; | |
355 } | |
356 } | |
357 | |
358 TEST_F(PictureLayerImplTest, CloneNoInvalidation) { | 292 TEST_F(PictureLayerImplTest, CloneNoInvalidation) { |
359 gfx::Size layer_bounds(400, 400); | 293 gfx::Size layer_bounds(400, 400); |
360 SetupDefaultTrees(layer_bounds); | 294 SetupDefaultTrees(layer_bounds); |
361 | 295 |
362 EXPECT_EQ(pending_layer()->tilings()->num_tilings(), | 296 EXPECT_EQ(pending_layer()->tilings()->num_tilings(), |
363 active_layer()->tilings()->num_tilings()); | 297 active_layer()->tilings()->num_tilings()); |
364 | 298 |
365 const PictureLayerTilingSet* tilings = pending_layer()->tilings(); | 299 const PictureLayerTilingSet* tilings = pending_layer()->tilings(); |
366 EXPECT_GT(tilings->num_tilings(), 0u); | 300 EXPECT_GT(tilings->num_tilings(), 0u); |
367 for (size_t i = 0; i < tilings->num_tilings(); ++i) | 301 for (size_t i = 0; i < tilings->num_tilings(); ++i) |
(...skipping 4653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5021 EXPECT_FLOAT_EQ(expected_contents_scale, | 4955 EXPECT_FLOAT_EQ(expected_contents_scale, |
5022 pending_layer_ptr->picture_layer_tiling_set() | 4956 pending_layer_ptr->picture_layer_tiling_set() |
5023 ->FindTilingWithResolution(HIGH_RESOLUTION) | 4957 ->FindTilingWithResolution(HIGH_RESOLUTION) |
5024 ->contents_scale_key()) | 4958 ->contents_scale_key()) |
5025 << "ideal_contents_scale: " << ideal_contents_scale; | 4959 << "ideal_contents_scale: " << ideal_contents_scale; |
5026 } | 4960 } |
5027 } | 4961 } |
5028 | 4962 |
5029 } // namespace | 4963 } // namespace |
5030 } // namespace cc | 4964 } // namespace cc |
OLD | NEW |