Chromium Code Reviews| Index: src/effects/SkColorFilterImageFilter.cpp |
| diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp |
| index fdf6de7b76daf755f2fea5d49c87a753374e3cb7..908f814b945e2c35a8ff43f6bb1ce2f9c328a6ce 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. |
|
Stephen White
2015/03/05 18:52:18
Since we're now limiting the amount of collapsing
|
| + SkASSERT(!this->getInput(0) || !this->getInput(0)->asColorFilter(NULL)); |
| if (filter) { |
| - *filter = fColorFilter; |
| - fColorFilter->ref(); |
| + *filter = SkRef(fColorFilter); |
| } |
| return true; |
| } |