aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXform.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/SkColorSpaceXform.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/SkColorSpaceXform.cpp')
-rw-r--r--src/core/SkColorSpaceXform.cpp21
1 files changed, 4 insertions, 17 deletions
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> SkColorSpaceXform::New(SkColorSpace* srcSpace,
SkColorSpace* dstSpace) {
if (!srcSpace || !dstSpace) {
@@ -381,11 +367,12 @@ std::unique_ptr<SkColorSpaceXform> 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());
}
}