| OLD | NEW |
| 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 |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "cc/base/region.h" | 13 #include "cc/base/region.h" |
| 14 #include "cc/test/fake_content_layer_client.h" | 14 #include "cc/test/fake_content_layer_client.h" |
| 15 #include "cc/test/fake_recording_source.h" | 15 #include "cc/test/fake_recording_source.h" |
| 16 #include "cc/test/skia_common.h" | 16 #include "cc/test/skia_common.h" |
| 17 #include "skia/ext/cdl_paint.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 #include "third_party/skia/include/core/SkCanvas.h" | 19 #include "third_party/skia/include/core/SkCanvas.h" |
| 19 #include "third_party/skia/include/core/SkGraphics.h" | 20 #include "third_party/skia/include/core/SkGraphics.h" |
| 20 #include "third_party/skia/include/core/SkImageGenerator.h" | 21 #include "third_party/skia/include/core/SkImageGenerator.h" |
| 21 #include "third_party/skia/include/core/SkRefCnt.h" | 22 #include "third_party/skia/include/core/SkRefCnt.h" |
| 22 #include "ui/gfx/geometry/rect.h" | 23 #include "ui/gfx/geometry/rect.h" |
| 23 #include "ui/gfx/skia_util.h" | 24 #include "ui/gfx/skia_util.h" |
| 24 | 25 |
| 25 namespace cc { | 26 namespace cc { |
| 26 namespace { | 27 namespace { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // |---|---|---|---| | 73 // |---|---|---|---| |
| 73 // | | x | | x | | 74 // | | x | | x | |
| 74 // |---|---|---|---| | 75 // |---|---|---|---| |
| 75 // | x | | x | | | 76 // | x | | x | | |
| 76 // |---|---|---|---| | 77 // |---|---|---|---| |
| 77 sk_sp<SkImage> discardable_image[4][4]; | 78 sk_sp<SkImage> discardable_image[4][4]; |
| 78 for (int y = 0; y < 4; ++y) { | 79 for (int y = 0; y < 4; ++y) { |
| 79 for (int x = 0; x < 4; ++x) { | 80 for (int x = 0; x < 4; ++x) { |
| 80 if ((x + y) & 1) { | 81 if ((x + y) & 1) { |
| 81 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 82 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 82 SkPaint paint; | 83 CdlPaint paint; |
| 83 content_layer_client.add_draw_image( | 84 content_layer_client.add_draw_image( |
| 84 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), | 85 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
| 85 paint); | 86 paint); |
| 86 } | 87 } |
| 87 } | 88 } |
| 88 } | 89 } |
| 89 | 90 |
| 90 scoped_refptr<DisplayItemList> display_list = | 91 scoped_refptr<DisplayItemList> display_list = |
| 91 content_layer_client.PaintContentsToDisplayList( | 92 content_layer_client.PaintContentsToDisplayList( |
| 92 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 93 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 // |---|---|---|---| | 146 // |---|---|---|---| |
| 146 // | | x | | x | | 147 // | | x | | x | |
| 147 // |---|---|---|---| | 148 // |---|---|---|---| |
| 148 // | x | | x | | | 149 // | x | | x | | |
| 149 // |---|---|---|---| | 150 // |---|---|---|---| |
| 150 sk_sp<SkImage> discardable_image[4][4]; | 151 sk_sp<SkImage> discardable_image[4][4]; |
| 151 for (int y = 0; y < 4; ++y) { | 152 for (int y = 0; y < 4; ++y) { |
| 152 for (int x = 0; x < 4; ++x) { | 153 for (int x = 0; x < 4; ++x) { |
| 153 if ((x + y) & 1) { | 154 if ((x + y) & 1) { |
| 154 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 155 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 155 SkPaint paint; | 156 CdlPaint paint; |
| 156 content_layer_client.add_draw_image( | 157 content_layer_client.add_draw_image( |
| 157 discardable_image[y][x], | 158 discardable_image[y][x], |
| 158 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); | 159 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); |
| 159 } | 160 } |
| 160 } | 161 } |
| 161 } | 162 } |
| 162 | 163 |
| 163 scoped_refptr<DisplayItemList> display_list = | 164 scoped_refptr<DisplayItemList> display_list = |
| 164 content_layer_client.PaintContentsToDisplayList( | 165 content_layer_client.PaintContentsToDisplayList( |
| 165 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 166 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 // |---|---|---|---| | 242 // |---|---|---|---| |
| 242 // | | x | | x | | 243 // | | x | | x | |
| 243 // |---|---|---|---| | 244 // |---|---|---|---| |
| 244 // | x | | x | | | 245 // | x | | x | | |
| 245 // |---|---|---|---| | 246 // |---|---|---|---| |
| 246 sk_sp<SkImage> discardable_image[4][4]; | 247 sk_sp<SkImage> discardable_image[4][4]; |
| 247 for (int y = 0; y < 4; ++y) { | 248 for (int y = 0; y < 4; ++y) { |
| 248 for (int x = 0; x < 4; ++x) { | 249 for (int x = 0; x < 4; ++x) { |
| 249 if ((x + y) & 1) { | 250 if ((x + y) & 1) { |
| 250 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 251 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 251 SkPaint paint; | 252 CdlPaint paint; |
| 252 content_layer_client.add_draw_image( | 253 content_layer_client.add_draw_image( |
| 253 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), | 254 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
| 254 paint); | 255 paint); |
| 255 } | 256 } |
| 256 } | 257 } |
| 257 } | 258 } |
| 258 | 259 |
| 259 scoped_refptr<DisplayItemList> display_list = | 260 scoped_refptr<DisplayItemList> display_list = |
| 260 content_layer_client.PaintContentsToDisplayList( | 261 content_layer_client.PaintContentsToDisplayList( |
| 261 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 262 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 284 } | 285 } |
| 285 } | 286 } |
| 286 | 287 |
| 287 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { | 288 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { |
| 288 gfx::Rect visible_rect(2048, 2048); | 289 gfx::Rect visible_rect(2048, 2048); |
| 289 FakeContentLayerClient content_layer_client; | 290 FakeContentLayerClient content_layer_client; |
| 290 content_layer_client.set_bounds(visible_rect.size()); | 291 content_layer_client.set_bounds(visible_rect.size()); |
| 291 | 292 |
| 292 sk_sp<SkImage> discardable_image = | 293 sk_sp<SkImage> discardable_image = |
| 293 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); | 294 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); |
| 294 SkPaint paint; | 295 CdlPaint paint; |
| 295 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 296 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
| 296 paint); | 297 paint); |
| 297 | 298 |
| 298 scoped_refptr<DisplayItemList> display_list = | 299 scoped_refptr<DisplayItemList> display_list = |
| 299 content_layer_client.PaintContentsToDisplayList( | 300 content_layer_client.PaintContentsToDisplayList( |
| 300 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 301 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 301 | 302 |
| 302 DiscardableImageMap image_map; | 303 DiscardableImageMap image_map; |
| 303 { | 304 { |
| 304 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 305 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 317 FakeContentLayerClient content_layer_client; | 318 FakeContentLayerClient content_layer_client; |
| 318 content_layer_client.set_bounds(visible_rect.size()); | 319 content_layer_client.set_bounds(visible_rect.size()); |
| 319 | 320 |
| 320 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); | 321 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); |
| 321 | 322 |
| 322 DiscardableImageMap image_map; | 323 DiscardableImageMap image_map; |
| 323 { | 324 { |
| 324 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 325 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 325 visible_rect.size()); | 326 visible_rect.size()); |
| 326 { | 327 { |
| 327 std::unique_ptr<SkPaint> paint(new SkPaint()); | 328 std::unique_ptr<CdlPaint> paint(new CdlPaint()); |
| 328 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), | 329 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), |
| 329 paint.get()); | 330 paint.get()); |
| 330 } | 331 } |
| 331 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); | 332 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); |
| 332 generator.canvas()->restore(); | 333 generator.canvas()->restore(); |
| 333 } | 334 } |
| 334 | 335 |
| 335 std::vector<PositionDrawImage> images = | 336 std::vector<PositionDrawImage> images = |
| 336 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | 337 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); |
| 337 EXPECT_EQ(1u, images.size()); | 338 EXPECT_EQ(1u, images.size()); |
| 338 EXPECT_TRUE(images[0].image == discardable_image); | 339 EXPECT_TRUE(images[0].image == discardable_image); |
| 339 } | 340 } |
| 340 | 341 |
| 341 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { | 342 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { |
| 342 gfx::Rect visible_rect(2048, 2048); | 343 gfx::Rect visible_rect(2048, 2048); |
| 343 FakeContentLayerClient content_layer_client; | 344 FakeContentLayerClient content_layer_client; |
| 344 content_layer_client.set_bounds(visible_rect.size()); | 345 content_layer_client.set_bounds(visible_rect.size()); |
| 345 | 346 |
| 346 int dimension = std::numeric_limits<int>::max(); | 347 int dimension = std::numeric_limits<int>::max(); |
| 347 sk_sp<SkImage> discardable_image = | 348 sk_sp<SkImage> discardable_image = |
| 348 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 349 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
| 349 SkPaint paint; | 350 CdlPaint paint; |
| 350 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), | 351 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), |
| 351 paint); | 352 paint); |
| 352 | 353 |
| 353 scoped_refptr<DisplayItemList> display_list = | 354 scoped_refptr<DisplayItemList> display_list = |
| 354 content_layer_client.PaintContentsToDisplayList( | 355 content_layer_client.PaintContentsToDisplayList( |
| 355 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 356 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 356 | 357 |
| 357 DiscardableImageMap image_map; | 358 DiscardableImageMap image_map; |
| 358 { | 359 { |
| 359 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 360 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 374 // some draw calls, so we subtract 64 since we only care about "really large" | 375 // some draw calls, so we subtract 64 since we only care about "really large" |
| 375 // values, not necessarily max int values. | 376 // values, not necessarily max int values. |
| 376 int dimension = static_cast<int>( | 377 int dimension = static_cast<int>( |
| 377 static_cast<float>(std::numeric_limits<int>::max() - 64)); | 378 static_cast<float>(std::numeric_limits<int>::max() - 64)); |
| 378 gfx::Rect visible_rect(dimension, dimension); | 379 gfx::Rect visible_rect(dimension, dimension); |
| 379 FakeContentLayerClient content_layer_client; | 380 FakeContentLayerClient content_layer_client; |
| 380 content_layer_client.set_bounds(visible_rect.size()); | 381 content_layer_client.set_bounds(visible_rect.size()); |
| 381 | 382 |
| 382 sk_sp<SkImage> discardable_image = | 383 sk_sp<SkImage> discardable_image = |
| 383 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 384 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
| 384 SkPaint paint; | 385 CdlPaint paint; |
| 385 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 386 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
| 386 paint); | 387 paint); |
| 387 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), | 388 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), |
| 388 paint); | 389 paint); |
| 389 content_layer_client.add_draw_image(discardable_image, | 390 content_layer_client.add_draw_image(discardable_image, |
| 390 gfx::Point(-10000, 500), paint); | 391 gfx::Point(-10000, 500), paint); |
| 391 | 392 |
| 392 scoped_refptr<DisplayItemList> display_list = | 393 scoped_refptr<DisplayItemList> display_list = |
| 393 content_layer_client.PaintContentsToDisplayList( | 394 content_layer_client.PaintContentsToDisplayList( |
| 394 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 395 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 425 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { | 426 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { |
| 426 gfx::Rect visible_rect(1000, 1000); | 427 gfx::Rect visible_rect(1000, 1000); |
| 427 FakeContentLayerClient content_layer_client; | 428 FakeContentLayerClient content_layer_client; |
| 428 content_layer_client.set_bounds(visible_rect.size()); | 429 content_layer_client.set_bounds(visible_rect.size()); |
| 429 | 430 |
| 430 sk_sp<SkImage> discardable_image = | 431 sk_sp<SkImage> discardable_image = |
| 431 CreateDiscardableImage(gfx::Size(100, 100)); | 432 CreateDiscardableImage(gfx::Size(100, 100)); |
| 432 sk_sp<SkImage> long_discardable_image = | 433 sk_sp<SkImage> long_discardable_image = |
| 433 CreateDiscardableImage(gfx::Size(10000, 100)); | 434 CreateDiscardableImage(gfx::Size(10000, 100)); |
| 434 | 435 |
| 435 SkPaint paint; | 436 CdlPaint paint; |
| 436 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), | 437 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), |
| 437 paint); | 438 paint); |
| 438 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), | 439 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), |
| 439 paint); | 440 paint); |
| 440 content_layer_client.add_draw_image(long_discardable_image, | 441 content_layer_client.add_draw_image(long_discardable_image, |
| 441 gfx::Point(-100, 500), paint); | 442 gfx::Point(-100, 500), paint); |
| 442 | 443 |
| 443 scoped_refptr<DisplayItemList> display_list = | 444 scoped_refptr<DisplayItemList> display_list = |
| 444 content_layer_client.PaintContentsToDisplayList( | 445 content_layer_client.PaintContentsToDisplayList( |
| 445 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 446 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 458 images = GetDiscardableImagesInRect(image_map, gfx::Rect(999, 999, 1, 1)); | 459 images = GetDiscardableImagesInRect(image_map, gfx::Rect(999, 999, 1, 1)); |
| 459 EXPECT_EQ(1u, images.size()); | 460 EXPECT_EQ(1u, images.size()); |
| 460 EXPECT_EQ(gfx::Rect(950, 951, 50, 49), images[0].image_rect); | 461 EXPECT_EQ(gfx::Rect(950, 951, 50, 49), images[0].image_rect); |
| 461 | 462 |
| 462 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); | 463 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); |
| 463 EXPECT_EQ(1u, images.size()); | 464 EXPECT_EQ(1u, images.size()); |
| 464 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), images[0].image_rect); | 465 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), images[0].image_rect); |
| 465 } | 466 } |
| 466 | 467 |
| 467 } // namespace cc | 468 } // namespace cc |
| OLD | NEW |