| Index: src/effects/SkColorFilterImageFilter.cpp
|
| diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp
|
| index fdf6de7b76daf755f2fea5d49c87a753374e3cb7..d2946adcf690d5e00f1ea0ad77d90a9371d53cd9 100755
|
| --- a/src/effects/SkColorFilterImageFilter.cpp
|
| +++ b/src/effects/SkColorFilterImageFilter.cpp
|
| @@ -21,13 +21,13 @@ SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf,
|
| return NULL;
|
| }
|
|
|
| - SkColorFilter* inputColorFilter;
|
| - if (input && input->asColorFilter(&inputColorFilter)) {
|
| - SkAutoUnref autoUnref(inputColorFilter);
|
| - SkAutoTUnref<SkColorFilter> newCF(cf->newComposed(inputColorFilter));
|
| - if (newCF) {
|
| - return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0));
|
| - }
|
| + 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 this imagefilter will wrap.
|
| + SkAutoUnref autoUnref(inputCF);
|
| + SkAutoTUnref<SkColorFilter> newCF(SkColorFilter::CreateComposeFilter(cf, inputCF));
|
| + return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0));
|
| }
|
|
|
| return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect, uniqueID));
|
| @@ -86,10 +86,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;
|
| }
|
|
|