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