| Index: ui/gfx/color_transform_unittest.cc
|
| diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc
|
| index 3fc43c2b239b45462fd91eb46f56ca2959bb8427..5a8882672f7ffb9933581876b9e30bc86ba7d9ae 100644
|
| --- a/ui/gfx/color_transform_unittest.cc
|
| +++ b/ui/gfx/color_transform_unittest.cc
|
| @@ -66,24 +66,71 @@ TEST(SimpleColorSpace, BT709toSRGB) {
|
| bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE));
|
|
|
| ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 0.0f, 0.001f);
|
|
|
| tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 1.0f, 0.001f);
|
|
|
| // Test a blue color
|
| tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_GT(tmp.z(), tmp.x());
|
| EXPECT_GT(tmp.z(), tmp.y());
|
| }
|
|
|
| +TEST(SimpleColorSpace, SRGBFromICCAndNotICC) {
|
| + float kEpsilon = 0.001f;
|
| + ColorTransform::TriStim value_fromicc;
|
| + ColorTransform::TriStim value_default;
|
| +
|
| + ICCProfile srgb_icc_profile = ICCProfileForTestingSRGB();
|
| + ColorSpace srgb_fromicc = srgb_icc_profile.GetColorSpace();
|
| + ColorSpace srgb_default = gfx::ColorSpace::CreateSRGB();
|
| + ColorSpace xyzd50 = gfx::ColorSpace::CreateXYZD50();
|
| +
|
| + value_fromicc = value_default = ColorTransform::TriStim(0.1f, 0.5f, 0.9f);
|
| +
|
| + std::unique_ptr<ColorTransform> toxyzd50_fromicc(
|
| + ColorTransform::NewColorTransform(
|
| + srgb_fromicc, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + // This will have 1 step, namely, the QCMS transform.
|
| + EXPECT_EQ(toxyzd50_fromicc->NumberOfStepsForTesting(), 1u);
|
| + toxyzd50_fromicc->Transform(&value_fromicc, 1);
|
| +
|
| + std::unique_ptr<ColorTransform> toxyzd50_default(
|
| + ColorTransform::NewColorTransform(
|
| + srgb_default, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + // This will have a transfer function and then linear transform.
|
| + EXPECT_EQ(toxyzd50_default->NumberOfStepsForTesting(), 2u);
|
| + toxyzd50_default->Transform(&value_default, 1);
|
| +
|
| + EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
|
| +
|
| + value_fromicc = value_default = ColorTransform::TriStim(0.1f, 0.5f, 0.9f);
|
| +
|
| + std::unique_ptr<ColorTransform> fromxyzd50_fromicc(
|
| + ColorTransform::NewColorTransform(
|
| + xyzd50, srgb_fromicc, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + fromxyzd50_fromicc->Transform(&value_fromicc, 1);
|
| +
|
| + std::unique_ptr<ColorTransform> fromxyzd50_default(
|
| + ColorTransform::NewColorTransform(
|
| + xyzd50, srgb_default, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + fromxyzd50_default->Transform(&value_default, 1);
|
| +
|
| + EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
|
| +}
|
| +
|
| TEST(SimpleColorSpace, BT709toSRGBICC) {
|
| ICCProfile srgb_icc = ICCProfileForTestingSRGB();
|
| ColorSpace bt709 = ColorSpace::CreateREC709();
|
| @@ -92,20 +139,20 @@ TEST(SimpleColorSpace, BT709toSRGBICC) {
|
| bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE));
|
|
|
| ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 0.0f, 0.001f);
|
|
|
| tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 1.0f, 0.001f);
|
|
|
| // Test a blue color
|
| tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_GT(tmp.z(), tmp.x());
|
| EXPECT_GT(tmp.z(), tmp.y());
|
| }
|
| @@ -123,25 +170,25 @@ TEST(SimpleColorSpace, GetColorSpace) {
|
| sRGB, sRGB2, ColorTransform::Intent::INTENT_ABSOLUTE));
|
|
|
| ColorTransform::TriStim tmp(1.0f, 1.0f, 1.0f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 1.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.y(), 1.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.z(), 1.0f, kEpsilon);
|
|
|
| tmp = ColorTransform::TriStim(1.0f, 0.0f, 0.0f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 1.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.y(), 0.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.z(), 0.0f, kEpsilon);
|
|
|
| tmp = ColorTransform::TriStim(0.0f, 1.0f, 0.0f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 0.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.y(), 1.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.z(), 0.0f, kEpsilon);
|
|
|
| tmp = ColorTransform::TriStim(0.0f, 0.0f, 1.0f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 0.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.y(), 0.0f, kEpsilon);
|
| EXPECT_NEAR(tmp.z(), 1.0f, kEpsilon);
|
| @@ -154,20 +201,20 @@ TEST(SimpleColorSpace, UnknownToSRGB) {
|
| unknown, sRGB, ColorTransform::Intent::INTENT_PERCEPTUAL));
|
|
|
| ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 0.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 0.0f, 0.001f);
|
|
|
| tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_NEAR(tmp.x(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.y(), 1.0f, 0.001f);
|
| EXPECT_NEAR(tmp.z(), 1.0f, 0.001f);
|
|
|
| // Test a blue color
|
| tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f);
|
| - t->transform(&tmp, 1);
|
| + t->Transform(&tmp, 1);
|
| EXPECT_GT(tmp.z(), tmp.x());
|
| EXPECT_GT(tmp.z(), tmp.y());
|
| }
|
| @@ -175,10 +222,33 @@ TEST(SimpleColorSpace, UnknownToSRGB) {
|
| class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {};
|
|
|
| TEST_P(TransferTest, basicTest) {
|
| + gfx::ColorSpace space_with_transfer(ColorSpace::PrimaryID::BT709, GetParam(),
|
| + ColorSpace::MatrixID::RGB,
|
| + ColorSpace::RangeID::FULL);
|
| + gfx::ColorSpace space_linear(
|
| + ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::LINEAR,
|
| + ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL);
|
| +
|
| + std::unique_ptr<ColorTransform> to_linear(ColorTransform::NewColorTransform(
|
| + space_with_transfer, space_linear,
|
| + ColorTransform::Intent::INTENT_ABSOLUTE));
|
| +
|
| + std::unique_ptr<ColorTransform> from_linear(ColorTransform::NewColorTransform(
|
| + space_linear, space_with_transfer,
|
| + ColorTransform::Intent::INTENT_ABSOLUTE));
|
| +
|
| + // The transforms will ahve 1 or 0 steps (0 for linear).
|
| + size_t expected_steps = 1u;
|
| + if (GetParam() == ColorSpace::TransferID::LINEAR)
|
| + expected_steps = 0u;
|
| + EXPECT_EQ(to_linear->NumberOfStepsForTesting(), expected_steps);
|
| + EXPECT_EQ(from_linear->NumberOfStepsForTesting(), expected_steps);
|
| +
|
| for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) {
|
| - float linear = ColorTransform::ToLinearForTesting(GetParam(), x);
|
| - float x2 = ColorTransform::FromLinearForTesting(GetParam(), linear);
|
| - EXPECT_NEAR(x, x2, 0.001f);
|
| + ColorTransform::TriStim tristim(x, x, x);
|
| + to_linear->Transform(&tristim, 1);
|
| + from_linear->Transform(&tristim, 1);
|
| + EXPECT_NEAR(x, tristim.x(), 0.001f);
|
| }
|
| }
|
|
|
| @@ -211,7 +281,7 @@ TEST_P(ColorSpaceTest, testNullTransform) {
|
| std::unique_ptr<ColorTransform> t(
|
| ColorTransform::NewColorTransform(color_space_, color_space_, intent_));
|
| ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f);
|
| - t->transform(&tristim, 1);
|
| + t->Transform(&tristim, 1);
|
| EXPECT_NEAR(tristim.x(), 0.4f, 0.001f);
|
| EXPECT_NEAR(tristim.y(), 0.5f, 0.001f);
|
| EXPECT_NEAR(tristim.z(), 0.6f, 0.001f);
|
| @@ -223,8 +293,8 @@ TEST_P(ColorSpaceTest, toXYZandBack) {
|
| std::unique_ptr<ColorTransform> t2(ColorTransform::NewColorTransform(
|
| ColorSpace::CreateXYZD50(), color_space_, intent_));
|
| ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f);
|
| - t1->transform(&tristim, 1);
|
| - t2->transform(&tristim, 1);
|
| + t1->Transform(&tristim, 1);
|
| + t2->Transform(&tristim, 1);
|
| EXPECT_NEAR(tristim.x(), 0.4f, 0.001f);
|
| EXPECT_NEAR(tristim.y(), 0.5f, 0.001f);
|
| EXPECT_NEAR(tristim.z(), 0.6f, 0.001f);
|
|
|