| Index: cc/tiles/image_decode_controller_unittest.cc
|
| diff --git a/cc/tiles/image_decode_controller_unittest.cc b/cc/tiles/image_decode_controller_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e49dcc60270010e43db20b1dfc7534dc86f4bed0
|
| --- /dev/null
|
| +++ b/cc/tiles/image_decode_controller_unittest.cc
|
| @@ -0,0 +1,194 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/tiles/image_decode_controller.h"
|
| +
|
| +#include "cc/playback/draw_image.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace cc {
|
| +namespace {
|
| +
|
| +skia::RefPtr<SkImage> CreateImage(int width, int height) {
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
|
| + SkBitmap bitmap;
|
| + bitmap.allocPixels(info);
|
| + return skia::AdoptRef(SkImage::NewFromBitmap(bitmap));
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyLowQuality) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality};
|
| + for (auto quality : qualities) {
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(quality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| + }
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kMedium_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(quality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = true;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kMedium_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(quality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kMedium_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(1.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(150, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(150u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kMedium_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(1.f, 1.f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(100, key.target_size().width());
|
| + EXPECT_EQ(100, key.target_size().height());
|
| + EXPECT_EQ(100u * 100u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest,
|
| + ImageKeyMediumQualityDropToLowIfNotDecomposable) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = false;
|
| + SkFilterQuality quality = kMedium_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyHighQuality) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(quality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest,
|
| + ImageKeyHighQualityDropToMediumWithPerspective) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = true;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = false;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(50, key.target_size().width());
|
| + EXPECT_EQ(150, key.target_size().height());
|
| + EXPECT_EQ(50u * 150u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(image.get(), SkSize::Make(1.f, 1.f), quality,
|
| + has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(100, key.target_size().width());
|
| + EXPECT_EQ(100, key.target_size().height());
|
| + EXPECT_EQ(100u * 100u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace cc
|
|
|