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

Side by Side Diff: cc/playback/discardable_image_map_unittest.cc

Issue 2229603002: cc: Do a safe intersect when gathering images. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/playback/discardable_image_map.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/playback/discardable_image_map.h" 5 #include "cc/playback/discardable_image_map.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 DiscardableImageMap image_map; 301 DiscardableImageMap image_map;
302 { 302 {
303 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, 303 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
304 visible_rect.size()); 304 visible_rect.size());
305 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); 305 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
306 } 306 }
307 std::vector<PositionDrawImage> images = 307 std::vector<PositionDrawImage> images =
308 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); 308 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
309 EXPECT_EQ(1u, images.size()); 309 EXPECT_EQ(1u, images.size());
310 EXPECT_TRUE(images[0].image == discardable_image); 310 EXPECT_TRUE(images[0].image == discardable_image);
311 EXPECT_EQ(gfx::Rect(0, 0, 1 << 25, 1 << 25), images[0].image_rect); 311 EXPECT_EQ(gfx::Rect(0, 0, 2048, 2048), images[0].image_rect);
312 } 312 }
313 313
314 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) { 314 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) {
315 gfx::Rect visible_rect(2048, 2048); 315 gfx::Rect visible_rect(2048, 2048);
316 FakeContentLayerClient content_layer_client; 316 FakeContentLayerClient content_layer_client;
317 content_layer_client.set_bounds(visible_rect.size()); 317 content_layer_client.set_bounds(visible_rect.size());
318 318
319 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); 319 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10));
320 320
321 DiscardableImageMap image_map; 321 DiscardableImageMap image_map;
322 { 322 {
323 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, 323 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
324 visible_rect.size()); 324 visible_rect.size());
325 { 325 {
326 std::unique_ptr<SkPaint> paint(new SkPaint()); 326 std::unique_ptr<SkPaint> paint(new SkPaint());
327 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), 327 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect),
328 paint.get()); 328 paint.get());
329 } 329 }
330 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); 330 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr);
331 generator.canvas()->restore(); 331 generator.canvas()->restore();
332 } 332 }
333 333
334 std::vector<PositionDrawImage> images = 334 std::vector<PositionDrawImage> images =
335 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); 335 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
336 EXPECT_EQ(1u, images.size()); 336 EXPECT_EQ(1u, images.size());
337 EXPECT_TRUE(images[0].image == discardable_image); 337 EXPECT_TRUE(images[0].image == discardable_image);
338 } 338 }
339 339
340 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
341 gfx::Rect visible_rect(2048, 2048);
342 FakeContentLayerClient content_layer_client;
343 content_layer_client.set_bounds(visible_rect.size());
344
345 int dimension = std::numeric_limits<int>::max();
346 sk_sp<SkImage> discardable_image =
347 CreateDiscardableImage(gfx::Size(dimension, dimension));
348 SkPaint paint;
349 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42),
350 paint);
351
352 scoped_refptr<DisplayItemList> display_list =
353 content_layer_client.PaintContentsToDisplayList(
354 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
355
356 DiscardableImageMap image_map;
357 {
358 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
359 visible_rect.size());
360 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
361 }
362 std::vector<PositionDrawImage> images =
363 GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1));
364 EXPECT_EQ(1u, images.size());
365 EXPECT_TRUE(images[0].image == discardable_image);
366 EXPECT_EQ(gfx::Rect(42, 42, 2006, 2006), images[0].image_rect);
367 }
368
369 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) {
370 int dimension = static_cast<int>(
371 static_cast<float>(std::numeric_limits<int>::max() - 64));
enne (OOO) 2016/08/10 00:07:12 This really needs a comment.
vmpstr 2016/08/10 19:19:39 Done.
372 gfx::Rect visible_rect(dimension, dimension);
373 FakeContentLayerClient content_layer_client;
374 content_layer_client.set_bounds(visible_rect.size());
375
376 sk_sp<SkImage> discardable_image =
377 CreateDiscardableImage(gfx::Size(dimension, dimension));
378 SkPaint paint;
379 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0),
380 paint);
381 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0),
382 paint);
383 content_layer_client.add_draw_image(discardable_image,
384 gfx::Point(-10000, 500), paint);
385
386 scoped_refptr<DisplayItemList> display_list =
387 content_layer_client.PaintContentsToDisplayList(
388 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
389
390 DiscardableImageMap image_map;
391 {
392 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
393 visible_rect.size());
394 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
395 }
396 std::vector<PositionDrawImage> images =
397 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
398 EXPECT_EQ(1u, images.size());
399 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect);
400
401 images = GetDiscardableImagesInRect(image_map, gfx::Rect(10000, 0, 1, 1));
402 EXPECT_EQ(2u, images.size());
403 int expected10k = static_cast<int>(static_cast<float>(dimension - 10000));
404 int expected500 = static_cast<int>(static_cast<float>(dimension - 500));
405 EXPECT_EQ(gfx::Rect(10000, 0, expected10k, dimension), images[1].image_rect);
406 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect);
407
408 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1));
409 EXPECT_EQ(2u, images.size());
410 EXPECT_EQ(gfx::Rect(0, 500, expected10k, expected500), images[1].image_rect);
411 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect);
412 }
413
414 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
415 gfx::Rect visible_rect(1000, 1000);
416 FakeContentLayerClient content_layer_client;
417 content_layer_client.set_bounds(visible_rect.size());
418
419 sk_sp<SkImage> discardable_image =
420 CreateDiscardableImage(gfx::Size(100, 100));
421 sk_sp<SkImage> long_discardable_image =
422 CreateDiscardableImage(gfx::Size(10000, 100));
423
424 SkPaint paint;
425 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11),
426 paint);
427 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951),
428 paint);
429 content_layer_client.add_draw_image(long_discardable_image,
430 gfx::Point(-100, 500), paint);
431
432 scoped_refptr<DisplayItemList> display_list =
433 content_layer_client.PaintContentsToDisplayList(
434 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
435
436 DiscardableImageMap image_map;
437 {
438 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
439 visible_rect.size());
440 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
441 }
442 std::vector<PositionDrawImage> images =
443 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
444 EXPECT_EQ(1u, images.size());
445 EXPECT_EQ(gfx::Rect(0, 0, 90, 89), images[0].image_rect);
446
447 images = GetDiscardableImagesInRect(image_map, gfx::Rect(999, 999, 1, 1));
448 EXPECT_EQ(1u, images.size());
449 EXPECT_EQ(gfx::Rect(950, 951, 50, 49), images[0].image_rect);
450
451 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1));
452 EXPECT_EQ(1u, images.size());
453 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), images[0].image_rect);
454 }
455
340 } // namespace cc 456 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/discardable_image_map.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698