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

Unified Diff: ui/gfx/color_transform_unittest.cc

Issue 2696603003: color: Towards ColorTransform optimizations and code generation (Closed)
Patch Set: Remove unneeded refactor 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
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..46fa0e5913b13845cf8733573c9abc4fa37229ff 100644
--- a/ui/gfx/color_transform_unittest.cc
+++ b/ui/gfx/color_transform_unittest.cc
@@ -84,6 +84,53 @@ TEST(SimpleColorSpace, BT709toSRGB) {
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.1, 0.5, 0.9);
+
+ 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.1, 0.5, 0.9);
+
+ 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();
@@ -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);
}
}

Powered by Google App Engine
This is Rietveld 408576698