diff options
author | Brian Osman <brianosman@google.com> | 2016-10-19 14:56:07 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-10-20 20:21:35 +0000 |
commit | bbf251bf225489a0939fff6df938035a290f4d16 (patch) | |
tree | 4fbf67858e195d7b307248f4507c9506ece8316d /src/core/SkColorSpace.cpp | |
parent | 8ffb26051f16a2ec4fbd1f8b0737d6d86c0ad819 (diff) |
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 <brianosman@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/core/SkColorSpace.cpp')
-rw-r--r-- | src/core/SkColorSpace.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index e90254c969..ba45d9b6f4 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -576,16 +576,20 @@ bool SkColorSpace::Equals(const SkColorSpace* src, const SkColorSpace* dst) { const SkColorSpace_XYZ* srcXYZ = static_cast<const SkColorSpace_XYZ*>(src); const SkColorSpace_XYZ* dstXYZ = static_cast<const SkColorSpace_XYZ*>(dst); + if (srcXYZ->gammaNamed() != dstXYZ->gammaNamed()) { + return false; + } + switch (srcXYZ->gammaNamed()) { case kSRGB_SkGammaNamed: case k2Dot2Curve_SkGammaNamed: case kLinear_SkGammaNamed: - return (srcXYZ->gammaNamed() == dstXYZ->gammaNamed()) && - (*srcXYZ->toXYZD50() == *dstXYZ->toXYZD50()); - default: - if (srcXYZ->gammaNamed() != dstXYZ->gammaNamed()) { - return false; + if (srcXYZ->toXYZD50Hash() == dstXYZ->toXYZD50Hash()) { + SkASSERT(*srcXYZ->toXYZD50() == *dstXYZ->toXYZD50() && "Hash collision"); + return true; } + return false; + default: // It is unlikely that we will reach this case. sk_sp<SkData> serializedSrcData = src->serialize(); sk_sp<SkData> serializedDstData = dst->serialize(); |