aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkColorFilterImageFilter.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-03-05 10:22:20 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-05 10:22:20 -0800
commitdac843bf046c2cd79fd955cb177aee241d7a4b0c (patch)
tree9a0d9a9160ae4c53ba14bdee9fadb5fb725340ed /src/effects/SkColorFilterImageFilter.cpp
parentbca3c9fb2d5c043985b878633e9630cf12e04bd6 (diff)
Use ComposeColorFilter in factory to collapse consecutive filters (when possible).
Change asColorFilter to reflect its reliance on the new factory behavior. patch from issue 967143002 at patchset 80001 (http://crrev.com/967143002#ps80001) BUG=skia: Review URL: https://codereview.chromium.org/967833003
Diffstat (limited to 'src/effects/SkColorFilterImageFilter.cpp')
-rwxr-xr-xsrc/effects/SkColorFilterImageFilter.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp
index fdf6de7b76..908f814b94 100755
--- a/src/effects/SkColorFilterImageFilter.cpp
+++ b/src/effects/SkColorFilterImageFilter.cpp
@@ -21,10 +21,12 @@ SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf,
return NULL;
}
- SkColorFilter* inputColorFilter;
- if (input && input->asColorFilter(&inputColorFilter)) {
- SkAutoUnref autoUnref(inputColorFilter);
- SkAutoTUnref<SkColorFilter> newCF(cf->newComposed(inputColorFilter));
+ SkColorFilter* inputCF;
+ if (input && input->asColorFilter(&inputCF)) {
+ // This is an optimization, as it collapses the hierarchy by just combining the two
+ // colorfilters into a single one, which the new imagefilter will wrap.
+ SkAutoUnref autoUnref(inputCF);
+ SkAutoTUnref<SkColorFilter> newCF(SkColorFilter::CreateComposeFilter(cf, inputCF));
if (newCF) {
return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0));
}
@@ -86,10 +88,13 @@ bool SkColorFilterImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& sourc
}
bool SkColorFilterImageFilter::asColorFilter(SkColorFilter** filter) const {
- if (!cropRectIsSet()) {
+ if (!this->cropRectIsSet()) {
+ SkASSERT(1 == this->countInputs());
+ // Since our factory has already performed the collapse optimization, we can assert that
+ // if we have an input, it is *not* also a colorfilter.
+ SkASSERT(!this->getInput(0) || !this->getInput(0)->asColorFilter(NULL));
if (filter) {
- *filter = fColorFilter;
- fColorFilter->ref();
+ *filter = SkRef(fColorFilter);
}
return true;
}