aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkDisplacementMapEffect.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-07-06 12:32:55 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-06 17:01:16 +0000
commit6d9f42984d94a2e9116dd951d47cd65cd8f4d401 (patch)
tree1b0bd5b49fa59188fc0886e1aff4f534cd4e860f /src/effects/SkDisplacementMapEffect.cpp
parent674a1848ae62277ea9a2d022b60aa1f17d306f17 (diff)
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 <reed@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src/effects/SkDisplacementMapEffect.cpp')
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp17
1 files changed, 8 insertions, 9 deletions
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<SkSpecialImage> SkDisplacementMapEffect::onFilterImage(SkSpecialImage* sou
sk_sp<SkImageFilter> SkDisplacementMapEffect::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
SkASSERT(2 == this->countInputs());
- if (!this->getInput(1)) {
- return sk_ref_sp(const_cast<SkDisplacementMapEffect*>(this));
- }
-
// Intentionally avoid xforming the displacement filter. The values will be used as
// offsets, not as colors.
sk_sp<SkImageFilter> displacement = sk_ref_sp(const_cast<SkImageFilter*>(this->getInput(0)));
- sk_sp<SkImageFilter> color =
- this->getInput(1) ? this->getInput(1)->makeColorSpace(xformer) : nullptr;
+ sk_sp<SkImageFilter> 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 {