diff options
author | reed <reed@chromium.org> | 2015-03-08 18:47:13 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-08 18:47:13 -0700 |
commit | 1b110d6bf4aebd4452687a8294d222e3d7e1ed38 (patch) | |
tree | c1d926d6031060f7b6b2aa0346220e5297f69e5a /src/core/SkCanvas.cpp | |
parent | f641bd076d29666a5d2a10d5384e4924b0a0e524 (diff) |
Revert of use colorfilter instead of imagefilter when possible (patchset #6 id:100001 of https://codereview.chromium.org/966233002/)
Reason for revert:
Lots of PDF failures -- need to investigate
Original issue's description:
> use colorfilter instead of imagefilter when possible
>
> big speed win w/ nanobench --match colorfilter_
>
> BUG=skia:
> TBR=
>
> Will require rebaselining, so landing temporarily to trigger layouttests.
>
> Committed: https://skia.googlesource.com/skia/+/f641bd076d29666a5d2a10d5384e4924b0a0e524
TBR=sugoi@google.com,senorblanco@google.com,bsalomon@google.com,reed@google.com,senorblanco@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/991693002
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r-- | src/core/SkCanvas.cpp | 50 |
1 files changed, 5 insertions, 45 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index d80ad376f8..a47bd89c05 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -8,7 +8,6 @@ #include "SkCanvas.h" #include "SkCanvasPriv.h" #include "SkBitmapDevice.h" -#include "SkColorFilter.h" #include "SkDeviceImageFilterProxy.h" #include "SkDraw.h" #include "SkDrawable.h" @@ -284,36 +283,6 @@ private: ///////////////////////////////////////////////////////////////////////////// -static SkPaint* set_if_needed(SkLazyPaint* lazy, const SkPaint& orig) { - return lazy->isValid() ? lazy->get() : lazy->set(orig); -} - -/** - * If the paint has an imagefilter, but it can be simplified to just a colorfilter, return that - * colorfilter, else return NULL. - */ -static SkColorFilter* image_to_color_filter(const SkPaint& paint) { - SkImageFilter* imgf = paint.getImageFilter(); - if (!imgf) { - return NULL; - } - - SkColorFilter* imgCF; - if (!imgf->asAColorFilter(&imgCF)) { - return NULL; - } - - SkColorFilter* paintCF = paint.getColorFilter(); - if (NULL == paintCF) { - // there is no existing paint colorfilter, so we can just return the imagefilter's - return imgCF; - } - - // The paint has both a colorfilter and an imagefilter. - SkAutoTUnref<SkColorFilter> autoImgCF(imgCF); - return SkColorFilter::CreateComposeFilter(imgCF, paintCF); -} - class AutoDrawLooper { public: AutoDrawLooper(SkCanvas* canvas, const SkSurfaceProps& props, const SkPaint& paint, @@ -326,17 +295,9 @@ public: fDoClearImageFilter = false; fDone = false; - SkColorFilter* simplifiedCF = image_to_color_filter(fOrigPaint); - if (simplifiedCF) { - SkPaint* paint = set_if_needed(&fLazyPaintInit, fOrigPaint); - paint->setColorFilter(simplifiedCF)->unref(); - paint->setImageFilter(NULL); - fPaint = paint; - } - - if (!skipLayerForImageFilter && fPaint->getImageFilter()) { + if (!skipLayerForImageFilter && fOrigPaint.getImageFilter()) { SkPaint tmp; - tmp.setImageFilter(fPaint->getImageFilter()); + tmp.setImageFilter(fOrigPaint.getImageFilter()); (void)canvas->internalSaveLayer(bounds, &tmp, SkCanvas::kARGB_ClipLayer_SaveFlag, true, SkCanvas::kFullLayer_SaveLayerStrategy); // we'll clear the imageFilter for the actual draws in next(), so @@ -358,7 +319,7 @@ public: uint32_t oldFlags = paint.getFlags(); fNewPaintFlags = filter_paint_flags(props, oldFlags); if (fIsSimple && (fNewPaintFlags != oldFlags)) { - SkPaint* paint = set_if_needed(&fLazyPaintInit, fOrigPaint); + SkPaint* paint = fLazyPaint.set(fOrigPaint); paint->setFlags(fNewPaintFlags); fPaint = paint; // if we're not simple, doNext() will take care of calling setFlags() @@ -389,7 +350,7 @@ public: } private: - SkLazyPaint fLazyPaintInit, fLazyPaintPerNext; + SkLazyPaint fLazyPaint; SkCanvas* fCanvas; const SkPaint& fOrigPaint; SkDrawFilter* fFilter; @@ -410,8 +371,7 @@ bool AutoDrawLooper::doNext(SkDrawFilter::Type drawType) { SkASSERT(!fIsSimple); SkASSERT(fLooperContext || fFilter || fDoClearImageFilter); - SkPaint* paint = fLazyPaintPerNext.set(fLazyPaintInit.isValid() ? - *fLazyPaintInit.get() : fOrigPaint); + SkPaint* paint = fLazyPaint.set(fOrigPaint); paint->setFlags(fNewPaintFlags); if (fDoClearImageFilter) { |