Commit 7bfaf229 authored by oshima@chromium.org's avatar oshima@chromium.org

Use 2x resources for 1.25

BUG=372212
R=mukai@chromium.org

Review URL: https://codereview.chromium.org/372883002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282777 0039d316-1c4b-4281-b951-d872f2087c98
parent 088ec725
...@@ -32,10 +32,10 @@ gfx::ImageSkiaRep& NullImageRep() { ...@@ -32,10 +32,10 @@ gfx::ImageSkiaRep& NullImageRep() {
std::vector<float>* g_supported_scales = NULL; std::vector<float>* g_supported_scales = NULL;
// The difference to fall back to the smaller scale factor rather than the // The difference to fall back to the smaller scale factor rather than the
// larger one. For example, assume 1.25 is requested but only 1.0 and 2.0 are // larger one. For example, assume 1.20 is requested but only 1.0 and 2.0 are
// supported. In that case, not fall back to 2.0 but 1.0, and then expand // supported. In that case, not fall back to 2.0 but 1.0, and then expand
// the image to 1.25. // the image to 1.25.
const float kFallbackToSmallerScaleDiff = 0.25f; const float kFallbackToSmallerScaleDiff = 0.20f;
} // namespace } // namespace
......
...@@ -423,6 +423,20 @@ TEST_F(ImageSkiaTest, Unscaled) { ...@@ -423,6 +423,20 @@ TEST_F(ImageSkiaTest, Unscaled) {
EXPECT_FALSE(image_skia.GetRepresentation(2.0f).unscaled()); EXPECT_FALSE(image_skia.GetRepresentation(2.0f).unscaled());
} }
namespace {
std::vector<float> GetSortedScaleFactors(const gfx::ImageSkia& image) {
const std::vector<ImageSkiaRep>& image_reps = image.image_reps();
std::vector<float> scale_factors;
for (size_t i = 0; i < image_reps.size(); ++i) {
scale_factors.push_back(image_reps[i].scale());
}
std::sort(scale_factors.begin(), scale_factors.end());
return scale_factors;
}
} // namespace
TEST_F(ImageSkiaTest, ArbitraryScaleFactor) { TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
// Do not test if the ImageSkia doesn't support arbitrary scale factors. // Do not test if the ImageSkia doesn't support arbitrary scale factors.
if (!ImageSkia::IsDSFScalingInImageSkiaEnabled()) if (!ImageSkia::IsDSFScalingInImageSkiaEnabled())
...@@ -437,11 +451,7 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) { ...@@ -437,11 +451,7 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
std::vector<ImageSkiaRep> image_reps = image.image_reps(); std::vector<ImageSkiaRep> image_reps = image.image_reps();
EXPECT_EQ(2u, image_reps.size()); EXPECT_EQ(2u, image_reps.size());
std::vector<float> scale_factors; std::vector<float> scale_factors = GetSortedScaleFactors(image);
for (size_t i = 0; i < image_reps.size(); ++i) {
scale_factors.push_back(image_reps[i].scale());
}
std::sort(scale_factors.begin(), scale_factors.end());
EXPECT_EQ(1.5f, scale_factors[0]); EXPECT_EQ(1.5f, scale_factors[0]);
EXPECT_EQ(2.0f, scale_factors[1]); EXPECT_EQ(2.0f, scale_factors[1]);
...@@ -452,45 +462,57 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) { ...@@ -452,45 +462,57 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
image_reps = image.image_reps(); image_reps = image.image_reps();
EXPECT_EQ(3u, image_reps.size()); EXPECT_EQ(3u, image_reps.size());
scale_factors.clear(); scale_factors = GetSortedScaleFactors(image);
for (size_t i = 0; i < image_reps.size(); ++i) {
scale_factors.push_back(image_reps[i].scale());
}
std::sort(scale_factors.begin(), scale_factors.end());
EXPECT_EQ(1.5f, scale_factors[0]); EXPECT_EQ(1.5f, scale_factors[0]);
EXPECT_EQ(1.75f, scale_factors[1]); EXPECT_EQ(1.75f, scale_factors[1]);
EXPECT_EQ(2.0f, scale_factors[2]); EXPECT_EQ(2.0f, scale_factors[2]);
// 1.25 is falled back to 1.0. // Requesting 1.25 scale factor also falls back to 2.0f and rescale.
// However, the image already has the 2.0f data, so it won't fetch again.
image.GetRepresentation(1.25f); image.GetRepresentation(1.25f);
EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
image_reps = image.image_reps();
EXPECT_EQ(4u, image_reps.size());
scale_factors = GetSortedScaleFactors(image);
EXPECT_EQ(1.25f, scale_factors[0]);
EXPECT_EQ(1.5f, scale_factors[1]);
EXPECT_EQ(1.75f, scale_factors[2]);
EXPECT_EQ(2.0f, scale_factors[3]);
// 1.20 is falled back to 1.0.
image.GetRepresentation(1.20f);
EXPECT_EQ(1.0f, source->GetLastRequestedScaleAndReset()); EXPECT_EQ(1.0f, source->GetLastRequestedScaleAndReset());
image_reps = image.image_reps(); image_reps = image.image_reps();
EXPECT_EQ(5u, image_reps.size()); EXPECT_EQ(6u, image_reps.size());
scale_factors = GetSortedScaleFactors(image);
EXPECT_EQ(1.0f, scale_factors[0]);
EXPECT_EQ(1.2f, scale_factors[1]);
EXPECT_EQ(1.25f, scale_factors[2]);
EXPECT_EQ(1.5f, scale_factors[3]);
EXPECT_EQ(1.75f, scale_factors[4]);
EXPECT_EQ(2.0f, scale_factors[5]);
// Scale factor less than 1.0f will be falled back to 1.0f // Scale factor less than 1.0f will be falled back to 1.0f
image.GetRepresentation(0.75f); image.GetRepresentation(0.75f);
EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
image_reps = image.image_reps(); image_reps = image.image_reps();
EXPECT_EQ(6u, image_reps.size()); EXPECT_EQ(7u, image_reps.size());
scale_factors.clear(); scale_factors = GetSortedScaleFactors(image);
for (size_t i = 0; i < image_reps.size(); ++i) {
scale_factors.push_back(image_reps[i].scale());
}
std::sort(scale_factors.begin(), scale_factors.end());
EXPECT_EQ(0.75f, scale_factors[0]); EXPECT_EQ(0.75f, scale_factors[0]);
EXPECT_EQ(1.0f, scale_factors[1]); EXPECT_EQ(1.0f, scale_factors[1]);
EXPECT_EQ(1.25f, scale_factors[2]); EXPECT_EQ(1.2f, scale_factors[2]);
EXPECT_EQ(1.5f, scale_factors[3]); EXPECT_EQ(1.25f, scale_factors[3]);
EXPECT_EQ(1.75f, scale_factors[4]); EXPECT_EQ(1.5f, scale_factors[4]);
EXPECT_EQ(2.0f, scale_factors[5]); EXPECT_EQ(1.75f, scale_factors[5]);
EXPECT_EQ(2.0f, scale_factors[6]);
// Scale factor greater than 2.0f is falled back to 2.0f because it's not // Scale factor greater than 2.0f is falled back to 2.0f because it's not
// supported. // supported.
image.GetRepresentation(3.0f); image.GetRepresentation(3.0f);
EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset()); EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
image_reps = image.image_reps(); image_reps = image.image_reps();
EXPECT_EQ(7u, image_reps.size()); EXPECT_EQ(8u, image_reps.size());
} }
TEST_F(ImageSkiaTest, ArbitraryScaleFactorWithMissingResource) { TEST_F(ImageSkiaTest, ArbitraryScaleFactorWithMissingResource) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment