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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 #include "ui/gfx/color_space.h" 7 #include "ui/gfx/color_space.h"
8 #include "ui/gfx/color_transform.h" 8 #include "ui/gfx/color_transform.h"
9 #include "ui/gfx/icc_profile.h" 9 #include "ui/gfx/icc_profile.h"
10 #include "ui/gfx/test/icc_profiles.h" 10 #include "ui/gfx/test/icc_profiles.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); 77 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f);
78 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); 78 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f);
79 79
80 // Test a blue color 80 // Test a blue color
81 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); 81 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f);
82 t->transform(&tmp, 1); 82 t->transform(&tmp, 1);
83 EXPECT_GT(tmp.z(), tmp.x()); 83 EXPECT_GT(tmp.z(), tmp.x());
84 EXPECT_GT(tmp.z(), tmp.y()); 84 EXPECT_GT(tmp.z(), tmp.y());
85 } 85 }
86 86
87 TEST(SimpleColorSpace, SRGBFromICCAndNotICC) {
88 float kEpsilon = 0.001f;
89 ColorTransform::TriStim value_fromicc;
90 ColorTransform::TriStim value_default;
91
92 ICCProfile srgb_icc_profile = ICCProfileForTestingSRGB();
93 ColorSpace srgb_fromicc = srgb_icc_profile.GetColorSpace();
94 ColorSpace srgb_default = gfx::ColorSpace::CreateSRGB();
95 ColorSpace xyzd50 = gfx::ColorSpace::CreateXYZD50();
96
97 value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9);
98
99 std::unique_ptr<ColorTransform> toxyzd50_fromicc(
100 ColorTransform::NewColorTransform(
101 srgb_fromicc, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
102 // This will have 1 step, namely, the QCMS transform.
103 EXPECT_EQ(toxyzd50_fromicc->NumberOfStepsForTesting(), 1u);
104 toxyzd50_fromicc->transform(&value_fromicc, 1);
105
106 std::unique_ptr<ColorTransform> toxyzd50_default(
107 ColorTransform::NewColorTransform(
108 srgb_default, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
109 // This will have a transfer function and then linear transform.
110 EXPECT_EQ(toxyzd50_default->NumberOfStepsForTesting(), 2u);
111 toxyzd50_default->transform(&value_default, 1);
112
113 EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
114 EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
115 EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
116
117 value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9);
118
119 std::unique_ptr<ColorTransform> fromxyzd50_fromicc(
120 ColorTransform::NewColorTransform(
121 xyzd50, srgb_fromicc, ColorTransform::Intent::INTENT_ABSOLUTE));
122 fromxyzd50_fromicc->transform(&value_fromicc, 1);
123
124 std::unique_ptr<ColorTransform> fromxyzd50_default(
125 ColorTransform::NewColorTransform(
126 xyzd50, srgb_default, ColorTransform::Intent::INTENT_ABSOLUTE));
127 fromxyzd50_default->transform(&value_default, 1);
128
129 EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
130 EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
131 EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
132 }
133
87 TEST(SimpleColorSpace, BT709toSRGBICC) { 134 TEST(SimpleColorSpace, BT709toSRGBICC) {
88 ICCProfile srgb_icc = ICCProfileForTestingSRGB(); 135 ICCProfile srgb_icc = ICCProfileForTestingSRGB();
89 ColorSpace bt709 = ColorSpace::CreateREC709(); 136 ColorSpace bt709 = ColorSpace::CreateREC709();
90 ColorSpace sRGB = srgb_icc.GetColorSpace(); 137 ColorSpace sRGB = srgb_icc.GetColorSpace();
91 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( 138 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform(
92 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE)); 139 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE));
93 140
94 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); 141 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f);
95 t->transform(&tmp, 1); 142 t->transform(&tmp, 1);
96 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); 143 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 // Test a blue color 215 // Test a blue color
169 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); 216 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f);
170 t->transform(&tmp, 1); 217 t->transform(&tmp, 1);
171 EXPECT_GT(tmp.z(), tmp.x()); 218 EXPECT_GT(tmp.z(), tmp.x());
172 EXPECT_GT(tmp.z(), tmp.y()); 219 EXPECT_GT(tmp.z(), tmp.y());
173 } 220 }
174 221
175 class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {}; 222 class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {};
176 223
177 TEST_P(TransferTest, basicTest) { 224 TEST_P(TransferTest, basicTest) {
225 gfx::ColorSpace space_with_transfer(ColorSpace::PrimaryID::BT709, GetParam(),
226 ColorSpace::MatrixID::RGB,
227 ColorSpace::RangeID::FULL);
228 gfx::ColorSpace space_linear(
229 ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::LINEAR,
230 ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL);
231
232 std::unique_ptr<ColorTransform> to_linear(ColorTransform::NewColorTransform(
233 space_with_transfer, space_linear,
234 ColorTransform::Intent::INTENT_ABSOLUTE));
235
236 std::unique_ptr<ColorTransform> from_linear(ColorTransform::NewColorTransform(
237 space_linear, space_with_transfer,
238 ColorTransform::Intent::INTENT_ABSOLUTE));
239
240 // The transforms will ahve 1 or 0 steps (0 for linear).
241 size_t expected_steps = 1u;
242 if (GetParam() == ColorSpace::TransferID::LINEAR)
243 expected_steps = 0u;
244 EXPECT_EQ(to_linear->NumberOfStepsForTesting(), expected_steps);
245 EXPECT_EQ(from_linear->NumberOfStepsForTesting(), expected_steps);
246
178 for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) { 247 for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) {
179 float linear = ColorTransform::ToLinearForTesting(GetParam(), x); 248 ColorTransform::TriStim tristim(x, x, x);
180 float x2 = ColorTransform::FromLinearForTesting(GetParam(), linear); 249 to_linear->transform(&tristim, 1);
181 EXPECT_NEAR(x, x2, 0.001f); 250 from_linear->transform(&tristim, 1);
251 EXPECT_NEAR(x, tristim.x(), 0.001f);
182 } 252 }
183 } 253 }
184 254
185 INSTANTIATE_TEST_CASE_P(ColorSpace, 255 INSTANTIATE_TEST_CASE_P(ColorSpace,
186 TransferTest, 256 TransferTest,
187 testing::ValuesIn(all_transfers)); 257 testing::ValuesIn(all_transfers));
188 258
189 typedef std::tr1::tuple<ColorSpace::PrimaryID, 259 typedef std::tr1::tuple<ColorSpace::PrimaryID,
190 ColorSpace::TransferID, 260 ColorSpace::TransferID,
191 ColorSpace::MatrixID, 261 ColorSpace::MatrixID,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 320
251 INSTANTIATE_TEST_CASE_P( 321 INSTANTIATE_TEST_CASE_P(
252 C, 322 C,
253 ColorSpaceTest, 323 ColorSpaceTest,
254 testing::Combine(testing::ValuesIn(all_primaries), 324 testing::Combine(testing::ValuesIn(all_primaries),
255 testing::Values(ColorSpace::TransferID::BT709), 325 testing::Values(ColorSpace::TransferID::BT709),
256 testing::ValuesIn(all_matrices), 326 testing::ValuesIn(all_matrices),
257 testing::ValuesIn(all_ranges), 327 testing::ValuesIn(all_ranges),
258 testing::ValuesIn(intents))); 328 testing::ValuesIn(intents)));
259 } // namespace 329 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698