Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: src/effects/SkColorFilterImageFilter.cpp

Issue 967833003: check for inputs before reporting asColorFilter (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: use asserts in asColorFilter Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/ImageFilterTest.cpp » ('j') | tests/ImageFilterTest.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/SkColorFilterImageFilter.cpp
diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp
index fdf6de7b76daf755f2fea5d49c87a753374e3cb7..1f7f7505f32c95b1454f9cac96cc85ad0a130bcf 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 (!cropRect && input && input->asColorFilter(&inputCF)) {
Stephen White 2015/03/04 19:38:37 I'm not sure this !cropRect check is correct. I th
reed1 2015/03/04 20:00:58 Agreed.
+ // This is an optimization, as it collapses the hierarchy by just combining the
+ // colorfilters into a single imagefilter.
+ 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;
}
« no previous file with comments | « no previous file | tests/ImageFilterTest.cpp » ('j') | tests/ImageFilterTest.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698