From bbf251bf225489a0939fff6df938035a290f4d16 Mon Sep 17 00:00:00 2001 From: Brian Osman Date: Wed, 19 Oct 2016 14:56:07 -0400 Subject: Hash the gamut of XYZ color spaces, to speed up comparison Also going to use this to allow caching of GrColorSpaceXforms BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3670 Change-Id: I56ed2dcbdddc22046263f56d68f2d6aea55547c8 Reviewed-on: https://skia-review.googlesource.com/3670 Commit-Queue: Brian Osman Reviewed-by: Matt Sarett Reviewed-by: Brian Salomon --- src/core/SkColorSpaceXform.cpp | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'src/core/SkColorSpaceXform.cpp') diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp index cacb38878c..fbd5972ffc 100644 --- a/src/core/SkColorSpaceXform.cpp +++ b/src/core/SkColorSpaceXform.cpp @@ -337,20 +337,6 @@ void SkColorSpaceXform_Base::BuildDstGammaTables(const uint8_t* dstGammaTables[3 /////////////////////////////////////////////////////////////////////////////////////////////////// -static inline bool is_almost_identity(const SkMatrix44& srcToDst) { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - float expected = (i == j) ? 1.0f : 0.0f; - if (!color_space_almost_equal(srcToDst.getFloat(i,j), expected)) { - return false; - } - } - } - return true; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - std::unique_ptr SkColorSpaceXform::New(SkColorSpace* srcSpace, SkColorSpace* dstSpace) { if (!srcSpace || !dstSpace) { @@ -381,11 +367,12 @@ std::unique_ptr SkColorSpaceXform::New(SkColorSpace* srcSpace srcToDst.setIdentity(); csm = kFull_ColorSpaceMatch; } else { - srcToDst.setConcat(*dstSpaceXYZ->fromXYZD50(), *srcSpaceXYZ->toXYZD50()); - - if (is_almost_identity(srcToDst)) { + if (srcSpaceXYZ->toXYZD50Hash() == dstSpaceXYZ->toXYZD50Hash()) { + SkASSERT(*srcSpaceXYZ->toXYZD50() == *dstSpaceXYZ->toXYZD50() && "Hash collision"); srcToDst.setIdentity(); csm = kGamut_ColorSpaceMatch; + } else { + srcToDst.setConcat(*dstSpaceXYZ->fromXYZD50(), *srcSpaceXYZ->toXYZD50()); } } -- cgit v1.2.3