OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/gfx/image/image_skia.h" | 5 #include "ui/gfx/image/image_skia.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/threading/simple_thread.h" | 9 #include "base/threading/simple_thread.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 EXPECT_TRUE(image_skia.GetRepresentation(1.0f).unscaled()); | 416 EXPECT_TRUE(image_skia.GetRepresentation(1.0f).unscaled()); |
417 ImageSkiaRep rep_2x(Size(100, 100), 2.0f); | 417 ImageSkiaRep rep_2x(Size(100, 100), 2.0f); |
418 | 418 |
419 // When reps for other scales are added, the unscaled image | 419 // When reps for other scales are added, the unscaled image |
420 // becomes scaled. | 420 // becomes scaled. |
421 image_skia.AddRepresentation(rep_2x); | 421 image_skia.AddRepresentation(rep_2x); |
422 EXPECT_FALSE(image_skia.GetRepresentation(1.0f).unscaled()); | 422 EXPECT_FALSE(image_skia.GetRepresentation(1.0f).unscaled()); |
423 EXPECT_FALSE(image_skia.GetRepresentation(2.0f).unscaled()); | 423 EXPECT_FALSE(image_skia.GetRepresentation(2.0f).unscaled()); |
424 } | 424 } |
425 | 425 |
| 426 namespace { |
| 427 |
| 428 std::vector<float> GetSortedScaleFactors(const gfx::ImageSkia& image) { |
| 429 const std::vector<ImageSkiaRep>& image_reps = image.image_reps(); |
| 430 std::vector<float> scale_factors; |
| 431 for (size_t i = 0; i < image_reps.size(); ++i) { |
| 432 scale_factors.push_back(image_reps[i].scale()); |
| 433 } |
| 434 std::sort(scale_factors.begin(), scale_factors.end()); |
| 435 return scale_factors; |
| 436 } |
| 437 |
| 438 } // namespace |
| 439 |
426 TEST_F(ImageSkiaTest, ArbitraryScaleFactor) { | 440 TEST_F(ImageSkiaTest, ArbitraryScaleFactor) { |
427 // Do not test if the ImageSkia doesn't support arbitrary scale factors. | 441 // Do not test if the ImageSkia doesn't support arbitrary scale factors. |
428 if (!ImageSkia::IsDSFScalingInImageSkiaEnabled()) | 442 if (!ImageSkia::IsDSFScalingInImageSkiaEnabled()) |
429 return; | 443 return; |
430 | 444 |
431 // source is owned by |image| | 445 // source is owned by |image| |
432 DynamicSource* source = new DynamicSource(Size(100, 200)); | 446 DynamicSource* source = new DynamicSource(Size(100, 200)); |
433 ImageSkia image(source, gfx::Size(100, 200)); | 447 ImageSkia image(source, gfx::Size(100, 200)); |
434 | 448 |
435 image.GetRepresentation(1.5f); | 449 image.GetRepresentation(1.5f); |
436 EXPECT_EQ(2.0f, source->GetLastRequestedScaleAndReset()); | 450 EXPECT_EQ(2.0f, source->GetLastRequestedScaleAndReset()); |
437 std::vector<ImageSkiaRep> image_reps = image.image_reps(); | 451 std::vector<ImageSkiaRep> image_reps = image.image_reps(); |
438 EXPECT_EQ(2u, image_reps.size()); | 452 EXPECT_EQ(2u, image_reps.size()); |
439 | 453 |
440 std::vector<float> scale_factors; | 454 std::vector<float> scale_factors = GetSortedScaleFactors(image); |
441 for (size_t i = 0; i < image_reps.size(); ++i) { | |
442 scale_factors.push_back(image_reps[i].scale()); | |
443 } | |
444 std::sort(scale_factors.begin(), scale_factors.end()); | |
445 EXPECT_EQ(1.5f, scale_factors[0]); | 455 EXPECT_EQ(1.5f, scale_factors[0]); |
446 EXPECT_EQ(2.0f, scale_factors[1]); | 456 EXPECT_EQ(2.0f, scale_factors[1]); |
447 | 457 |
448 // Requesting 1.75 scale factor also falls back to 2.0f and rescale. | 458 // Requesting 1.75 scale factor also falls back to 2.0f and rescale. |
449 // However, the image already has the 2.0f data, so it won't fetch again. | 459 // However, the image already has the 2.0f data, so it won't fetch again. |
450 image.GetRepresentation(1.75f); | 460 image.GetRepresentation(1.75f); |
451 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); | 461 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); |
452 image_reps = image.image_reps(); | 462 image_reps = image.image_reps(); |
453 EXPECT_EQ(3u, image_reps.size()); | 463 EXPECT_EQ(3u, image_reps.size()); |
454 | 464 |
455 scale_factors.clear(); | 465 scale_factors = GetSortedScaleFactors(image); |
456 for (size_t i = 0; i < image_reps.size(); ++i) { | |
457 scale_factors.push_back(image_reps[i].scale()); | |
458 } | |
459 std::sort(scale_factors.begin(), scale_factors.end()); | |
460 EXPECT_EQ(1.5f, scale_factors[0]); | 466 EXPECT_EQ(1.5f, scale_factors[0]); |
461 EXPECT_EQ(1.75f, scale_factors[1]); | 467 EXPECT_EQ(1.75f, scale_factors[1]); |
462 EXPECT_EQ(2.0f, scale_factors[2]); | 468 EXPECT_EQ(2.0f, scale_factors[2]); |
463 | 469 |
464 // 1.25 is falled back to 1.0. | 470 // Requesting 1.25 scale factor also falls back to 2.0f and rescale. |
| 471 // However, the image already has the 2.0f data, so it won't fetch again. |
465 image.GetRepresentation(1.25f); | 472 image.GetRepresentation(1.25f); |
| 473 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); |
| 474 image_reps = image.image_reps(); |
| 475 EXPECT_EQ(4u, image_reps.size()); |
| 476 scale_factors = GetSortedScaleFactors(image); |
| 477 EXPECT_EQ(1.25f, scale_factors[0]); |
| 478 EXPECT_EQ(1.5f, scale_factors[1]); |
| 479 EXPECT_EQ(1.75f, scale_factors[2]); |
| 480 EXPECT_EQ(2.0f, scale_factors[3]); |
| 481 |
| 482 // 1.20 is falled back to 1.0. |
| 483 image.GetRepresentation(1.20f); |
466 EXPECT_EQ(1.0f, source->GetLastRequestedScaleAndReset()); | 484 EXPECT_EQ(1.0f, source->GetLastRequestedScaleAndReset()); |
467 image_reps = image.image_reps(); | 485 image_reps = image.image_reps(); |
468 EXPECT_EQ(5u, image_reps.size()); | 486 EXPECT_EQ(6u, image_reps.size()); |
| 487 scale_factors = GetSortedScaleFactors(image); |
| 488 EXPECT_EQ(1.0f, scale_factors[0]); |
| 489 EXPECT_EQ(1.2f, scale_factors[1]); |
| 490 EXPECT_EQ(1.25f, scale_factors[2]); |
| 491 EXPECT_EQ(1.5f, scale_factors[3]); |
| 492 EXPECT_EQ(1.75f, scale_factors[4]); |
| 493 EXPECT_EQ(2.0f, scale_factors[5]); |
469 | 494 |
470 // Scale factor less than 1.0f will be falled back to 1.0f | 495 // Scale factor less than 1.0f will be falled back to 1.0f |
471 image.GetRepresentation(0.75f); | 496 image.GetRepresentation(0.75f); |
472 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); | 497 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); |
473 image_reps = image.image_reps(); | 498 image_reps = image.image_reps(); |
474 EXPECT_EQ(6u, image_reps.size()); | 499 EXPECT_EQ(7u, image_reps.size()); |
475 | 500 |
476 scale_factors.clear(); | 501 scale_factors = GetSortedScaleFactors(image); |
477 for (size_t i = 0; i < image_reps.size(); ++i) { | |
478 scale_factors.push_back(image_reps[i].scale()); | |
479 } | |
480 std::sort(scale_factors.begin(), scale_factors.end()); | |
481 EXPECT_EQ(0.75f, scale_factors[0]); | 502 EXPECT_EQ(0.75f, scale_factors[0]); |
482 EXPECT_EQ(1.0f, scale_factors[1]); | 503 EXPECT_EQ(1.0f, scale_factors[1]); |
483 EXPECT_EQ(1.25f, scale_factors[2]); | 504 EXPECT_EQ(1.2f, scale_factors[2]); |
484 EXPECT_EQ(1.5f, scale_factors[3]); | 505 EXPECT_EQ(1.25f, scale_factors[3]); |
485 EXPECT_EQ(1.75f, scale_factors[4]); | 506 EXPECT_EQ(1.5f, scale_factors[4]); |
486 EXPECT_EQ(2.0f, scale_factors[5]); | 507 EXPECT_EQ(1.75f, scale_factors[5]); |
| 508 EXPECT_EQ(2.0f, scale_factors[6]); |
487 | 509 |
488 // Scale factor greater than 2.0f is falled back to 2.0f because it's not | 510 // Scale factor greater than 2.0f is falled back to 2.0f because it's not |
489 // supported. | 511 // supported. |
490 image.GetRepresentation(3.0f); | 512 image.GetRepresentation(3.0f); |
491 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); | 513 EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); |
492 image_reps = image.image_reps(); | 514 image_reps = image.image_reps(); |
493 EXPECT_EQ(7u, image_reps.size()); | 515 EXPECT_EQ(8u, image_reps.size()); |
494 } | 516 } |
495 | 517 |
496 TEST_F(ImageSkiaTest, ArbitraryScaleFactorWithMissingResource) { | 518 TEST_F(ImageSkiaTest, ArbitraryScaleFactorWithMissingResource) { |
497 // Do not test if the ImageSkia doesn't support arbitrary scale factors. | 519 // Do not test if the ImageSkia doesn't support arbitrary scale factors. |
498 if (!ImageSkia::IsDSFScalingInImageSkiaEnabled()) | 520 if (!ImageSkia::IsDSFScalingInImageSkiaEnabled()) |
499 return; | 521 return; |
500 | 522 |
501 ImageSkia image(new FixedSource( | 523 ImageSkia image(new FixedSource( |
502 ImageSkiaRep(Size(100, 200), 1.0f)), Size(100, 200)); | 524 ImageSkiaRep(Size(100, 200), 1.0f)), Size(100, 200)); |
503 | 525 |
(...skipping 30 matching lines...) Expand all Loading... |
534 EXPECT_EQ(1U, image.image_reps().size()); | 556 EXPECT_EQ(1U, image.image_reps().size()); |
535 | 557 |
536 const ImageSkiaRep& rep12 = image.GetRepresentation(1.2f); | 558 const ImageSkiaRep& rep12 = image.GetRepresentation(1.2f); |
537 EXPECT_EQ(1.0f, rep12.scale()); | 559 EXPECT_EQ(1.0f, rep12.scale()); |
538 EXPECT_EQ("100x200", rep12.pixel_size().ToString()); | 560 EXPECT_EQ("100x200", rep12.pixel_size().ToString()); |
539 EXPECT_TRUE(rep12.unscaled()); | 561 EXPECT_TRUE(rep12.unscaled()); |
540 EXPECT_EQ(1U, image.image_reps().size()); | 562 EXPECT_EQ(1U, image.image_reps().size()); |
541 } | 563 } |
542 | 564 |
543 } // namespace gfx | 565 } // namespace gfx |
OLD | NEW |