| 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 |