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

Unified Diff: ui/gfx/color_space_unittest.cc

Issue 2717263003: color: Update ICC histograms based on results (Closed)
Patch Set: Add obsolete tags 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 | « tools/metrics/histograms/histograms.xml ('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_space_unittest.cc
diff --git a/ui/gfx/color_space_unittest.cc b/ui/gfx/color_space_unittest.cc
index 952bec4857ba7837d17012c6e617191f754191af..c9c8775ccce721ab86fe6bf9a9a66f7f7ef172eb 100644
--- a/ui/gfx/color_space_unittest.cc
+++ b/ui/gfx/color_space_unittest.cc
@@ -102,11 +102,10 @@ TEST_P(ColorSpaceTableTest, ApproximateTransferFn) {
t.push_back(SkTransferFnEval(tr_fn, v));
}
- bool converged = false;
- float error = 0;
SkColorSpaceTransferFn fn_approx;
- SkApproximateTransferFn(x.data(), t.data(), x.size(), &fn_approx, &error,
- &converged);
+ bool converged =
+ SkApproximateTransferFn(x.data(), t.data(), x.size(), &fn_approx);
+ EXPECT_TRUE(converged);
for (size_t i = 0; i < x.size(); ++i) {
float fn_approx_of_x = SkTransferFnEval(fn_approx, x[i]);
@@ -117,10 +116,10 @@ TEST_P(ColorSpaceTableTest, ApproximateTransferFn) {
}
ColorSpace::TransferID all_transfers[] = {
- ColorSpace::TransferID::GAMMA22, ColorSpace::TransferID::GAMMA24,
- ColorSpace::TransferID::GAMMA28, ColorSpace::TransferID::BT709,
- ColorSpace::TransferID::SMPTE240M, ColorSpace::TransferID::IEC61966_2_1,
- ColorSpace::TransferID::SMPTEST428_1, ColorSpace::TransferID::LINEAR};
+ ColorSpace::TransferID::GAMMA22, ColorSpace::TransferID::GAMMA24,
+ ColorSpace::TransferID::GAMMA28, ColorSpace::TransferID::BT709,
+ ColorSpace::TransferID::SMPTE240M, ColorSpace::TransferID::IEC61966_2_1,
+ ColorSpace::TransferID::LINEAR};
size_t all_table_sizes[] = {512, 256, 128, 64, 16, 11, 8, 7, 6, 5, 4};
@@ -129,5 +128,49 @@ INSTANTIATE_TEST_CASE_P(A,
testing::Combine(testing::ValuesIn(all_transfers),
testing::ValuesIn(all_table_sizes)));
+TEST(ColorSpace, ApproximateTransferFnBadMatch) {
+ const float kStep = 1.f / 512.f;
+ ColorSpace::TransferID transfer_ids[3] = {
+ ColorSpace::TransferID::IEC61966_2_1, ColorSpace::TransferID::GAMMA22,
+ ColorSpace::TransferID::BT709,
+ };
+ gfx::ColorSpace color_spaces[3];
+
+ // The first iteration will have a perfect match. The second will be very
+ // close. The third will converge, but with an error of ~7/256.
+ for (size_t transfers_to_use = 1; transfers_to_use <= 3; ++transfers_to_use) {
+ std::vector<float> x;
+ std::vector<float> t;
+ for (size_t c = 0; c < transfers_to_use; ++c) {
+ color_spaces[c] =
+ gfx::ColorSpace(ColorSpace::PrimaryID::BT709, transfer_ids[c]);
+ SkColorSpaceTransferFn tr_fn;
+ bool result = color_spaces[c].GetTransferFunction(&tr_fn);
+ CHECK(result);
+
+ for (float v = 0; v <= 1.f; v += kStep) {
+ x.push_back(v);
+ t.push_back(SkTransferFnEval(tr_fn, v));
+ }
+ }
+
+ SkColorSpaceTransferFn fn_approx;
+ bool converged =
+ SkApproximateTransferFn(x.data(), t.data(), x.size(), &fn_approx);
+ EXPECT_TRUE(converged);
+
+ float expected_error = 1.5f / 256.f;
+ if (transfers_to_use == 3)
+ expected_error = 8.f / 256.f;
+
+ for (size_t i = 0; i < x.size(); ++i) {
+ float fn_approx_of_x = SkTransferFnEval(fn_approx, x[i]);
+ EXPECT_NEAR(t[i], fn_approx_of_x, expected_error);
+ if (std::abs(t[i] - fn_approx_of_x) > expected_error)
+ break;
+ }
+ }
+}
+
} // namespace
} // namespace gfx
« no previous file with comments | « tools/metrics/histograms/histograms.xml ('k') | ui/gfx/skia_color_space_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698