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 gfx::Size tile_size, 21 gfx::Size layer_bounds) { 22 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 23 pile->tiling().SetTotalSize(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 gfx::Size tile_size, 37 gfx::Size layer_bounds) { 38 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 39 pile->tiling().SetTotalSize(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 gfx::Size tile_size, 50 gfx::Size layer_bounds) { 51 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl()); 52 pile->tiling().SetTotalSize(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->Resize(size); 67 pile->tiling().SetTotalSize(size); 68 pile->tiling().SetMaxTextureSize(size); 69 pile->SetTileGridSize(size); 70 pile->recorded_viewport_ = gfx::Rect(size); 71 pile->has_any_recordings_ = true; 72 pile->AddRecordingAt(0, 0); 73 return pile; 74 } 75 76 void FakePicturePileImpl::AddRecordingAt(int x, int y) { 77 EXPECT_GE(x, 0); 78 EXPECT_GE(y, 0); 79 EXPECT_LT(x, tiling_.num_tiles_x()); 80 EXPECT_LT(y, tiling_.num_tiles_y()); 81 82 if (HasRecordingAt(x, y)) 83 return; 84 gfx::Rect bounds(tiling().TileBounds(x, y)); 85 bounds.Inset(-buffer_pixels(), -buffer_pixels()); 86 87 scoped_refptr<Picture> picture(Picture::Create(bounds)); 88 picture->Record(&client_, tile_grid_info_); 89 picture->GatherPixelRefs(tile_grid_info_); 90 picture_map_[std::pair<int, int>(x, y)].SetPicture(picture); 91 EXPECT_TRUE(HasRecordingAt(x, y)); 92 93 has_any_recordings_ = true; 94 } 95 96 void FakePicturePileImpl::RemoveRecordingAt(int x, int y) { 97 EXPECT_GE(x, 0); 98 EXPECT_GE(y, 0); 99 EXPECT_LT(x, tiling_.num_tiles_x()); 100 EXPECT_LT(y, tiling_.num_tiles_y()); 101 102 if (!HasRecordingAt(x, y)) 103 return; 104 picture_map_.erase(std::pair<int, int>(x, y)); 105 EXPECT_FALSE(HasRecordingAt(x, y)); 106 } 107 108 void FakePicturePileImpl::RerecordPile() { 109 for (int y = 0; y < num_tiles_y(); ++y) { 110 for (int x = 0; x < num_tiles_x(); ++x) { 111 RemoveRecordingAt(x, y); 112 AddRecordingAt(x, y); 113 } 114 } 115 } 116 117 } // namespace cc 118