aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2016-10-19 14:56:07 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-10-20 20:21:35 +0000
commitbbf251bf225489a0939fff6df938035a290f4d16 (patch)
tree4fbf67858e195d7b307248f4507c9506ece8316d /src/core/SkColorSpace.cpp
parent8ffb26051f16a2ec4fbd1f8b0737d6d86c0ad819 (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.cpp14
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();