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

Unified Diff: src/image/SkImage.cpp

Issue 2360663002: Add a transient image filter cache to SkImage::makeWithFilter & PDF (Closed)
Patch Set: Created 4 years, 3 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/image/SkImage.cpp
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index b8a321cea1906549e437e3b805762e43406ccf21..b92ba0daf63cc947edb2a3b15bace09b35d5254f 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -11,6 +11,7 @@
#include "SkData.h"
#include "SkImageEncoder.h"
#include "SkImageFilter.h"
+#include "SkImageFilterCache.h"
#include "SkImageGenerator.h"
#include "SkImagePriv.h"
#include "SkImageShader.h"
@@ -334,40 +335,41 @@ sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize&
sk_sp<SkImage> SkImage::makeWithFilter(const SkImageFilter* filter, const SkIRect& subset,
const SkIRect& clipBounds, SkIRect* outSubset,
SkIPoint* offset) const {
- if (!filter || !outSubset || !offset || !this->bounds().contains(subset)) {
- return nullptr;
- }
- sk_sp<SkSpecialImage> srcSpecialImage = SkSpecialImage::MakeFromImage(
- subset, sk_ref_sp(const_cast<SkImage*>(this)));
- if (!srcSpecialImage) {
- return nullptr;
- }
-
- // FIXME: build a cache here.
- SkImageFilter::Context context(SkMatrix::I(), clipBounds, nullptr);
- sk_sp<SkSpecialImage> result =
- filter->filterImage(srcSpecialImage.get(), context, offset);
-
- if (!result) {
- return nullptr;
- }
-
- SkIRect fullSize = SkIRect::MakeWH(result->width(), result->height());
+ if (!filter || !outSubset || !offset || !this->bounds().contains(subset)) {
+ return nullptr;
+ }
+ sk_sp<SkSpecialImage> srcSpecialImage = SkSpecialImage::MakeFromImage(
+ subset, sk_ref_sp(const_cast<SkImage*>(this)));
+ if (!srcSpecialImage) {
+ return nullptr;
+ }
+
robertphillips 2016/09/21 15:05:26 Is there no way we can just have one kDefaultImage
Brian Osman 2016/09/21 15:39:21 Done.
+ static const size_t kCacheSize = 32 * 1024 * 1024;
+ SkAutoTUnref<SkImageFilterCache> cache(SkImageFilterCache::Create(kCacheSize));
+ SkImageFilter::Context context(SkMatrix::I(), clipBounds, cache.get());
+ sk_sp<SkSpecialImage> result =
+ filter->filterImage(srcSpecialImage.get(), context, offset);
+
+ if (!result) {
+ return nullptr;
+ }
+
+ SkIRect fullSize = SkIRect::MakeWH(result->width(), result->height());
#if SK_SUPPORT_GPU
- if (result->isTextureBacked()) {
- GrContext* context = result->getContext();
- sk_sp<GrTexture> texture = result->asTextureRef(context);
- fullSize = SkIRect::MakeWH(texture->width(), texture->height());
- }
+ if (result->isTextureBacked()) {
+ GrContext* context = result->getContext();
+ sk_sp<GrTexture> texture = result->asTextureRef(context);
+ fullSize = SkIRect::MakeWH(texture->width(), texture->height());
+ }
#endif
- *outSubset = SkIRect::MakeWH(result->width(), result->height());
- if (!outSubset->intersect(clipBounds.makeOffset(-offset->x(), -offset->y()))) {
- return nullptr;
- }
- offset->fX += outSubset->x();
- offset->fY += outSubset->y();
- // This isn't really a "tight" subset, but includes any texture padding.
- return result->makeTightSubset(fullSize);
+ *outSubset = SkIRect::MakeWH(result->width(), result->height());
+ if (!outSubset->intersect(clipBounds.makeOffset(-offset->x(), -offset->y()))) {
+ return nullptr;
+ }
+ offset->fX += outSubset->x();
+ offset->fY += outSubset->y();
+ // This isn't really a "tight" subset, but includes any texture padding.
+ return result->makeTightSubset(fullSize);
}
bool SkImage::isLazyGenerated() const {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698