Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Unified Diff: ui/gfx/color_transform_unittest.cc

Issue 2696603003: color: Towards ColorTransform optimizations and code generation (Closed)
Patch Set: Keep fixing the windows build Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/color_transform_fuzzer.cc ('k') | ui/gfx/skia_color_space_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « ui/gfx/color_transform_fuzzer.cc ('k') | ui/gfx/skia_color_space_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698