From 6d9f42984d94a2e9116dd951d47cd65cd8f4d401 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Thu, 6 Jul 2017 12:32:55 -0400 Subject: only create new instance if needed for colorspacexformer just an experiment to address performance when imagefilters are cached. Bug: skia: Change-Id: Ic1033c897d0a569b46a339fb3ae7f8f961882953 Reviewed-on: https://skia-review.googlesource.com/21395 Commit-Queue: Mike Reed Reviewed-by: Florin Malita --- src/effects/SkDisplacementMapEffect.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'src/effects/SkDisplacementMapEffect.cpp') diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index dc85088f5f..90756a7265 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -8,6 +8,7 @@ #include "SkDisplacementMapEffect.h" #include "SkBitmap.h" +#include "SkColorSpaceXformer.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" #include "SkWriteBuffer.h" @@ -358,19 +359,17 @@ sk_sp SkDisplacementMapEffect::onFilterImage(SkSpecialImage* sou sk_sp SkDisplacementMapEffect::onMakeColorSpace(SkColorSpaceXformer* xformer) const { SkASSERT(2 == this->countInputs()); - if (!this->getInput(1)) { - return sk_ref_sp(const_cast(this)); - } - // Intentionally avoid xforming the displacement filter. The values will be used as // offsets, not as colors. sk_sp displacement = sk_ref_sp(const_cast(this->getInput(0))); - sk_sp color = - this->getInput(1) ? this->getInput(1)->makeColorSpace(xformer) : nullptr; + sk_sp color = xformer->apply(this->getInput(1)); - return SkDisplacementMapEffect::Make(fXChannelSelector, fYChannelSelector, fScale, - std::move(displacement), std::move(color), - this->getCropRectIfSet()); + if (color.get() != this->getInput(1)) { + return SkDisplacementMapEffect::Make(fXChannelSelector, fYChannelSelector, fScale, + std::move(displacement), std::move(color), + this->getCropRectIfSet()); + } + return this->refMe(); } SkRect SkDisplacementMapEffect::computeFastBounds(const SkRect& src) const { -- cgit v1.2.3