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 3 // found in the LICENSE file. 4 5 #include "cc/test/fake_picture_pile_impl.h" 6 7 #include <limits> 8 #include <utility> 9 10 #include "cc/test/impl_side_painting_settings.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 13 namespace cc { 14 15 FakePicturePileImpl::FakePicturePileImpl() {} 16 17 FakePicturePileImpl::~FakePicturePileImpl() {} 18 19 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile( 20 const gfx::Size& tile_size, 21 const gfx::Size& layer_bounds) { 22 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 23 pile->tiling().SetTilingSize(layer_bounds); 24 pile->tiling().SetMaxTextureSize(tile_size); 25 pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size); 26 pile->recorded_viewport_ = gfx::Rect(layer_bounds); 27 pile->has_any_recordings_ = true; 28 for (int x = 0; x < pile->tiling().num_tiles_x(); ++x) { 29 for (int y = 0; y < pile->tiling().num_tiles_y(); ++y) 30 pile->AddRecordingAt(x, y); 31 } 32 return pile; 33 } 34 35 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile( 36 const gfx::Size& tile_size, 37 const gfx::Size& layer_bounds) { 38 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 39 pile->tiling().SetTilingSize(layer_bounds); 40 pile->tiling().SetMaxTextureSize(tile_size); 41 pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size); 42 pile->recorded_viewport_ = gfx::Rect(); 43 pile->has_any_recordings_ = false; 44 return pile; 45 } 46 47 scoped_refptr<FakePicturePileImpl> 48 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( 49 const gfx::Size& tile_size, 50 const gfx::Size& layer_bounds) { 51 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 52 pile->tiling().SetTilingSize(layer_bounds); 53 pile->tiling().SetMaxTextureSize(tile_size); 54 pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size); 55 // This simulates a false positive for this flag. 56 pile->recorded_viewport_ = gfx::Rect(); 57 pile->has_any_recordings_ = true; 58 return pile; 59 } 60 61 scoped_refptr<FakePicturePileImpl> 62 FakePicturePileImpl::CreateInfiniteFilledPile() { 63 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 64 gfx::Size size(std::numeric_limits<int>::max(), 65 std::numeric_limits<int>::max()); 66 pile->tiling().SetTilingSize(size); 67 pile->tiling().SetMaxTextureSize(size); 68 pile->SetTileGridSize(size); 69 pile->recorded_viewport_ = gfx::Rect(size); 70 pile->has_any_recordings_ = true; 71 pile->AddRecordingAt(0, 0); 72 return pile; 73 } 74 75 void FakePicturePileImpl::AddRecordingAt(int x, int y) { 76 EXPECT_GE(x, 0); 77 EXPECT_GE(y, 0); 78 EXPECT_LT(x, tiling_.num_tiles_x()); 79 EXPECT_LT(y, tiling_.num_tiles_y()); 80 81 if (HasRecordingAt(x, y)) 82 return; 83 gfx::Rect bounds(tiling().TileBounds(x, y)); 84 bounds.Inset(-buffer_pixels(), -buffer_pixels()); 85 86 scoped_refptr<Picture> picture(Picture::Create( 87 bounds, &client_, tile_grid_info_, true, Picture::RECORD_NORMALLY)); 88 picture_map_[std::pair<int, int>(x, y)].SetPicture(picture); 89 EXPECT_TRUE(HasRecordingAt(x, y)); 90 91 has_any_recordings_ = true; 92 } 93 94 void FakePicturePileImpl::RemoveRecordingAt(int x, int y) { 95 EXPECT_GE(x, 0); 96 EXPECT_GE(y, 0); 97 EXPECT_LT(x, tiling_.num_tiles_x()); 98 EXPECT_LT(y, tiling_.num_tiles_y()); 99 100 if (!HasRecordingAt(x, y)) 101 return; 102 picture_map_.erase(std::pair<int, int>(x, y)); 103 EXPECT_FALSE(HasRecordingAt(x, y)); 104 } 105 106 void FakePicturePileImpl::RerecordPile() { 107 for (int y = 0; y < num_tiles_y(); ++y) { 108 for (int x = 0; x < num_tiles_x(); ++x) { 109 RemoveRecordingAt(x, y); 110 AddRecordingAt(x, y); 111 } 112 } 113 } 114 115 } // namespace cc 116