diff options
author | 2015-10-20 10:17:34 -0700 | |
---|---|---|
committer | 2015-10-20 10:17:34 -0700 | |
commit | 1d3ff434954189e194c468f429598465146dcf4b (patch) | |
tree | b26baea51421dca92277b8adfca8f24dcb1a3d62 /src/effects/SkMorphologyImageFilter.cpp | |
parent | 0bccd8749bdce79b2d71518fe65783b1a9b06445 (diff) |
Image filters: Replace all use of tryAllocPixels() with createDevice().
In order to have a central pinch point for bitmap allocation, change all
filters to use Proxy::createDevice() instead of allocating memory
directly with SkBitmap::tryAllocPixels().
This will aid in moving filter backing stores and caches to
discardable memory.
BUG=skia:
Review URL: https://codereview.chromium.org/1414843003
Diffstat (limited to 'src/effects/SkMorphologyImageFilter.cpp')
-rw-r--r-- | src/effects/SkMorphologyImageFilter.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 416bd23567..4e08d9dd73 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -8,6 +8,7 @@ #include "SkMorphologyImageFilter.h" #include "SkBitmap.h" #include "SkColorPriv.h" +#include "SkDevice.h" #include "SkOpts.h" #include "SkReadBuffer.h" #include "SkRect.h" @@ -76,10 +77,6 @@ bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p return false; } - if (!dst->tryAllocPixels(src.info().makeWH(bounds.width(), bounds.height()))) { - return false; - } - SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()), SkIntToScalar(this->radius().height())); ctx.ctm().mapVectors(&radius, 1); @@ -100,12 +97,20 @@ bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p return true; } - SkBitmap temp; - if (!temp.tryAllocPixels(dst->info())) { + SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bounds.height())); + if (!device) { return false; } + *dst = device->accessBitmap(false); + SkAutoLockPixels alp_dst(*dst); if (width > 0 && height > 0) { + SkAutoTUnref<SkBaseDevice> tempDevice(proxy->createDevice(dst->width(), dst->height())); + if (!tempDevice) { + return false; + } + SkBitmap temp = tempDevice->accessBitmap(false); + SkAutoLockPixels alp_temp(temp); callProcX(procX, src, &temp, width, srcBounds); SkIRect tmpBounds = SkIRect::MakeWH(srcBounds.width(), srcBounds.height()); callProcY(procY, temp, dst, height, tmpBounds); |