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

Side by Side Diff: cc/resources/picture_pile_unittest.cc

Issue 669813003: Update from chromium https://crrev.com/301725/ (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
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 <map> 5 #include <map>
6 #include <utility> 6 #include <utility>
7 7
8 #include "cc/resources/picture_pile.h" 8 #include "cc/resources/picture_pile.h"
9 #include "cc/test/fake_content_layer_client.h" 9 #include "cc/test/fake_content_layer_client.h"
10 #include "cc/test/fake_rendering_stats_instrumentation.h" 10 #include "cc/test/fake_rendering_stats_instrumentation.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gfx/geometry/rect_conversions.h" 12 #include "ui/gfx/geometry/rect_conversions.h"
13 #include "ui/gfx/geometry/size_conversions.h" 13 #include "ui/gfx/geometry/size_conversions.h"
14 14
15 namespace cc { 15 namespace cc {
16 namespace { 16 namespace {
17 17
18 class TestPicturePile : public PicturePile { 18 class TestPicturePile : public PicturePile {
19 public: 19 public:
20 ~TestPicturePile() override {}
21
20 using PicturePile::buffer_pixels; 22 using PicturePile::buffer_pixels;
21 using PicturePile::CanRasterSlowTileCheck; 23 using PicturePile::CanRasterSlowTileCheck;
22 using PicturePile::Clear; 24 using PicturePile::Clear;
23 25
24 PictureMap& picture_map() { return picture_map_; } 26 PictureMap& picture_map() { return picture_map_; }
25 const gfx::Rect& recorded_viewport() const { return recorded_viewport_; } 27 const gfx::Rect& recorded_viewport() const { return recorded_viewport_; }
26 28
27 bool CanRasterLayerRect(const gfx::Rect& layer_rect) { 29 bool CanRasterLayerRect(const gfx::Rect& layer_rect) {
28 return CanRaster(1.f, layer_rect); 30 return CanRaster(1.f, layer_rect);
29 } 31 }
30 32
31 typedef PicturePile::PictureInfo PictureInfo; 33 typedef PicturePile::PictureInfo PictureInfo;
32 typedef PicturePile::PictureMapKey PictureMapKey; 34 typedef PicturePile::PictureMapKey PictureMapKey;
33 typedef PicturePile::PictureMap PictureMap; 35 typedef PicturePile::PictureMap PictureMap;
34
35 protected:
36 ~TestPicturePile() override {}
37 }; 36 };
38 37
39 class PicturePileTestBase { 38 class PicturePileTestBase {
40 public: 39 public:
41 PicturePileTestBase() 40 PicturePileTestBase()
42 : background_color_(SK_ColorBLUE), 41 : background_color_(SK_ColorBLUE),
43 min_scale_(0.125), 42 min_scale_(0.125),
44 frame_number_(0), 43 frame_number_(0),
45 contents_opaque_(false) {} 44 contents_opaque_(false) {}
46 45
47 void InitializeData() { 46 void InitializeData() {
48 pile_ = make_scoped_refptr(new TestPicturePile()); 47 pile_.SetTileGridSize(gfx::Size(1000, 1000));
49 pile_->SetTileGridSize(gfx::Size(1000, 1000)); 48 pile_.SetMinContentsScale(min_scale_);
50 pile_->SetMinContentsScale(min_scale_);
51 client_ = FakeContentLayerClient(); 49 client_ = FakeContentLayerClient();
52 SetTilingSize(pile_->tiling().max_texture_size()); 50 SetTilingSize(pile_.tiling().max_texture_size());
53 } 51 }
54 52
55 void SetTilingSize(const gfx::Size& tiling_size) { 53 void SetTilingSize(const gfx::Size& tiling_size) {
56 Region invalidation; 54 Region invalidation;
57 gfx::Rect viewport_rect(tiling_size); 55 gfx::Rect viewport_rect(tiling_size);
58 UpdateAndExpandInvalidation(&invalidation, tiling_size, viewport_rect); 56 UpdateAndExpandInvalidation(&invalidation, tiling_size, viewport_rect);
59 } 57 }
60 58
61 gfx::Size tiling_size() const { return pile_->tiling_size(); } 59 gfx::Size tiling_size() const { return pile_.tiling_size(); }
62 gfx::Rect tiling_rect() const { return gfx::Rect(pile_->tiling_size()); } 60 gfx::Rect tiling_rect() const { return gfx::Rect(pile_.tiling_size()); }
63 61
64 bool UpdateAndExpandInvalidation(Region* invalidation, 62 bool UpdateAndExpandInvalidation(Region* invalidation,
65 const gfx::Size& layer_size, 63 const gfx::Size& layer_size,
66 const gfx::Rect& visible_layer_rect) { 64 const gfx::Rect& visible_layer_rect) {
67 frame_number_++; 65 frame_number_++;
68 return pile_->UpdateAndExpandInvalidation(&client_, 66 return pile_.UpdateAndExpandInvalidation(&client_,
69 invalidation, 67 invalidation,
70 background_color_, 68 background_color_,
71 contents_opaque_, 69 contents_opaque_,
72 false, 70 false,
73 layer_size, 71 layer_size,
74 visible_layer_rect, 72 visible_layer_rect,
75 frame_number_, 73 frame_number_,
76 Picture::RECORD_NORMALLY, 74 Picture::RECORD_NORMALLY,
77 &stats_instrumentation_); 75 &stats_instrumentation_);
78 } 76 }
79 77
80 bool UpdateWholePile() { 78 bool UpdateWholePile() {
81 Region invalidation = tiling_rect(); 79 Region invalidation = tiling_rect();
82 bool result = UpdateAndExpandInvalidation( 80 bool result = UpdateAndExpandInvalidation(
83 &invalidation, tiling_size(), tiling_rect()); 81 &invalidation, tiling_size(), tiling_rect());
84 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString()); 82 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
85 return result; 83 return result;
86 } 84 }
87 85
88 FakeContentLayerClient client_; 86 FakeContentLayerClient client_;
89 FakeRenderingStatsInstrumentation stats_instrumentation_; 87 FakeRenderingStatsInstrumentation stats_instrumentation_;
90 scoped_refptr<TestPicturePile> pile_; 88 TestPicturePile pile_;
91 SkColor background_color_; 89 SkColor background_color_;
92 float min_scale_; 90 float min_scale_;
93 int frame_number_; 91 int frame_number_;
94 bool contents_opaque_; 92 bool contents_opaque_;
95 }; 93 };
96 94
97 class PicturePileTest : public PicturePileTestBase, public testing::Test { 95 class PicturePileTest : public PicturePileTestBase, public testing::Test {
98 public: 96 public:
99 virtual void SetUp() override { InitializeData(); } 97 virtual void SetUp() override { InitializeData(); }
100 }; 98 };
101 99
102 TEST_F(PicturePileTest, InvalidationOnTileBorderOutsideInterestRect) { 100 TEST_F(PicturePileTest, InvalidationOnTileBorderOutsideInterestRect) {
103 // Don't expand the interest rect past what we invalidate. 101 // Don't expand the interest rect past what we invalidate.
104 pile_->SetPixelRecordDistanceForTesting(0); 102 pile_.SetPixelRecordDistanceForTesting(0);
105 103
106 gfx::Size tile_size(100, 100); 104 gfx::Size tile_size(100, 100);
107 pile_->tiling().SetMaxTextureSize(tile_size); 105 pile_.tiling().SetMaxTextureSize(tile_size);
108 106
109 gfx::Size pile_size(400, 400); 107 gfx::Size pile_size(400, 400);
110 SetTilingSize(pile_size); 108 SetTilingSize(pile_size);
111 109
112 // We have multiple tiles. 110 // We have multiple tiles.
113 EXPECT_GT(pile_->tiling().num_tiles_x(), 2); 111 EXPECT_GT(pile_.tiling().num_tiles_x(), 2);
114 EXPECT_GT(pile_->tiling().num_tiles_y(), 2); 112 EXPECT_GT(pile_.tiling().num_tiles_y(), 2);
115 113
116 // Record everything. 114 // Record everything.
117 Region invalidation(tiling_rect()); 115 Region invalidation(tiling_rect());
118 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect()); 116 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect());
119 117
120 // +----------+-----------------+-----------+ 118 // +----------+-----------------+-----------+
121 // | | VVVV 1,0| | 119 // | | VVVV 1,0| |
122 // | | VVVV | | 120 // | | VVVV | |
123 // | | VVVV | | 121 // | | VVVV | |
124 // | ...|.................|... | 122 // | ...|.................|... |
(...skipping 13 matching lines...) Expand all
138 // VV = interest rect (what we will record) 136 // VV = interest rect (what we will record)
139 // 137 //
140 // The first invalidation is inside VV, so it does not touch border pixels of 138 // The first invalidation is inside VV, so it does not touch border pixels of
141 // tile 1,1. 139 // tile 1,1.
142 // 140 //
143 // The second invalidation goes below VV into the .. border pixels of 1,1. 141 // The second invalidation goes below VV into the .. border pixels of 1,1.
144 142
145 // This is the VV interest rect which will be entirely inside 1,0 and not 143 // This is the VV interest rect which will be entirely inside 1,0 and not
146 // touch the border of 1,1. 144 // touch the border of 1,1.
147 gfx::Rect interest_rect( 145 gfx::Rect interest_rect(
148 pile_->tiling().TilePositionX(1) + pile_->tiling().border_texels(), 146 pile_.tiling().TilePositionX(1) + pile_.tiling().border_texels(),
149 0, 147 0,
150 10, 148 10,
151 pile_->tiling().TileSizeY(0) - pile_->tiling().border_texels()); 149 pile_.tiling().TileSizeY(0) - pile_.tiling().border_texels());
152 150
153 // Invalidate tile 1,0 only. This is a rect that avoids the borders of any 151 // Invalidate tile 1,0 only. This is a rect that avoids the borders of any
154 // other tiles. 152 // other tiles.
155 gfx::Rect invalidate_tile = interest_rect; 153 gfx::Rect invalidate_tile = interest_rect;
156 // This should cause the tile 1,0 to be invalidated and re-recorded. The 154 // This should cause the tile 1,0 to be invalidated and re-recorded. The
157 // invalidation did not need to be expanded. 155 // invalidation did not need to be expanded.
158 invalidation = invalidate_tile; 156 invalidation = invalidate_tile;
159 UpdateAndExpandInvalidation(&invalidation, tiling_size(), interest_rect); 157 UpdateAndExpandInvalidation(&invalidation, tiling_size(), interest_rect);
160 EXPECT_EQ(invalidate_tile, invalidation); 158 EXPECT_EQ(invalidate_tile, invalidation);
161 159
162 // Invalidate tile 1,0 and 1,1 by invalidating something that only touches the 160 // Invalidate tile 1,0 and 1,1 by invalidating something that only touches the
163 // border of 1,1 (and is inside the tile bounds of 1,0). This is a 10px wide 161 // border of 1,1 (and is inside the tile bounds of 1,0). This is a 10px wide
164 // strip from the top of the tiling onto the border pixels of tile 1,1 that 162 // strip from the top of the tiling onto the border pixels of tile 1,1 that
165 // avoids border pixels of any other tiles. 163 // avoids border pixels of any other tiles.
166 gfx::Rect invalidate_border = interest_rect; 164 gfx::Rect invalidate_border = interest_rect;
167 invalidate_border.Inset(0, 0, 0, -1); 165 invalidate_border.Inset(0, 0, 0, -1);
168 // This should cause the tile 1,0 and 1,1 to be invalidated. The 1,1 tile will 166 // This should cause the tile 1,0 and 1,1 to be invalidated. The 1,1 tile will
169 // not be re-recorded since it does not touch the interest rect, so the 167 // not be re-recorded since it does not touch the interest rect, so the
170 // invalidation should be expanded to cover all of 1,1. 168 // invalidation should be expanded to cover all of 1,1.
171 invalidation = invalidate_border; 169 invalidation = invalidate_border;
172 UpdateAndExpandInvalidation(&invalidation, tiling_size(), interest_rect); 170 UpdateAndExpandInvalidation(&invalidation, tiling_size(), interest_rect);
173 Region expected_invalidation = invalidate_border; 171 Region expected_invalidation = invalidate_border;
174 expected_invalidation.Union(pile_->tiling().TileBounds(1, 1)); 172 expected_invalidation.Union(pile_.tiling().TileBounds(1, 1));
175 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 173 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
176 } 174 }
177 175
178 TEST_F(PicturePileTest, SmallInvalidateInflated) { 176 TEST_F(PicturePileTest, SmallInvalidateInflated) {
179 // Invalidate something inside a tile. 177 // Invalidate something inside a tile.
180 Region invalidate_rect(gfx::Rect(50, 50, 1, 1)); 178 Region invalidate_rect(gfx::Rect(50, 50, 1, 1));
181 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect()); 179 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect());
182 EXPECT_EQ(gfx::Rect(50, 50, 1, 1).ToString(), invalidate_rect.ToString()); 180 EXPECT_EQ(gfx::Rect(50, 50, 1, 1).ToString(), invalidate_rect.ToString());
183 181
184 EXPECT_EQ(1, pile_->tiling().num_tiles_x()); 182 EXPECT_EQ(1, pile_.tiling().num_tiles_x());
185 EXPECT_EQ(1, pile_->tiling().num_tiles_y()); 183 EXPECT_EQ(1, pile_.tiling().num_tiles_y());
186 184
187 TestPicturePile::PictureInfo& picture_info = 185 TestPicturePile::PictureInfo& picture_info =
188 pile_->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; 186 pile_.picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second;
189 // We should have a picture. 187 // We should have a picture.
190 EXPECT_TRUE(!!picture_info.GetPicture()); 188 EXPECT_TRUE(!!picture_info.GetPicture());
191 gfx::Rect picture_rect = gfx::ScaleToEnclosedRect( 189 gfx::Rect picture_rect = gfx::ScaleToEnclosedRect(
192 picture_info.GetPicture()->LayerRect(), min_scale_); 190 picture_info.GetPicture()->LayerRect(), min_scale_);
193 191
194 // The the picture should be large enough that scaling it never makes a rect 192 // The the picture should be large enough that scaling it never makes a rect
195 // smaller than 1 px wide or tall. 193 // smaller than 1 px wide or tall.
196 EXPECT_FALSE(picture_rect.IsEmpty()) << "Picture rect " << 194 EXPECT_FALSE(picture_rect.IsEmpty()) << "Picture rect " <<
197 picture_rect.ToString(); 195 picture_rect.ToString();
198 } 196 }
199 197
200 TEST_F(PicturePileTest, LargeInvalidateInflated) { 198 TEST_F(PicturePileTest, LargeInvalidateInflated) {
201 // Invalidate something inside a tile. 199 // Invalidate something inside a tile.
202 Region invalidate_rect(gfx::Rect(50, 50, 100, 100)); 200 Region invalidate_rect(gfx::Rect(50, 50, 100, 100));
203 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect()); 201 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect());
204 EXPECT_EQ(gfx::Rect(50, 50, 100, 100).ToString(), invalidate_rect.ToString()); 202 EXPECT_EQ(gfx::Rect(50, 50, 100, 100).ToString(), invalidate_rect.ToString());
205 203
206 EXPECT_EQ(1, pile_->tiling().num_tiles_x()); 204 EXPECT_EQ(1, pile_.tiling().num_tiles_x());
207 EXPECT_EQ(1, pile_->tiling().num_tiles_y()); 205 EXPECT_EQ(1, pile_.tiling().num_tiles_y());
208 206
209 TestPicturePile::PictureInfo& picture_info = 207 TestPicturePile::PictureInfo& picture_info =
210 pile_->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; 208 pile_.picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second;
211 EXPECT_TRUE(!!picture_info.GetPicture()); 209 EXPECT_TRUE(!!picture_info.GetPicture());
212 210
213 int expected_inflation = pile_->buffer_pixels(); 211 int expected_inflation = pile_.buffer_pixels();
214 212
215 const Picture* base_picture = picture_info.GetPicture(); 213 const Picture* base_picture = picture_info.GetPicture();
216 gfx::Rect base_picture_rect(pile_->tiling_size()); 214 gfx::Rect base_picture_rect(pile_.tiling_size());
217 base_picture_rect.Inset(-expected_inflation, -expected_inflation); 215 base_picture_rect.Inset(-expected_inflation, -expected_inflation);
218 EXPECT_EQ(base_picture_rect.ToString(), 216 EXPECT_EQ(base_picture_rect.ToString(),
219 base_picture->LayerRect().ToString()); 217 base_picture->LayerRect().ToString());
220 } 218 }
221 219
222 TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) { 220 TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) {
223 gfx::Size new_tiling_size = 221 gfx::Size new_tiling_size =
224 gfx::ToCeiledSize(gfx::ScaleSize(pile_->tiling_size(), 2.f)); 222 gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 2.f));
225 // This creates initial pictures. 223 // This creates initial pictures.
226 SetTilingSize(new_tiling_size); 224 SetTilingSize(new_tiling_size);
227 225
228 // Due to border pixels, we should have 3 tiles. 226 // Due to border pixels, we should have 3 tiles.
229 EXPECT_EQ(3, pile_->tiling().num_tiles_x()); 227 EXPECT_EQ(3, pile_.tiling().num_tiles_x());
230 EXPECT_EQ(3, pile_->tiling().num_tiles_y()); 228 EXPECT_EQ(3, pile_.tiling().num_tiles_y());
231 229
232 // We should have 1/.125 - 1 = 7 border pixels. 230 // We should have 1/.125 - 1 = 7 border pixels.
233 EXPECT_EQ(7, pile_->buffer_pixels()); 231 EXPECT_EQ(7, pile_.buffer_pixels());
234 EXPECT_EQ(7, pile_->tiling().border_texels()); 232 EXPECT_EQ(7, pile_.tiling().border_texels());
235 233
236 // Invalidate everything to have a non zero invalidation frequency. 234 // Invalidate everything to have a non zero invalidation frequency.
237 UpdateWholePile(); 235 UpdateWholePile();
238 236
239 // Invalidate something just over a tile boundary by a single pixel. 237 // Invalidate something just over a tile boundary by a single pixel.
240 // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0). 238 // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0).
241 Region invalidate_rect( 239 Region invalidate_rect(
242 gfx::Rect(pile_->tiling().TileBoundsWithBorder(0, 0).right(), 240 gfx::Rect(pile_.tiling().TileBoundsWithBorder(0, 0).right(),
243 pile_->tiling().TileBoundsWithBorder(0, 0).bottom() - 1, 241 pile_.tiling().TileBoundsWithBorder(0, 0).bottom() - 1,
244 50, 242 50,
245 50)); 243 50));
246 Region expected_invalidation = invalidate_rect; 244 Region expected_invalidation = invalidate_rect;
247 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect()); 245 UpdateAndExpandInvalidation(&invalidate_rect, tiling_size(), tiling_rect());
248 EXPECT_EQ(expected_invalidation.ToString(), invalidate_rect.ToString()); 246 EXPECT_EQ(expected_invalidation.ToString(), invalidate_rect.ToString());
249 247
250 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 248 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
251 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 249 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
252 TestPicturePile::PictureInfo& picture_info = 250 TestPicturePile::PictureInfo& picture_info =
253 pile_->picture_map() 251 pile_.picture_map()
254 .find(TestPicturePile::PictureMapKey(i, j)) 252 .find(TestPicturePile::PictureMapKey(i, j))
255 ->second; 253 ->second;
256 254
257 // Expect (1, 1) and (1, 0) to be invalidated once more 255 // Expect (1, 1) and (1, 0) to be invalidated once more
258 // than the rest of the tiles. 256 // than the rest of the tiles.
259 if (i == 1 && (j == 0 || j == 1)) { 257 if (i == 1 && (j == 0 || j == 1)) {
260 EXPECT_FLOAT_EQ( 258 EXPECT_FLOAT_EQ(
261 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 259 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
262 picture_info.GetInvalidationFrequencyForTesting()); 260 picture_info.GetInvalidationFrequencyForTesting());
263 } else { 261 } else {
264 EXPECT_FLOAT_EQ( 262 EXPECT_FLOAT_EQ(
265 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 263 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
266 picture_info.GetInvalidationFrequencyForTesting()); 264 picture_info.GetInvalidationFrequencyForTesting());
267 } 265 }
268 } 266 }
269 } 267 }
270 } 268 }
271 269
272 TEST_F(PicturePileTest, InvalidateOnFullLayer) { 270 TEST_F(PicturePileTest, InvalidateOnFullLayer) {
273 UpdateWholePile(); 271 UpdateWholePile();
274 272
275 // Everything was invalidated once so far. 273 // Everything was invalidated once so far.
276 for (auto& it : pile_->picture_map()) { 274 for (auto& it : pile_.picture_map()) {
277 EXPECT_FLOAT_EQ( 275 EXPECT_FLOAT_EQ(
278 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 276 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
279 it.second.GetInvalidationFrequencyForTesting()); 277 it.second.GetInvalidationFrequencyForTesting());
280 } 278 }
281 279
282 // Invalidate everything, 280 // Invalidate everything,
283 Region invalidation = tiling_rect(); 281 Region invalidation = tiling_rect();
284 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect()); 282 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect());
285 283
286 // Everything was invalidated again. 284 // Everything was invalidated again.
287 for (auto& it : pile_->picture_map()) { 285 for (auto& it : pile_.picture_map()) {
288 EXPECT_FLOAT_EQ( 286 EXPECT_FLOAT_EQ(
289 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 287 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
290 it.second.GetInvalidationFrequencyForTesting()); 288 it.second.GetInvalidationFrequencyForTesting());
291 } 289 }
292 } 290 }
293 291
294 TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) { 292 TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) {
295 gfx::Size new_tiling_size = 293 gfx::Size new_tiling_size =
296 gfx::ToCeiledSize(gfx::ScaleSize(pile_->tiling_size(), 4.f)); 294 gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 4.f));
297 SetTilingSize(new_tiling_size); 295 SetTilingSize(new_tiling_size);
298 296
299 gfx::Rect viewport(tiling_size().width(), 1); 297 gfx::Rect viewport(tiling_size().width(), 1);
300 298
301 // Update the whole pile until the invalidation frequency is high. 299 // Update the whole pile until the invalidation frequency is high.
302 for (int frame = 0; frame < 33; ++frame) { 300 for (int frame = 0; frame < 33; ++frame) {
303 UpdateWholePile(); 301 UpdateWholePile();
304 } 302 }
305 303
306 // Make sure we have a high invalidation frequency. 304 // Make sure we have a high invalidation frequency.
307 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 305 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
308 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 306 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
309 TestPicturePile::PictureInfo& picture_info = 307 TestPicturePile::PictureInfo& picture_info =
310 pile_->picture_map() 308 pile_.picture_map()
311 .find(TestPicturePile::PictureMapKey(i, j)) 309 .find(TestPicturePile::PictureMapKey(i, j))
312 ->second; 310 ->second;
313 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()) 311 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting())
314 << "i " << i << " j " << j; 312 << "i " << i << " j " << j;
315 } 313 }
316 } 314 }
317 315
318 // Update once more with a small viewport. 316 // Update once more with a small viewport.
319 Region invalidation(tiling_rect()); 317 Region invalidation(tiling_rect());
320 UpdateAndExpandInvalidation(&invalidation, tiling_size(), viewport); 318 UpdateAndExpandInvalidation(&invalidation, tiling_size(), viewport);
321 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString()); 319 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
322 320
323 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 321 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
324 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 322 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
325 TestPicturePile::PictureInfo& picture_info = 323 TestPicturePile::PictureInfo& picture_info =
326 pile_->picture_map() 324 pile_.picture_map()
327 .find(TestPicturePile::PictureMapKey(i, j)) 325 .find(TestPicturePile::PictureMapKey(i, j))
328 ->second; 326 ->second;
329 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()); 327 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting());
330 328
331 // If the y far enough away we expect to find no picture (no re-recording 329 // If the y far enough away we expect to find no picture (no re-recording
332 // happened). For close y, the picture should change. 330 // happened). For close y, the picture should change.
333 if (j >= 2) 331 if (j >= 2)
334 EXPECT_FALSE(picture_info.GetPicture()) << "i " << i << " j " << j; 332 EXPECT_FALSE(picture_info.GetPicture()) << "i " << i << " j " << j;
335 else 333 else
336 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j; 334 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j;
337 } 335 }
338 } 336 }
339 337
340 // Update a partial tile that doesn't get recorded. We should expand the 338 // Update a partial tile that doesn't get recorded. We should expand the
341 // invalidation to the entire tiles that overlap it. 339 // invalidation to the entire tiles that overlap it.
342 Region small_invalidation = 340 Region small_invalidation =
343 gfx::Rect(pile_->tiling().TileBounds(3, 4).x(), 341 gfx::Rect(pile_.tiling().TileBounds(3, 4).x(),
344 pile_->tiling().TileBounds(3, 4).y() + 10, 342 pile_.tiling().TileBounds(3, 4).y() + 10,
345 1, 343 1,
346 1); 344 1);
347 UpdateAndExpandInvalidation(&small_invalidation, tiling_size(), viewport); 345 UpdateAndExpandInvalidation(&small_invalidation, tiling_size(), viewport);
348 EXPECT_TRUE(small_invalidation.Contains(gfx::UnionRects( 346 EXPECT_TRUE(small_invalidation.Contains(gfx::UnionRects(
349 pile_->tiling().TileBounds(2, 4), pile_->tiling().TileBounds(3, 4)))) 347 pile_.tiling().TileBounds(2, 4), pile_.tiling().TileBounds(3, 4))))
350 << small_invalidation.ToString(); 348 << small_invalidation.ToString();
351 349
352 // Now update with no invalidation and full viewport 350 // Now update with no invalidation and full viewport
353 Region empty_invalidation; 351 Region empty_invalidation;
354 UpdateAndExpandInvalidation( 352 UpdateAndExpandInvalidation(
355 &empty_invalidation, tiling_size(), tiling_rect()); 353 &empty_invalidation, tiling_size(), tiling_rect());
356 EXPECT_EQ(Region().ToString(), empty_invalidation.ToString()); 354 EXPECT_EQ(Region().ToString(), empty_invalidation.ToString());
357 355
358 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 356 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
359 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 357 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
360 TestPicturePile::PictureInfo& picture_info = 358 TestPicturePile::PictureInfo& picture_info =
361 pile_->picture_map() 359 pile_.picture_map()
362 .find(TestPicturePile::PictureMapKey(i, j)) 360 .find(TestPicturePile::PictureMapKey(i, j))
363 ->second; 361 ->second;
364 // Expect the invalidation frequency to be less than 1, since we just 362 // Expect the invalidation frequency to be less than 1, since we just
365 // updated with no invalidations. 363 // updated with no invalidations.
366 EXPECT_LT(picture_info.GetInvalidationFrequencyForTesting(), 1.f); 364 EXPECT_LT(picture_info.GetInvalidationFrequencyForTesting(), 1.f);
367 365
368 // We expect that there are pictures everywhere now. 366 // We expect that there are pictures everywhere now.
369 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j; 367 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j;
370 } 368 }
371 } 369 }
372 } 370 }
373 371
374 TEST_F(PicturePileTest, ClearingInvalidatesRecordedRect) { 372 TEST_F(PicturePileTest, ClearingInvalidatesRecordedRect) {
375 gfx::Rect rect(0, 0, 5, 5); 373 gfx::Rect rect(0, 0, 5, 5);
376 EXPECT_TRUE(pile_->CanRasterLayerRect(rect)); 374 EXPECT_TRUE(pile_.CanRasterLayerRect(rect));
377 EXPECT_TRUE(pile_->CanRasterSlowTileCheck(rect)); 375 EXPECT_TRUE(pile_.CanRasterSlowTileCheck(rect));
378 376
379 pile_->Clear(); 377 pile_.Clear();
380 378
381 // Make sure both the cache-aware check (using recorded region) and the normal 379 // Make sure both the cache-aware check (using recorded region) and the normal
382 // check are both false after clearing. 380 // check are both false after clearing.
383 EXPECT_FALSE(pile_->CanRasterLayerRect(rect)); 381 EXPECT_FALSE(pile_.CanRasterLayerRect(rect));
384 EXPECT_FALSE(pile_->CanRasterSlowTileCheck(rect)); 382 EXPECT_FALSE(pile_.CanRasterSlowTileCheck(rect));
385 } 383 }
386 384
387 TEST_F(PicturePileTest, FrequentInvalidationCanRaster) { 385 TEST_F(PicturePileTest, FrequentInvalidationCanRaster) {
388 // This test makes sure that if part of the page is frequently invalidated 386 // This test makes sure that if part of the page is frequently invalidated
389 // and doesn't get re-recorded, then CanRaster is not true for any 387 // and doesn't get re-recorded, then CanRaster is not true for any
390 // tiles touching it, but is true for adjacent tiles, even if it 388 // tiles touching it, but is true for adjacent tiles, even if it
391 // overlaps on borders (edge case). 389 // overlaps on borders (edge case).
392 gfx::Size new_tiling_size = 390 gfx::Size new_tiling_size =
393 gfx::ToCeiledSize(gfx::ScaleSize(pile_->tiling_size(), 4.f)); 391 gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 4.f));
394 SetTilingSize(new_tiling_size); 392 SetTilingSize(new_tiling_size);
395 393
396 gfx::Rect tile01_borders = pile_->tiling().TileBoundsWithBorder(0, 1); 394 gfx::Rect tile01_borders = pile_.tiling().TileBoundsWithBorder(0, 1);
397 gfx::Rect tile02_borders = pile_->tiling().TileBoundsWithBorder(0, 2); 395 gfx::Rect tile02_borders = pile_.tiling().TileBoundsWithBorder(0, 2);
398 gfx::Rect tile01_noborders = pile_->tiling().TileBounds(0, 1); 396 gfx::Rect tile01_noborders = pile_.tiling().TileBounds(0, 1);
399 gfx::Rect tile02_noborders = pile_->tiling().TileBounds(0, 2); 397 gfx::Rect tile02_noborders = pile_.tiling().TileBounds(0, 2);
400 398
401 // Sanity check these two tiles are overlapping with borders, since this is 399 // Sanity check these two tiles are overlapping with borders, since this is
402 // what the test is trying to repro. 400 // what the test is trying to repro.
403 EXPECT_TRUE(tile01_borders.Intersects(tile02_borders)); 401 EXPECT_TRUE(tile01_borders.Intersects(tile02_borders));
404 EXPECT_FALSE(tile01_noborders.Intersects(tile02_noborders)); 402 EXPECT_FALSE(tile01_noborders.Intersects(tile02_noborders));
405 UpdateWholePile(); 403 UpdateWholePile();
406 EXPECT_TRUE(pile_->CanRasterLayerRect(tile01_noborders)); 404 EXPECT_TRUE(pile_.CanRasterLayerRect(tile01_noborders));
407 EXPECT_TRUE(pile_->CanRasterSlowTileCheck(tile01_noborders)); 405 EXPECT_TRUE(pile_.CanRasterSlowTileCheck(tile01_noborders));
408 EXPECT_TRUE(pile_->CanRasterLayerRect(tile02_noborders)); 406 EXPECT_TRUE(pile_.CanRasterLayerRect(tile02_noborders));
409 EXPECT_TRUE(pile_->CanRasterSlowTileCheck(tile02_noborders)); 407 EXPECT_TRUE(pile_.CanRasterSlowTileCheck(tile02_noborders));
410 // Sanity check that an initial paint goes down the fast path of having 408 // Sanity check that an initial paint goes down the fast path of having
411 // a valid recorded viewport. 409 // a valid recorded viewport.
412 EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty()); 410 EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty());
413 411
414 // Update the whole layer until the invalidation frequency is high. 412 // Update the whole layer until the invalidation frequency is high.
415 for (int frame = 0; frame < 33; ++frame) { 413 for (int frame = 0; frame < 33; ++frame) {
416 UpdateWholePile(); 414 UpdateWholePile();
417 } 415 }
418 416
419 // Update once more with a small viewport. 417 // Update once more with a small viewport.
420 gfx::Rect viewport(tiling_size().width(), 1); 418 gfx::Rect viewport(tiling_size().width(), 1);
421 Region invalidation(tiling_rect()); 419 Region invalidation(tiling_rect());
422 UpdateAndExpandInvalidation(&invalidation, tiling_size(), viewport); 420 UpdateAndExpandInvalidation(&invalidation, tiling_size(), viewport);
423 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString()); 421 EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
424 422
425 // Sanity check some pictures exist and others don't. 423 // Sanity check some pictures exist and others don't.
426 EXPECT_TRUE(pile_->picture_map() 424 EXPECT_TRUE(pile_.picture_map()
427 .find(TestPicturePile::PictureMapKey(0, 1)) 425 .find(TestPicturePile::PictureMapKey(0, 1))
428 ->second.GetPicture()); 426 ->second.GetPicture());
429 EXPECT_FALSE(pile_->picture_map() 427 EXPECT_FALSE(pile_.picture_map()
430 .find(TestPicturePile::PictureMapKey(0, 2)) 428 .find(TestPicturePile::PictureMapKey(0, 2))
431 ->second.GetPicture()); 429 ->second.GetPicture());
432 430
433 EXPECT_TRUE(pile_->CanRasterLayerRect(tile01_noborders)); 431 EXPECT_TRUE(pile_.CanRasterLayerRect(tile01_noborders));
434 EXPECT_TRUE(pile_->CanRasterSlowTileCheck(tile01_noborders)); 432 EXPECT_TRUE(pile_.CanRasterSlowTileCheck(tile01_noborders));
435 EXPECT_FALSE(pile_->CanRasterLayerRect(tile02_noborders)); 433 EXPECT_FALSE(pile_.CanRasterLayerRect(tile02_noborders));
436 EXPECT_FALSE(pile_->CanRasterSlowTileCheck(tile02_noborders)); 434 EXPECT_FALSE(pile_.CanRasterSlowTileCheck(tile02_noborders));
437 } 435 }
438 436
439 TEST_F(PicturePileTest, NoInvalidationValidViewport) { 437 TEST_F(PicturePileTest, NoInvalidationValidViewport) {
440 // This test validates that the recorded_viewport cache of full tiles 438 // This test validates that the recorded_viewport cache of full tiles
441 // is still valid for some use cases. If it's not, it's a performance 439 // is still valid for some use cases. If it's not, it's a performance
442 // issue because CanRaster checks will go down the slow path. 440 // issue because CanRaster checks will go down the slow path.
443 EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty()); 441 EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty());
444 442
445 // No invalidation, same viewport. 443 // No invalidation, same viewport.
446 Region invalidation; 444 Region invalidation;
447 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect()); 445 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect());
448 EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty()); 446 EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty());
449 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 447 EXPECT_EQ(Region().ToString(), invalidation.ToString());
450 448
451 // Partial invalidation, same viewport. 449 // Partial invalidation, same viewport.
452 invalidation = gfx::Rect(0, 0, 1, 1); 450 invalidation = gfx::Rect(0, 0, 1, 1);
453 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect()); 451 UpdateAndExpandInvalidation(&invalidation, tiling_size(), tiling_rect());
454 EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty()); 452 EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty());
455 EXPECT_EQ(gfx::Rect(0, 0, 1, 1).ToString(), invalidation.ToString()); 453 EXPECT_EQ(gfx::Rect(0, 0, 1, 1).ToString(), invalidation.ToString());
456 454
457 // No invalidation, changing viewport. 455 // No invalidation, changing viewport.
458 invalidation = Region(); 456 invalidation = Region();
459 UpdateAndExpandInvalidation( 457 UpdateAndExpandInvalidation(
460 &invalidation, tiling_size(), gfx::Rect(5, 5, 5, 5)); 458 &invalidation, tiling_size(), gfx::Rect(5, 5, 5, 5));
461 EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty()); 459 EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty());
462 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 460 EXPECT_EQ(Region().ToString(), invalidation.ToString());
463 } 461 }
464 462
465 TEST_F(PicturePileTest, BigFullLayerInvalidation) { 463 TEST_F(PicturePileTest, BigFullLayerInvalidation) {
466 gfx::Size huge_layer_size(100000000, 100000000); 464 gfx::Size huge_layer_size(100000000, 100000000);
467 gfx::Rect viewport(300000, 400000, 5000, 6000); 465 gfx::Rect viewport(300000, 400000, 5000, 6000);
468 466
469 // Resize the pile. 467 // Resize the pile.
470 Region invalidation; 468 Region invalidation;
471 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport); 469 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport); 529 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport);
532 530
533 // Invalidation inside the recording rect does not need to be expanded. 531 // Invalidation inside the recording rect does not need to be expanded.
534 invalidation = viewport; 532 invalidation = viewport;
535 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport); 533 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport);
536 EXPECT_EQ(viewport.ToString(), invalidation.ToString()); 534 EXPECT_EQ(viewport.ToString(), invalidation.ToString());
537 535
538 // Invalidation outside the recording rect should expand to the tiles it 536 // Invalidation outside the recording rect should expand to the tiles it
539 // covers. 537 // covers.
540 gfx::Rect recorded_over_tiles = 538 gfx::Rect recorded_over_tiles =
541 pile_->tiling().ExpandRectToTileBounds(pile_->recorded_viewport()); 539 pile_.tiling().ExpandRectToTileBounds(pile_.recorded_viewport());
542 gfx::Rect invalidation_outside( 540 gfx::Rect invalidation_outside(
543 recorded_over_tiles.right(), recorded_over_tiles.y(), 30, 30); 541 recorded_over_tiles.right(), recorded_over_tiles.y(), 30, 30);
544 invalidation = invalidation_outside; 542 invalidation = invalidation_outside;
545 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport); 543 UpdateAndExpandInvalidation(&invalidation, huge_layer_size, viewport);
546 gfx::Rect expanded_recorded_viewport = 544 gfx::Rect expanded_recorded_viewport =
547 pile_->tiling().ExpandRectToTileBounds(pile_->recorded_viewport()); 545 pile_.tiling().ExpandRectToTileBounds(pile_.recorded_viewport());
548 Region expected_invalidation = 546 Region expected_invalidation =
549 pile_->tiling().ExpandRectToTileBounds(invalidation_outside); 547 pile_.tiling().ExpandRectToTileBounds(invalidation_outside);
550 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 548 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
551 } 549 }
552 550
553 enum Corner { 551 enum Corner {
554 TOP_LEFT, 552 TOP_LEFT,
555 TOP_RIGHT, 553 TOP_RIGHT,
556 BOTTOM_LEFT, 554 BOTTOM_LEFT,
557 BOTTOM_RIGHT, 555 BOTTOM_RIGHT,
558 }; 556 };
559 557
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 gfx::Size grow_down_tiling_size(6 * tile_size + offset, 589 gfx::Size grow_down_tiling_size(6 * tile_size + offset,
592 8 * tile_size + offset); 590 8 * tile_size + offset);
593 gfx::Size grow_right_tiling_size(8 * tile_size + offset, 591 gfx::Size grow_right_tiling_size(8 * tile_size + offset,
594 6 * tile_size + offset); 592 6 * tile_size + offset);
595 gfx::Size grow_both_tiling_size(8 * tile_size + offset, 593 gfx::Size grow_both_tiling_size(8 * tile_size + offset,
596 8 * tile_size + offset); 594 8 * tile_size + offset);
597 595
598 Region invalidation; 596 Region invalidation;
599 Region expected_invalidation; 597 Region expected_invalidation;
600 598
601 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 599 pile_.tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
602 SetTilingSize(base_tiling_size); 600 SetTilingSize(base_tiling_size);
603 601
604 // We should have a recording for every tile. 602 // We should have a recording for every tile.
605 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 603 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
606 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 604 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
607 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 605 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
608 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 606 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
609 TestPicturePile::PictureMapKey key(i, j); 607 TestPicturePile::PictureMapKey key(i, j);
610 TestPicturePile::PictureMap& map = pile_->picture_map(); 608 TestPicturePile::PictureMap& map = pile_.picture_map();
611 TestPicturePile::PictureMap::iterator it = map.find(key); 609 TestPicturePile::PictureMap::iterator it = map.find(key);
612 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 610 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
613 } 611 }
614 } 612 }
615 613
616 UpdateAndExpandInvalidation( 614 UpdateAndExpandInvalidation(
617 &invalidation, 615 &invalidation,
618 grow_down_tiling_size, 616 grow_down_tiling_size,
619 CornerSinglePixelRect(corner, grow_down_tiling_size)); 617 CornerSinglePixelRect(corner, grow_down_tiling_size));
620 618
621 // We should have lost the recordings in the bottom row. 619 // We should have lost the recordings in the bottom row.
622 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 620 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
623 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 621 EXPECT_EQ(8, pile_.tiling().num_tiles_y());
624 for (int i = 0; i < 6; ++i) { 622 for (int i = 0; i < 6; ++i) {
625 for (int j = 0; j < 6; ++j) { 623 for (int j = 0; j < 6; ++j) {
626 TestPicturePile::PictureMapKey key(i, j); 624 TestPicturePile::PictureMapKey key(i, j);
627 TestPicturePile::PictureMap& map = pile_->picture_map(); 625 TestPicturePile::PictureMap& map = pile_.picture_map();
628 TestPicturePile::PictureMap::iterator it = map.find(key); 626 TestPicturePile::PictureMap::iterator it = map.find(key);
629 EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture()); 627 EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture());
630 } 628 }
631 } 629 }
632 630
633 // We invalidated all new pixels in the recording. 631 // We invalidated all new pixels in the recording.
634 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), 632 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size),
635 gfx::Rect(base_tiling_size)); 633 gfx::Rect(base_tiling_size));
636 // But the new pixels don't cover the whole bottom row. 634 // But the new pixels don't cover the whole bottom row.
637 gfx::Rect bottom_row = gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 635 gfx::Rect bottom_row = gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
638 pile_->tiling().TileBounds(5, 5)); 636 pile_.tiling().TileBounds(5, 5));
639 EXPECT_FALSE(expected_invalidation.Contains(bottom_row)); 637 EXPECT_FALSE(expected_invalidation.Contains(bottom_row));
640 // We invalidated the entire old bottom row. 638 // We invalidated the entire old bottom row.
641 expected_invalidation.Union(bottom_row); 639 expected_invalidation.Union(bottom_row);
642 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 640 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
643 invalidation.Clear(); 641 invalidation.Clear();
644 642
645 UpdateWholePile(); 643 UpdateWholePile();
646 UpdateAndExpandInvalidation(&invalidation, 644 UpdateAndExpandInvalidation(&invalidation,
647 base_tiling_size, 645 base_tiling_size,
648 CornerSinglePixelRect(corner, base_tiling_size)); 646 CornerSinglePixelRect(corner, base_tiling_size));
649 647
650 // We should have lost the recordings that are now outside the tiling only. 648 // We should have lost the recordings that are now outside the tiling only.
651 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 649 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
652 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 650 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
653 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 651 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
654 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 652 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
655 TestPicturePile::PictureMapKey key(i, j); 653 TestPicturePile::PictureMapKey key(i, j);
656 TestPicturePile::PictureMap& map = pile_->picture_map(); 654 TestPicturePile::PictureMap& map = pile_.picture_map();
657 TestPicturePile::PictureMap::iterator it = map.find(key); 655 TestPicturePile::PictureMap::iterator it = map.find(key);
658 EXPECT_EQ(j < 6, it != map.end() && it->second.GetPicture()); 656 EXPECT_EQ(j < 6, it != map.end() && it->second.GetPicture());
659 } 657 }
660 } 658 }
661 659
662 // No invalidation when shrinking. 660 // No invalidation when shrinking.
663 expected_invalidation.Clear(); 661 expected_invalidation.Clear();
664 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 662 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
665 invalidation.Clear(); 663 invalidation.Clear();
666 664
667 UpdateWholePile(); 665 UpdateWholePile();
668 UpdateAndExpandInvalidation( 666 UpdateAndExpandInvalidation(
669 &invalidation, 667 &invalidation,
670 grow_right_tiling_size, 668 grow_right_tiling_size,
671 CornerSinglePixelRect(corner, grow_right_tiling_size)); 669 CornerSinglePixelRect(corner, grow_right_tiling_size));
672 670
673 // We should have lost the recordings in the right column. 671 // We should have lost the recordings in the right column.
674 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 672 EXPECT_EQ(8, pile_.tiling().num_tiles_x());
675 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 673 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
676 for (int i = 0; i < 6; ++i) { 674 for (int i = 0; i < 6; ++i) {
677 for (int j = 0; j < 6; ++j) { 675 for (int j = 0; j < 6; ++j) {
678 TestPicturePile::PictureMapKey key(i, j); 676 TestPicturePile::PictureMapKey key(i, j);
679 TestPicturePile::PictureMap& map = pile_->picture_map(); 677 TestPicturePile::PictureMap& map = pile_.picture_map();
680 TestPicturePile::PictureMap::iterator it = map.find(key); 678 TestPicturePile::PictureMap::iterator it = map.find(key);
681 EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture()); 679 EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture());
682 } 680 }
683 } 681 }
684 682
685 // We invalidated all new pixels in the recording. 683 // We invalidated all new pixels in the recording.
686 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), 684 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size),
687 gfx::Rect(base_tiling_size)); 685 gfx::Rect(base_tiling_size));
688 // But the new pixels don't cover the whole right_column. 686 // But the new pixels don't cover the whole right_column.
689 gfx::Rect right_column = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 687 gfx::Rect right_column = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
690 pile_->tiling().TileBounds(5, 5)); 688 pile_.tiling().TileBounds(5, 5));
691 EXPECT_FALSE(expected_invalidation.Contains(right_column)); 689 EXPECT_FALSE(expected_invalidation.Contains(right_column));
692 // We invalidated the entire old right column. 690 // We invalidated the entire old right column.
693 expected_invalidation.Union(right_column); 691 expected_invalidation.Union(right_column);
694 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 692 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
695 invalidation.Clear(); 693 invalidation.Clear();
696 694
697 UpdateWholePile(); 695 UpdateWholePile();
698 UpdateAndExpandInvalidation(&invalidation, 696 UpdateAndExpandInvalidation(&invalidation,
699 base_tiling_size, 697 base_tiling_size,
700 CornerSinglePixelRect(corner, base_tiling_size)); 698 CornerSinglePixelRect(corner, base_tiling_size));
701 699
702 // We should have lost the recordings that are now outside the tiling only. 700 // We should have lost the recordings that are now outside the tiling only.
703 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 701 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
704 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 702 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
705 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 703 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
706 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 704 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
707 TestPicturePile::PictureMapKey key(i, j); 705 TestPicturePile::PictureMapKey key(i, j);
708 TestPicturePile::PictureMap& map = pile_->picture_map(); 706 TestPicturePile::PictureMap& map = pile_.picture_map();
709 TestPicturePile::PictureMap::iterator it = map.find(key); 707 TestPicturePile::PictureMap::iterator it = map.find(key);
710 EXPECT_EQ(i < 6, it != map.end() && it->second.GetPicture()); 708 EXPECT_EQ(i < 6, it != map.end() && it->second.GetPicture());
711 } 709 }
712 } 710 }
713 711
714 // No invalidation when shrinking. 712 // No invalidation when shrinking.
715 expected_invalidation.Clear(); 713 expected_invalidation.Clear();
716 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 714 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
717 invalidation.Clear(); 715 invalidation.Clear();
718 716
719 UpdateWholePile(); 717 UpdateWholePile();
720 UpdateAndExpandInvalidation( 718 UpdateAndExpandInvalidation(
721 &invalidation, 719 &invalidation,
722 grow_both_tiling_size, 720 grow_both_tiling_size,
723 CornerSinglePixelRect(corner, grow_both_tiling_size)); 721 CornerSinglePixelRect(corner, grow_both_tiling_size));
724 722
725 // We should have lost the recordings in the right column and bottom row. 723 // We should have lost the recordings in the right column and bottom row.
726 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 724 EXPECT_EQ(8, pile_.tiling().num_tiles_x());
727 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 725 EXPECT_EQ(8, pile_.tiling().num_tiles_y());
728 for (int i = 0; i < 6; ++i) { 726 for (int i = 0; i < 6; ++i) {
729 for (int j = 0; j < 6; ++j) { 727 for (int j = 0; j < 6; ++j) {
730 TestPicturePile::PictureMapKey key(i, j); 728 TestPicturePile::PictureMapKey key(i, j);
731 TestPicturePile::PictureMap& map = pile_->picture_map(); 729 TestPicturePile::PictureMap& map = pile_.picture_map();
732 TestPicturePile::PictureMap::iterator it = map.find(key); 730 TestPicturePile::PictureMap::iterator it = map.find(key);
733 EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture()); 731 EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture());
734 } 732 }
735 } 733 }
736 734
737 // We invalidated all new pixels in the recording. 735 // We invalidated all new pixels in the recording.
738 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), 736 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size),
739 gfx::Rect(base_tiling_size)); 737 gfx::Rect(base_tiling_size));
740 // But the new pixels don't cover the whole right_column. 738 // But the new pixels don't cover the whole right_column.
741 Region right_column_and_bottom_row = 739 Region right_column_and_bottom_row =
742 UnionRegions(gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 740 UnionRegions(gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
743 pile_->tiling().TileBounds(5, 5)), 741 pile_.tiling().TileBounds(5, 5)),
744 gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 742 gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
745 pile_->tiling().TileBounds(5, 5))); 743 pile_.tiling().TileBounds(5, 5)));
746 EXPECT_FALSE(expected_invalidation.Contains(right_column_and_bottom_row)); 744 EXPECT_FALSE(expected_invalidation.Contains(right_column_and_bottom_row));
747 // We invalidated the entire old right column and the old bottom row. 745 // We invalidated the entire old right column and the old bottom row.
748 expected_invalidation.Union(right_column_and_bottom_row); 746 expected_invalidation.Union(right_column_and_bottom_row);
749 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 747 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
750 invalidation.Clear(); 748 invalidation.Clear();
751 749
752 UpdateWholePile(); 750 UpdateWholePile();
753 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect()); 751 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect());
754 752
755 // We should have lost the recordings that are now outside the tiling only. 753 // We should have lost the recordings that are now outside the tiling only.
756 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 754 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
757 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 755 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
758 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 756 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
759 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 757 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
760 TestPicturePile::PictureMapKey key(i, j); 758 TestPicturePile::PictureMapKey key(i, j);
761 TestPicturePile::PictureMap& map = pile_->picture_map(); 759 TestPicturePile::PictureMap& map = pile_.picture_map();
762 TestPicturePile::PictureMap::iterator it = map.find(key); 760 TestPicturePile::PictureMap::iterator it = map.find(key);
763 EXPECT_EQ(i < 6 && j < 6, it != map.end() && it->second.GetPicture()); 761 EXPECT_EQ(i < 6 && j < 6, it != map.end() && it->second.GetPicture());
764 } 762 }
765 } 763 }
766 764
767 // No invalidation when shrinking. 765 // No invalidation when shrinking.
768 expected_invalidation.Clear(); 766 expected_invalidation.Clear();
769 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 767 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
770 invalidation.Clear(); 768 invalidation.Clear();
771 } 769 }
(...skipping 11 matching lines...) Expand all
783 gfx::Size grow_down_tiling_size(6 * tile_size + offset, 781 gfx::Size grow_down_tiling_size(6 * tile_size + offset,
784 6 * tile_size + offset + 5); 782 6 * tile_size + offset + 5);
785 gfx::Size grow_right_tiling_size(6 * tile_size + offset + 5, 783 gfx::Size grow_right_tiling_size(6 * tile_size + offset + 5,
786 6 * tile_size + offset); 784 6 * tile_size + offset);
787 gfx::Size grow_both_tiling_size(6 * tile_size + offset + 5, 785 gfx::Size grow_both_tiling_size(6 * tile_size + offset + 5,
788 6 * tile_size + offset + 5); 786 6 * tile_size + offset + 5);
789 787
790 Region invalidation; 788 Region invalidation;
791 Region expected_invalidation; 789 Region expected_invalidation;
792 790
793 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 791 pile_.tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
794 SetTilingSize(base_tiling_size); 792 SetTilingSize(base_tiling_size);
795 793
796 // We should have a recording for every tile. 794 // We should have a recording for every tile.
797 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 795 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
798 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 796 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
799 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 797 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
800 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 798 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
801 TestPicturePile::PictureMapKey key(i, j); 799 TestPicturePile::PictureMapKey key(i, j);
802 TestPicturePile::PictureMap& map = pile_->picture_map(); 800 TestPicturePile::PictureMap& map = pile_.picture_map();
803 TestPicturePile::PictureMap::iterator it = map.find(key); 801 TestPicturePile::PictureMap::iterator it = map.find(key);
804 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 802 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
805 } 803 }
806 } 804 }
807 805
808 UpdateAndExpandInvalidation( 806 UpdateAndExpandInvalidation(
809 &invalidation, 807 &invalidation,
810 grow_down_tiling_size, 808 grow_down_tiling_size,
811 CornerSinglePixelRect(corner, grow_down_tiling_size)); 809 CornerSinglePixelRect(corner, grow_down_tiling_size));
812 810
813 // We should have lost the recordings in the bottom row that do not intersect 811 // We should have lost the recordings in the bottom row that do not intersect
814 // the interest rect. 812 // the interest rect.
815 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 813 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
816 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 814 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
817 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 815 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
818 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 816 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
819 TestPicturePile::PictureMapKey key(i, j); 817 TestPicturePile::PictureMapKey key(i, j);
820 TestPicturePile::PictureMap& map = pile_->picture_map(); 818 TestPicturePile::PictureMap& map = pile_.picture_map();
821 TestPicturePile::PictureMap::iterator it = map.find(key); 819 TestPicturePile::PictureMap::iterator it = map.find(key);
822 bool expect_tile; 820 bool expect_tile;
823 switch (corner) { 821 switch (corner) {
824 case TOP_LEFT: 822 case TOP_LEFT:
825 case TOP_RIGHT: 823 case TOP_RIGHT:
826 expect_tile = j < 5; 824 expect_tile = j < 5;
827 break; 825 break;
828 case BOTTOM_LEFT: 826 case BOTTOM_LEFT:
829 // The interest rect in the bottom left tile means we'll record it. 827 // The interest rect in the bottom left tile means we'll record it.
830 expect_tile = j < 5 || (j == 5 && i == 0); 828 expect_tile = j < 5 || (j == 5 && i == 0);
831 break; 829 break;
832 case BOTTOM_RIGHT: 830 case BOTTOM_RIGHT:
833 // The interest rect in the bottom right tile means we'll record it. 831 // The interest rect in the bottom right tile means we'll record it.
834 expect_tile = j < 5 || (j == 5 && i == 5); 832 expect_tile = j < 5 || (j == 5 && i == 5);
835 break; 833 break;
836 } 834 }
837 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); 835 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
838 } 836 }
839 } 837 }
840 838
841 // We invalidated the bottom row outside the new interest rect. The tile that 839 // We invalidated the bottom row outside the new interest rect. The tile that
842 // insects the interest rect in invalidated only on its new pixels. 840 // insects the interest rect in invalidated only on its new pixels.
843 switch (corner) { 841 switch (corner) {
844 case TOP_LEFT: 842 case TOP_LEFT:
845 case TOP_RIGHT: 843 case TOP_RIGHT:
846 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 844 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
847 pile_->tiling().TileBounds(5, 5)); 845 pile_.tiling().TileBounds(5, 5));
848 break; 846 break;
849 case BOTTOM_LEFT: 847 case BOTTOM_LEFT:
850 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(1, 5), 848 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(1, 5),
851 pile_->tiling().TileBounds(5, 5)); 849 pile_.tiling().TileBounds(5, 5));
852 expected_invalidation.Union(SubtractRects( 850 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(0, 5),
853 pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size))); 851 gfx::Rect(base_tiling_size)));
854 break; 852 break;
855 case BOTTOM_RIGHT: 853 case BOTTOM_RIGHT:
856 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 854 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
857 pile_->tiling().TileBounds(4, 5)); 855 pile_.tiling().TileBounds(4, 5));
858 expected_invalidation.Union(SubtractRects( 856 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 5),
859 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); 857 gfx::Rect(base_tiling_size)));
860 break; 858 break;
861 } 859 }
862 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 860 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
863 invalidation.Clear(); 861 invalidation.Clear();
864 862
865 UpdateWholePile(); 863 UpdateWholePile();
866 UpdateAndExpandInvalidation(&invalidation, 864 UpdateAndExpandInvalidation(&invalidation,
867 base_tiling_size, 865 base_tiling_size,
868 CornerSinglePixelRect(corner, base_tiling_size)); 866 CornerSinglePixelRect(corner, base_tiling_size));
869 867
870 // We should have lost nothing. 868 // We should have lost nothing.
871 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 869 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
872 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 870 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
873 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 871 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
874 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 872 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
875 TestPicturePile::PictureMapKey key(i, j); 873 TestPicturePile::PictureMapKey key(i, j);
876 TestPicturePile::PictureMap& map = pile_->picture_map(); 874 TestPicturePile::PictureMap& map = pile_.picture_map();
877 TestPicturePile::PictureMap::iterator it = map.find(key); 875 TestPicturePile::PictureMap::iterator it = map.find(key);
878 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 876 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
879 } 877 }
880 } 878 }
881 879
882 // We invalidated nothing. 880 // We invalidated nothing.
883 expected_invalidation.Clear(); 881 expected_invalidation.Clear();
884 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 882 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
885 invalidation.Clear(); 883 invalidation.Clear();
886 884
887 UpdateWholePile(); 885 UpdateWholePile();
888 UpdateAndExpandInvalidation( 886 UpdateAndExpandInvalidation(
889 &invalidation, 887 &invalidation,
890 grow_right_tiling_size, 888 grow_right_tiling_size,
891 CornerSinglePixelRect(corner, grow_right_tiling_size)); 889 CornerSinglePixelRect(corner, grow_right_tiling_size));
892 890
893 // We should have lost the recordings in the right column. 891 // We should have lost the recordings in the right column.
894 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 892 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
895 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 893 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
896 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 894 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
897 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 895 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
898 TestPicturePile::PictureMapKey key(i, j); 896 TestPicturePile::PictureMapKey key(i, j);
899 TestPicturePile::PictureMap& map = pile_->picture_map(); 897 TestPicturePile::PictureMap& map = pile_.picture_map();
900 TestPicturePile::PictureMap::iterator it = map.find(key); 898 TestPicturePile::PictureMap::iterator it = map.find(key);
901 bool expect_tile; 899 bool expect_tile;
902 switch (corner) { 900 switch (corner) {
903 case TOP_LEFT: 901 case TOP_LEFT:
904 case BOTTOM_LEFT: 902 case BOTTOM_LEFT:
905 expect_tile = i < 5; 903 expect_tile = i < 5;
906 break; 904 break;
907 case TOP_RIGHT: 905 case TOP_RIGHT:
908 // The interest rect in the top right tile means we'll record it. 906 // The interest rect in the top right tile means we'll record it.
909 expect_tile = i < 5 || (j == 0 && i == 5); 907 expect_tile = i < 5 || (j == 0 && i == 5);
910 break; 908 break;
911 case BOTTOM_RIGHT: 909 case BOTTOM_RIGHT:
912 // The interest rect in the bottom right tile means we'll record it. 910 // The interest rect in the bottom right tile means we'll record it.
913 expect_tile = i < 5 || (j == 5 && i == 5); 911 expect_tile = i < 5 || (j == 5 && i == 5);
914 break; 912 break;
915 } 913 }
916 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); 914 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
917 } 915 }
918 } 916 }
919 917
920 // We invalidated the right column outside the new interest rect. The tile 918 // We invalidated the right column outside the new interest rect. The tile
921 // that insects the interest rect in invalidated only on its new pixels. 919 // that insects the interest rect in invalidated only on its new pixels.
922 switch (corner) { 920 switch (corner) {
923 case TOP_LEFT: 921 case TOP_LEFT:
924 case BOTTOM_LEFT: 922 case BOTTOM_LEFT:
925 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 923 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
926 pile_->tiling().TileBounds(5, 5)); 924 pile_.tiling().TileBounds(5, 5));
927 break; 925 break;
928 case TOP_RIGHT: 926 case TOP_RIGHT:
929 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1), 927 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 1),
930 pile_->tiling().TileBounds(5, 5)); 928 pile_.tiling().TileBounds(5, 5));
931 expected_invalidation.Union(SubtractRects( 929 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 0),
932 pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size))); 930 gfx::Rect(base_tiling_size)));
933 break; 931 break;
934 case BOTTOM_RIGHT: 932 case BOTTOM_RIGHT:
935 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 933 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
936 pile_->tiling().TileBounds(5, 4)); 934 pile_.tiling().TileBounds(5, 4));
937 expected_invalidation.Union(SubtractRects( 935 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 5),
938 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); 936 gfx::Rect(base_tiling_size)));
939 break; 937 break;
940 } 938 }
941 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 939 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
942 invalidation.Clear(); 940 invalidation.Clear();
943 941
944 UpdateWholePile(); 942 UpdateWholePile();
945 UpdateAndExpandInvalidation(&invalidation, 943 UpdateAndExpandInvalidation(&invalidation,
946 base_tiling_size, 944 base_tiling_size,
947 CornerSinglePixelRect(corner, base_tiling_size)); 945 CornerSinglePixelRect(corner, base_tiling_size));
948 946
949 // We should have lost nothing. 947 // We should have lost nothing.
950 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 948 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
951 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 949 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
952 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 950 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
953 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 951 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
954 TestPicturePile::PictureMapKey key(i, j); 952 TestPicturePile::PictureMapKey key(i, j);
955 TestPicturePile::PictureMap& map = pile_->picture_map(); 953 TestPicturePile::PictureMap& map = pile_.picture_map();
956 TestPicturePile::PictureMap::iterator it = map.find(key); 954 TestPicturePile::PictureMap::iterator it = map.find(key);
957 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 955 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
958 } 956 }
959 } 957 }
960 958
961 // We invalidated nothing. 959 // We invalidated nothing.
962 expected_invalidation.Clear(); 960 expected_invalidation.Clear();
963 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 961 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
964 invalidation.Clear(); 962 invalidation.Clear();
965 963
966 UpdateWholePile(); 964 UpdateWholePile();
967 UpdateAndExpandInvalidation( 965 UpdateAndExpandInvalidation(
968 &invalidation, 966 &invalidation,
969 grow_both_tiling_size, 967 grow_both_tiling_size,
970 CornerSinglePixelRect(corner, grow_both_tiling_size)); 968 CornerSinglePixelRect(corner, grow_both_tiling_size));
971 969
972 // We should have lost the recordings in the right column and bottom row. The 970 // We should have lost the recordings in the right column and bottom row. The
973 // tile that insects the interest rect in invalidated only on its new pixels. 971 // tile that insects the interest rect in invalidated only on its new pixels.
974 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 972 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
975 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 973 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
976 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 974 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
977 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 975 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
978 TestPicturePile::PictureMapKey key(i, j); 976 TestPicturePile::PictureMapKey key(i, j);
979 TestPicturePile::PictureMap& map = pile_->picture_map(); 977 TestPicturePile::PictureMap& map = pile_.picture_map();
980 TestPicturePile::PictureMap::iterator it = map.find(key); 978 TestPicturePile::PictureMap::iterator it = map.find(key);
981 bool expect_tile; 979 bool expect_tile;
982 switch (corner) { 980 switch (corner) {
983 case TOP_LEFT: 981 case TOP_LEFT:
984 expect_tile = i < 5 && j < 5; 982 expect_tile = i < 5 && j < 5;
985 break; 983 break;
986 case TOP_RIGHT: 984 case TOP_RIGHT:
987 // The interest rect in the top right tile means we'll record it. 985 // The interest rect in the top right tile means we'll record it.
988 expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5); 986 expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5);
989 break; 987 break;
990 case BOTTOM_LEFT: 988 case BOTTOM_LEFT:
991 // The interest rect in the bottom left tile means we'll record it. 989 // The interest rect in the bottom left tile means we'll record it.
992 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0); 990 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0);
993 break; 991 break;
994 case BOTTOM_RIGHT: 992 case BOTTOM_RIGHT:
995 // The interest rect in the bottom right tile means we'll record it. 993 // The interest rect in the bottom right tile means we'll record it.
996 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5); 994 expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5);
997 break; 995 break;
998 } 996 }
999 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()) 997 EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture())
1000 << i << "," << j; 998 << i << "," << j;
1001 } 999 }
1002 } 1000 }
1003 1001
1004 // We invalidated the right column and the bottom row outside the new interest 1002 // We invalidated the right column and the bottom row outside the new interest
1005 // rect. The tile that insects the interest rect in invalidated only on its 1003 // rect. The tile that insects the interest rect in invalidated only on its
1006 // new pixels. 1004 // new pixels.
1007 switch (corner) { 1005 switch (corner) {
1008 case TOP_LEFT: 1006 case TOP_LEFT:
1009 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 1007 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
1010 pile_->tiling().TileBounds(5, 5)); 1008 pile_.tiling().TileBounds(5, 5));
1011 expected_invalidation.Union(gfx::UnionRects( 1009 expected_invalidation.Union(gfx::UnionRects(
1012 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5))); 1010 pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5)));
1013 break; 1011 break;
1014 case TOP_RIGHT: 1012 case TOP_RIGHT:
1015 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1), 1013 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 1),
1016 pile_->tiling().TileBounds(5, 5)); 1014 pile_.tiling().TileBounds(5, 5));
1017 expected_invalidation.Union(gfx::UnionRects( 1015 expected_invalidation.Union(gfx::UnionRects(
1018 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5))); 1016 pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5)));
1019 expected_invalidation.Union(SubtractRects( 1017 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 0),
1020 pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size))); 1018 gfx::Rect(base_tiling_size)));
1021 break; 1019 break;
1022 case BOTTOM_LEFT: 1020 case BOTTOM_LEFT:
1023 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 1021 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
1024 pile_->tiling().TileBounds(5, 5)); 1022 pile_.tiling().TileBounds(5, 5));
1025 expected_invalidation.Union(gfx::UnionRects( 1023 expected_invalidation.Union(gfx::UnionRects(
1026 pile_->tiling().TileBounds(1, 5), pile_->tiling().TileBounds(5, 5))); 1024 pile_.tiling().TileBounds(1, 5), pile_.tiling().TileBounds(5, 5)));
1027 expected_invalidation.Union(SubtractRects( 1025 expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(0, 5),
1028 pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size))); 1026 gfx::Rect(base_tiling_size)));
1029 break; 1027 break;
1030 case BOTTOM_RIGHT: 1028 case BOTTOM_RIGHT:
1031 expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 1029 expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
1032 pile_->tiling().TileBounds(5, 4)); 1030 pile_.tiling().TileBounds(5, 4));
1033 expected_invalidation.Union(gfx::UnionRects( 1031 expected_invalidation.Union(gfx::UnionRects(
1034 pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(4, 5))); 1032 pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(4, 5)));
1035 expected_invalidation.Union(SubtractRegions( 1033 expected_invalidation.Union(SubtractRegions(
1036 pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); 1034 pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
1037 break; 1035 break;
1038 } 1036 }
1039 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1037 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1040 invalidation.Clear(); 1038 invalidation.Clear();
1041 1039
1042 UpdateWholePile(); 1040 UpdateWholePile();
1043 UpdateAndExpandInvalidation(&invalidation, 1041 UpdateAndExpandInvalidation(&invalidation,
1044 base_tiling_size, 1042 base_tiling_size,
1045 CornerSinglePixelRect(corner, base_tiling_size)); 1043 CornerSinglePixelRect(corner, base_tiling_size));
1046 1044
1047 // We should have lost nothing. 1045 // We should have lost nothing.
1048 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1046 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1049 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1047 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1050 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1048 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1051 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1049 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1052 TestPicturePile::PictureMapKey key(i, j); 1050 TestPicturePile::PictureMapKey key(i, j);
1053 TestPicturePile::PictureMap& map = pile_->picture_map(); 1051 TestPicturePile::PictureMap& map = pile_.picture_map();
1054 TestPicturePile::PictureMap::iterator it = map.find(key); 1052 TestPicturePile::PictureMap::iterator it = map.find(key);
1055 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1053 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1056 } 1054 }
1057 } 1055 }
1058 1056
1059 // We invalidated nothing. 1057 // We invalidated nothing.
1060 expected_invalidation.Clear(); 1058 expected_invalidation.Clear();
1061 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1059 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1062 invalidation.Clear(); 1060 invalidation.Clear();
1063 } 1061 }
1064 1062
1065 INSTANTIATE_TEST_CASE_P( 1063 INSTANTIATE_TEST_CASE_P(
1066 PicturePileResizeCornerTests, 1064 PicturePileResizeCornerTests,
1067 PicturePileResizeCornerTest, 1065 PicturePileResizeCornerTest,
1068 ::testing::Values(TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT)); 1066 ::testing::Values(TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT));
1069 1067
1070 TEST_F(PicturePileTest, ResizePileInsideInterestRect) { 1068 TEST_F(PicturePileTest, ResizePileInsideInterestRect) {
1071 // This size chosen to be small enough that all the rects below fit inside the 1069 // This size chosen to be small enough that all the rects below fit inside the
1072 // the interest rect, so they are smaller than kPixelDistanceToRecord in each 1070 // the interest rect, so they are smaller than kPixelDistanceToRecord in each
1073 // dimension. 1071 // dimension.
1074 int tile_size = 100; 1072 int tile_size = 100;
1075 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size); 1073 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size);
1076 gfx::Size grow_down_tiling_size(5 * tile_size, 7 * tile_size); 1074 gfx::Size grow_down_tiling_size(5 * tile_size, 7 * tile_size);
1077 gfx::Size grow_right_tiling_size(7 * tile_size, 5 * tile_size); 1075 gfx::Size grow_right_tiling_size(7 * tile_size, 5 * tile_size);
1078 gfx::Size grow_both_tiling_size(7 * tile_size, 7 * tile_size); 1076 gfx::Size grow_both_tiling_size(7 * tile_size, 7 * tile_size);
1079 1077
1080 Region invalidation; 1078 Region invalidation;
1081 Region expected_invalidation; 1079 Region expected_invalidation;
1082 1080
1083 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 1081 pile_.tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
1084 SetTilingSize(base_tiling_size); 1082 SetTilingSize(base_tiling_size);
1085 1083
1086 // We should have a recording for every tile. 1084 // We should have a recording for every tile.
1087 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1085 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1088 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1086 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1089 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1087 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1090 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1088 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1091 TestPicturePile::PictureMapKey key(i, j); 1089 TestPicturePile::PictureMapKey key(i, j);
1092 TestPicturePile::PictureMap& map = pile_->picture_map(); 1090 TestPicturePile::PictureMap& map = pile_.picture_map();
1093 TestPicturePile::PictureMap::iterator it = map.find(key); 1091 TestPicturePile::PictureMap::iterator it = map.find(key);
1094 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1092 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1095 } 1093 }
1096 } 1094 }
1097 1095
1098 UpdateAndExpandInvalidation( 1096 UpdateAndExpandInvalidation(
1099 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1)); 1097 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1));
1100 1098
1101 // We should have a recording for every tile. 1099 // We should have a recording for every tile.
1102 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1100 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1103 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 1101 EXPECT_EQ(8, pile_.tiling().num_tiles_y());
1104 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1102 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1105 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1103 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1106 TestPicturePile::PictureMapKey key(i, j); 1104 TestPicturePile::PictureMapKey key(i, j);
1107 TestPicturePile::PictureMap& map = pile_->picture_map(); 1105 TestPicturePile::PictureMap& map = pile_.picture_map();
1108 TestPicturePile::PictureMap::iterator it = map.find(key); 1106 TestPicturePile::PictureMap::iterator it = map.find(key);
1109 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1107 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1110 } 1108 }
1111 } 1109 }
1112 1110
1113 // We invalidated the newly exposed pixels on the bottom row of tiles. 1111 // We invalidated the newly exposed pixels on the bottom row of tiles.
1114 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), 1112 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size),
1115 gfx::Rect(base_tiling_size)); 1113 gfx::Rect(base_tiling_size));
1116 Region bottom_row_new_pixels = 1114 Region bottom_row_new_pixels =
1117 SubtractRegions(gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 1115 SubtractRegions(gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
1118 pile_->tiling().TileBounds(5, 5)), 1116 pile_.tiling().TileBounds(5, 5)),
1119 gfx::Rect(base_tiling_size)); 1117 gfx::Rect(base_tiling_size));
1120 EXPECT_TRUE(expected_invalidation.Contains(bottom_row_new_pixels)); 1118 EXPECT_TRUE(expected_invalidation.Contains(bottom_row_new_pixels));
1121 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1119 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1122 invalidation.Clear(); 1120 invalidation.Clear();
1123 1121
1124 UpdateWholePile(); 1122 UpdateWholePile();
1125 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 1123 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1));
1126 1124
1127 // We should have a recording for every tile. 1125 // We should have a recording for every tile.
1128 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1126 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1129 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1127 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1130 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1128 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1131 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1129 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1132 TestPicturePile::PictureMapKey key(i, j); 1130 TestPicturePile::PictureMapKey key(i, j);
1133 TestPicturePile::PictureMap& map = pile_->picture_map(); 1131 TestPicturePile::PictureMap& map = pile_.picture_map();
1134 TestPicturePile::PictureMap::iterator it = map.find(key); 1132 TestPicturePile::PictureMap::iterator it = map.find(key);
1135 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1133 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1136 } 1134 }
1137 } 1135 }
1138 1136
1139 // No invalidation when shrinking. 1137 // No invalidation when shrinking.
1140 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1138 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1141 invalidation.Clear(); 1139 invalidation.Clear();
1142 1140
1143 UpdateWholePile(); 1141 UpdateWholePile();
1144 UpdateAndExpandInvalidation( 1142 UpdateAndExpandInvalidation(
1145 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1)); 1143 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1));
1146 1144
1147 // We should have a recording for every tile. 1145 // We should have a recording for every tile.
1148 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 1146 EXPECT_EQ(8, pile_.tiling().num_tiles_x());
1149 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1147 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1150 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1148 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1151 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1149 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1152 TestPicturePile::PictureMapKey key(i, j); 1150 TestPicturePile::PictureMapKey key(i, j);
1153 TestPicturePile::PictureMap& map = pile_->picture_map(); 1151 TestPicturePile::PictureMap& map = pile_.picture_map();
1154 TestPicturePile::PictureMap::iterator it = map.find(key); 1152 TestPicturePile::PictureMap::iterator it = map.find(key);
1155 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1153 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1156 } 1154 }
1157 } 1155 }
1158 1156
1159 // We invalidated the newly exposed pixels on the right column of tiles. 1157 // We invalidated the newly exposed pixels on the right column of tiles.
1160 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), 1158 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size),
1161 gfx::Rect(base_tiling_size)); 1159 gfx::Rect(base_tiling_size));
1162 Region right_column_new_pixels = 1160 Region right_column_new_pixels =
1163 SubtractRegions(gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 1161 SubtractRegions(gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
1164 pile_->tiling().TileBounds(5, 5)), 1162 pile_.tiling().TileBounds(5, 5)),
1165 gfx::Rect(base_tiling_size)); 1163 gfx::Rect(base_tiling_size));
1166 EXPECT_TRUE(expected_invalidation.Contains(right_column_new_pixels)); 1164 EXPECT_TRUE(expected_invalidation.Contains(right_column_new_pixels));
1167 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1165 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1168 invalidation.Clear(); 1166 invalidation.Clear();
1169 1167
1170 UpdateWholePile(); 1168 UpdateWholePile();
1171 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 1169 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1));
1172 1170
1173 // We should have lost the recordings that are now outside the tiling only. 1171 // We should have lost the recordings that are now outside the tiling only.
1174 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1172 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1175 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1173 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1176 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1174 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1177 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1175 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1178 TestPicturePile::PictureMapKey key(i, j); 1176 TestPicturePile::PictureMapKey key(i, j);
1179 TestPicturePile::PictureMap& map = pile_->picture_map(); 1177 TestPicturePile::PictureMap& map = pile_.picture_map();
1180 TestPicturePile::PictureMap::iterator it = map.find(key); 1178 TestPicturePile::PictureMap::iterator it = map.find(key);
1181 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1179 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1182 } 1180 }
1183 } 1181 }
1184 1182
1185 // No invalidation when shrinking. 1183 // No invalidation when shrinking.
1186 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1184 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1187 invalidation.Clear(); 1185 invalidation.Clear();
1188 1186
1189 UpdateWholePile(); 1187 UpdateWholePile();
1190 UpdateAndExpandInvalidation( 1188 UpdateAndExpandInvalidation(
1191 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1)); 1189 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1));
1192 1190
1193 // We should have a recording for every tile. 1191 // We should have a recording for every tile.
1194 EXPECT_EQ(8, pile_->tiling().num_tiles_x()); 1192 EXPECT_EQ(8, pile_.tiling().num_tiles_x());
1195 EXPECT_EQ(8, pile_->tiling().num_tiles_y()); 1193 EXPECT_EQ(8, pile_.tiling().num_tiles_y());
1196 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1194 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1197 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1195 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1198 TestPicturePile::PictureMapKey key(i, j); 1196 TestPicturePile::PictureMapKey key(i, j);
1199 TestPicturePile::PictureMap& map = pile_->picture_map(); 1197 TestPicturePile::PictureMap& map = pile_.picture_map();
1200 TestPicturePile::PictureMap::iterator it = map.find(key); 1198 TestPicturePile::PictureMap::iterator it = map.find(key);
1201 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1199 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1202 } 1200 }
1203 } 1201 }
1204 1202
1205 // We invalidated the newly exposed pixels on the bottom row and right column 1203 // We invalidated the newly exposed pixels on the bottom row and right column
1206 // of tiles. 1204 // of tiles.
1207 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), 1205 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size),
1208 gfx::Rect(base_tiling_size)); 1206 gfx::Rect(base_tiling_size));
1209 Region bottom_row_and_right_column_new_pixels = SubtractRegions( 1207 Region bottom_row_and_right_column_new_pixels = SubtractRegions(
1210 UnionRegions(gfx::UnionRects(pile_->tiling().TileBounds(0, 5), 1208 UnionRegions(gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
1211 pile_->tiling().TileBounds(5, 5)), 1209 pile_.tiling().TileBounds(5, 5)),
1212 gfx::UnionRects(pile_->tiling().TileBounds(5, 0), 1210 gfx::UnionRects(pile_.tiling().TileBounds(5, 0),
1213 pile_->tiling().TileBounds(5, 5))), 1211 pile_.tiling().TileBounds(5, 5))),
1214 gfx::Rect(base_tiling_size)); 1212 gfx::Rect(base_tiling_size));
1215 EXPECT_TRUE( 1213 EXPECT_TRUE(
1216 expected_invalidation.Contains(bottom_row_and_right_column_new_pixels)); 1214 expected_invalidation.Contains(bottom_row_and_right_column_new_pixels));
1217 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1215 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1218 invalidation.Clear(); 1216 invalidation.Clear();
1219 1217
1220 UpdateWholePile(); 1218 UpdateWholePile();
1221 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect()); 1219 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect());
1222 1220
1223 // We should have lost the recordings that are now outside the tiling only. 1221 // We should have lost the recordings that are now outside the tiling only.
1224 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1222 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1225 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1223 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1226 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1224 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1227 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1225 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1228 TestPicturePile::PictureMapKey key(i, j); 1226 TestPicturePile::PictureMapKey key(i, j);
1229 TestPicturePile::PictureMap& map = pile_->picture_map(); 1227 TestPicturePile::PictureMap& map = pile_.picture_map();
1230 TestPicturePile::PictureMap::iterator it = map.find(key); 1228 TestPicturePile::PictureMap::iterator it = map.find(key);
1231 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1229 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1232 } 1230 }
1233 } 1231 }
1234 1232
1235 // No invalidation when shrinking. 1233 // No invalidation when shrinking.
1236 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1234 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1237 invalidation.Clear(); 1235 invalidation.Clear();
1238 } 1236 }
1239 1237
1240 TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { 1238 TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) {
1241 // This size chosen to be small enough that all the rects below fit inside the 1239 // This size chosen to be small enough that all the rects below fit inside the
1242 // the interest rect, so they are smaller than kPixelDistanceToRecord in each 1240 // the interest rect, so they are smaller than kPixelDistanceToRecord in each
1243 // dimension. 1241 // dimension.
1244 int tile_size = 100; 1242 int tile_size = 100;
1245 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size); 1243 gfx::Size base_tiling_size(5 * tile_size, 5 * tile_size);
1246 gfx::Size grow_down_tiling_size(5 * tile_size, 5 * tile_size + 5); 1244 gfx::Size grow_down_tiling_size(5 * tile_size, 5 * tile_size + 5);
1247 gfx::Size grow_right_tiling_size(5 * tile_size + 5, 5 * tile_size); 1245 gfx::Size grow_right_tiling_size(5 * tile_size + 5, 5 * tile_size);
1248 gfx::Size grow_both_tiling_size(5 * tile_size + 5, 5 * tile_size + 5); 1246 gfx::Size grow_both_tiling_size(5 * tile_size + 5, 5 * tile_size + 5);
1249 1247
1250 Region invalidation; 1248 Region invalidation;
1251 Region expected_invalidation; 1249 Region expected_invalidation;
1252 1250
1253 pile_->tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size)); 1251 pile_.tiling().SetMaxTextureSize(gfx::Size(tile_size, tile_size));
1254 SetTilingSize(base_tiling_size); 1252 SetTilingSize(base_tiling_size);
1255 1253
1256 // We should have a recording for every tile. 1254 // We should have a recording for every tile.
1257 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1255 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1258 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1256 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1259 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1257 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1260 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1258 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1261 TestPicturePile::PictureMapKey key(i, j); 1259 TestPicturePile::PictureMapKey key(i, j);
1262 TestPicturePile::PictureMap& map = pile_->picture_map(); 1260 TestPicturePile::PictureMap& map = pile_.picture_map();
1263 TestPicturePile::PictureMap::iterator it = map.find(key); 1261 TestPicturePile::PictureMap::iterator it = map.find(key);
1264 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1262 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1265 } 1263 }
1266 } 1264 }
1267 1265
1268 UpdateAndExpandInvalidation( 1266 UpdateAndExpandInvalidation(
1269 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1)); 1267 &invalidation, grow_down_tiling_size, gfx::Rect(1, 1));
1270 1268
1271 // We should have a recording for every tile. 1269 // We should have a recording for every tile.
1272 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1270 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1273 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1271 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1274 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1272 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1275 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1273 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1276 TestPicturePile::PictureMapKey key(i, j); 1274 TestPicturePile::PictureMapKey key(i, j);
1277 TestPicturePile::PictureMap& map = pile_->picture_map(); 1275 TestPicturePile::PictureMap& map = pile_.picture_map();
1278 TestPicturePile::PictureMap::iterator it = map.find(key); 1276 TestPicturePile::PictureMap::iterator it = map.find(key);
1279 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1277 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1280 } 1278 }
1281 } 1279 }
1282 1280
1283 // We invalidated the newly exposed pixels. 1281 // We invalidated the newly exposed pixels.
1284 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), 1282 expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size),
1285 gfx::Rect(base_tiling_size)); 1283 gfx::Rect(base_tiling_size));
1286 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1284 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1287 invalidation.Clear(); 1285 invalidation.Clear();
1288 1286
1289 UpdateWholePile(); 1287 UpdateWholePile();
1290 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 1288 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1));
1291 1289
1292 // We should have a recording for every tile. 1290 // We should have a recording for every tile.
1293 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1291 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1294 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1292 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1295 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1293 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1296 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1294 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1297 TestPicturePile::PictureMapKey key(i, j); 1295 TestPicturePile::PictureMapKey key(i, j);
1298 TestPicturePile::PictureMap& map = pile_->picture_map(); 1296 TestPicturePile::PictureMap& map = pile_.picture_map();
1299 TestPicturePile::PictureMap::iterator it = map.find(key); 1297 TestPicturePile::PictureMap::iterator it = map.find(key);
1300 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1298 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1301 } 1299 }
1302 } 1300 }
1303 1301
1304 // No invalidation when shrinking. 1302 // No invalidation when shrinking.
1305 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1303 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1306 invalidation.Clear(); 1304 invalidation.Clear();
1307 1305
1308 UpdateWholePile(); 1306 UpdateWholePile();
1309 UpdateAndExpandInvalidation( 1307 UpdateAndExpandInvalidation(
1310 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1)); 1308 &invalidation, grow_right_tiling_size, gfx::Rect(1, 1));
1311 1309
1312 // We should have a recording for every tile. 1310 // We should have a recording for every tile.
1313 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1311 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1314 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1312 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1315 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1313 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1316 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1314 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1317 TestPicturePile::PictureMapKey key(i, j); 1315 TestPicturePile::PictureMapKey key(i, j);
1318 TestPicturePile::PictureMap& map = pile_->picture_map(); 1316 TestPicturePile::PictureMap& map = pile_.picture_map();
1319 TestPicturePile::PictureMap::iterator it = map.find(key); 1317 TestPicturePile::PictureMap::iterator it = map.find(key);
1320 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1318 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1321 } 1319 }
1322 } 1320 }
1323 1321
1324 // We invalidated the newly exposed pixels. 1322 // We invalidated the newly exposed pixels.
1325 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), 1323 expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size),
1326 gfx::Rect(base_tiling_size)); 1324 gfx::Rect(base_tiling_size));
1327 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1325 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1328 invalidation.Clear(); 1326 invalidation.Clear();
1329 1327
1330 UpdateWholePile(); 1328 UpdateWholePile();
1331 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1)); 1329 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect(1, 1));
1332 1330
1333 // We should have lost the recordings that are now outside the tiling only. 1331 // We should have lost the recordings that are now outside the tiling only.
1334 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1332 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1335 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1333 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1336 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1334 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1337 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1335 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1338 TestPicturePile::PictureMapKey key(i, j); 1336 TestPicturePile::PictureMapKey key(i, j);
1339 TestPicturePile::PictureMap& map = pile_->picture_map(); 1337 TestPicturePile::PictureMap& map = pile_.picture_map();
1340 TestPicturePile::PictureMap::iterator it = map.find(key); 1338 TestPicturePile::PictureMap::iterator it = map.find(key);
1341 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1339 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1342 } 1340 }
1343 } 1341 }
1344 1342
1345 // No invalidation when shrinking. 1343 // No invalidation when shrinking.
1346 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1344 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1347 invalidation.Clear(); 1345 invalidation.Clear();
1348 1346
1349 UpdateWholePile(); 1347 UpdateWholePile();
1350 UpdateAndExpandInvalidation( 1348 UpdateAndExpandInvalidation(
1351 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1)); 1349 &invalidation, grow_both_tiling_size, gfx::Rect(1, 1));
1352 1350
1353 // We should have a recording for every tile. 1351 // We should have a recording for every tile.
1354 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1352 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1355 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1353 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1356 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1354 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1357 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1355 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1358 TestPicturePile::PictureMapKey key(i, j); 1356 TestPicturePile::PictureMapKey key(i, j);
1359 TestPicturePile::PictureMap& map = pile_->picture_map(); 1357 TestPicturePile::PictureMap& map = pile_.picture_map();
1360 TestPicturePile::PictureMap::iterator it = map.find(key); 1358 TestPicturePile::PictureMap::iterator it = map.find(key);
1361 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1359 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1362 } 1360 }
1363 } 1361 }
1364 1362
1365 // We invalidated the newly exposed pixels. 1363 // We invalidated the newly exposed pixels.
1366 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), 1364 expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size),
1367 gfx::Rect(base_tiling_size)); 1365 gfx::Rect(base_tiling_size));
1368 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); 1366 EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
1369 invalidation.Clear(); 1367 invalidation.Clear();
1370 1368
1371 UpdateWholePile(); 1369 UpdateWholePile();
1372 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect()); 1370 UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect());
1373 1371
1374 // We should have lost the recordings that are now outside the tiling only. 1372 // We should have lost the recordings that are now outside the tiling only.
1375 EXPECT_EQ(6, pile_->tiling().num_tiles_x()); 1373 EXPECT_EQ(6, pile_.tiling().num_tiles_x());
1376 EXPECT_EQ(6, pile_->tiling().num_tiles_y()); 1374 EXPECT_EQ(6, pile_.tiling().num_tiles_y());
1377 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) { 1375 for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) {
1378 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) { 1376 for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) {
1379 TestPicturePile::PictureMapKey key(i, j); 1377 TestPicturePile::PictureMapKey key(i, j);
1380 TestPicturePile::PictureMap& map = pile_->picture_map(); 1378 TestPicturePile::PictureMap& map = pile_.picture_map();
1381 TestPicturePile::PictureMap::iterator it = map.find(key); 1379 TestPicturePile::PictureMap::iterator it = map.find(key);
1382 EXPECT_TRUE(it != map.end() && it->second.GetPicture()); 1380 EXPECT_TRUE(it != map.end() && it->second.GetPicture());
1383 } 1381 }
1384 } 1382 }
1385 1383
1386 // No invalidation when shrinking. 1384 // No invalidation when shrinking.
1387 EXPECT_EQ(Region().ToString(), invalidation.ToString()); 1385 EXPECT_EQ(Region().ToString(), invalidation.ToString());
1388 invalidation.Clear(); 1386 invalidation.Clear();
1389 } 1387 }
1390 1388
1391 TEST_F(PicturePileTest, SolidRectangleIsSolid) { 1389 TEST_F(PicturePileTest, SolidRectangleIsSolid) {
1392 // If the client has no contents, the solid state will be true. 1390 // If the client has no contents, the solid state will be true.
1393 Region invalidation1(tiling_rect()); 1391 Region invalidation1(tiling_rect());
1394 UpdateAndExpandInvalidation(&invalidation1, tiling_size(), tiling_rect()); 1392 UpdateAndExpandInvalidation(&invalidation1, tiling_size(), tiling_rect());
1395 EXPECT_TRUE(pile_->is_solid_color()); 1393 EXPECT_TRUE(pile_.is_solid_color());
1396 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), pile_->solid_color()); 1394 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), pile_.solid_color());
1397 1395
1398 // If there is a single rect that covers the view, the solid 1396 // If there is a single rect that covers the view, the solid
1399 // state will be true. 1397 // state will be true.
1400 SkPaint paint; 1398 SkPaint paint;
1401 paint.setColor(SK_ColorCYAN); 1399 paint.setColor(SK_ColorCYAN);
1402 client_.add_draw_rect(tiling_rect(), paint); 1400 client_.add_draw_rect(tiling_rect(), paint);
1403 Region invalidation2(tiling_rect()); 1401 Region invalidation2(tiling_rect());
1404 UpdateAndExpandInvalidation(&invalidation2, tiling_size(), tiling_rect()); 1402 UpdateAndExpandInvalidation(&invalidation2, tiling_size(), tiling_rect());
1405 EXPECT_TRUE(pile_->is_solid_color()); 1403 EXPECT_TRUE(pile_.is_solid_color());
1406 EXPECT_EQ(SK_ColorCYAN, pile_->solid_color()); 1404 EXPECT_EQ(SK_ColorCYAN, pile_.solid_color());
1407 1405
1408 // If a second smaller rect is draw that doesn't cover the viewport 1406 // If a second smaller rect is draw that doesn't cover the viewport
1409 // completely, the solid state will be false. 1407 // completely, the solid state will be false.
1410 gfx::Rect smallRect = tiling_rect(); 1408 gfx::Rect smallRect = tiling_rect();
1411 smallRect.Inset(10, 10, 10, 10); 1409 smallRect.Inset(10, 10, 10, 10);
1412 client_.add_draw_rect(smallRect, paint); 1410 client_.add_draw_rect(smallRect, paint);
1413 Region invalidation3(tiling_rect()); 1411 Region invalidation3(tiling_rect());
1414 UpdateAndExpandInvalidation(&invalidation3, tiling_size(), tiling_rect()); 1412 UpdateAndExpandInvalidation(&invalidation3, tiling_size(), tiling_rect());
1415 EXPECT_FALSE(pile_->is_solid_color()); 1413 EXPECT_FALSE(pile_.is_solid_color());
1416 1414
1417 // If a third rect is drawn over everything, we should be solid again. 1415 // If a third rect is drawn over everything, we should be solid again.
1418 paint.setColor(SK_ColorRED); 1416 paint.setColor(SK_ColorRED);
1419 client_.add_draw_rect(tiling_rect(), paint); 1417 client_.add_draw_rect(tiling_rect(), paint);
1420 Region invalidation4(tiling_rect()); 1418 Region invalidation4(tiling_rect());
1421 UpdateAndExpandInvalidation(&invalidation4, tiling_size(), tiling_rect()); 1419 UpdateAndExpandInvalidation(&invalidation4, tiling_size(), tiling_rect());
1422 EXPECT_TRUE(pile_->is_solid_color()); 1420 EXPECT_TRUE(pile_.is_solid_color());
1423 EXPECT_EQ(SK_ColorRED, pile_->solid_color()); 1421 EXPECT_EQ(SK_ColorRED, pile_.solid_color());
1424 1422
1425 // If we draw too many, we don't bother doing the analysis and we should no 1423 // If we draw too many, we don't bother doing the analysis and we should no
1426 // longer be in a solid state. There are 8 rects, two clips and a translate. 1424 // longer be in a solid state. There are 8 rects, two clips and a translate.
1427 client_.add_draw_rect(tiling_rect(), paint); 1425 client_.add_draw_rect(tiling_rect(), paint);
1428 client_.add_draw_rect(tiling_rect(), paint); 1426 client_.add_draw_rect(tiling_rect(), paint);
1429 client_.add_draw_rect(tiling_rect(), paint); 1427 client_.add_draw_rect(tiling_rect(), paint);
1430 client_.add_draw_rect(tiling_rect(), paint); 1428 client_.add_draw_rect(tiling_rect(), paint);
1431 client_.add_draw_rect(tiling_rect(), paint); 1429 client_.add_draw_rect(tiling_rect(), paint);
1432 Region invalidation5(tiling_rect()); 1430 Region invalidation5(tiling_rect());
1433 UpdateAndExpandInvalidation(&invalidation5, tiling_size(), tiling_rect()); 1431 UpdateAndExpandInvalidation(&invalidation5, tiling_size(), tiling_rect());
1434 EXPECT_FALSE(pile_->is_solid_color()); 1432 EXPECT_FALSE(pile_.is_solid_color());
1435 } 1433 }
1436 1434
1437 } // namespace 1435 } // namespace
1438 } // namespace cc 1436 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_pile_impl_unittest.cc ('k') | cc/resources/pixel_buffer_raster_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698