aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2017-07-09 02:37:48 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-09 02:37:58 +0000
commit8545915d625847675b0ac650accc4420531fe39f (patch)
tree85277ea7a49b36a18243768d7a2f27e44742aa84 /src/core
parent8d1fc16ba6161afc1174e29e30bae4fc9939264f (diff)
Revert "More SkColorSpaceXformer caching"
This reverts commit 8d1fc16ba6161afc1174e29e30bae4fc9939264f. Reason for revert: looks like it broke a couple of Chrome unit tests - https://uberchromegw.corp.google.com/i/chromium.win/builders/Win%207%20Tests%20x64%20%281%29/builds/26292 Original change's description: > More SkColorSpaceXformer caching > > * apply(SkColorFilter*) > * apply(SkImage*) > > Change-Id: I9b55632edd73dbbc5edb8b5ca9bb5bead1131260 > Reviewed-on: https://skia-review.googlesource.com/21736 > Reviewed-by: Mike Reed <reed@google.com> > Commit-Queue: Florin Malita <fmalita@chromium.org> TBR=mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com Change-Id: I86bc61fca370796125b66419ad89bfe3610b996f No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/21980 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkColorSpaceXformer.cpp44
-rw-r--r--src/core/SkColorSpaceXformer.h10
2 files changed, 15 insertions, 39 deletions
diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp
index 6b126a4580..71715add87 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -33,29 +33,8 @@ std::unique_ptr<SkColorSpaceXformer> SkColorSpaceXformer::Make(sk_sp<SkColorSpac
: nullptr;
}
-template <typename T>
-sk_sp<T> SkColorSpaceXformer::cachedApply(const T* src, Cache<T>* cache,
- sk_sp<T> (*applyFunc)(const T*, SkColorSpaceXformer*)) {
- if (!src) {
- return nullptr;
- }
-
- auto key = sk_ref_sp(const_cast<T*>(src));
- if (auto* xformed = cache->find(key)) {
- return sk_ref_sp(xformed->get());
- }
-
- auto xformed = applyFunc(src, this);
- cache->set(std::move(key), xformed);
-
- return xformed;
-}
-
sk_sp<SkImage> SkColorSpaceXformer::apply(const SkImage* src) {
- return this->cachedApply<SkImage>(src, &fImageCache,
- [](const SkImage* img, SkColorSpaceXformer* xformer) {
- return img->makeColorSpace(xformer->fDst, SkTransferFunctionBehavior::kIgnore);
- });
+ return src->makeColorSpace(fDst, SkTransferFunctionBehavior::kIgnore);
}
sk_sp<SkImage> SkColorSpaceXformer::apply(const SkBitmap& src) {
@@ -71,17 +50,22 @@ sk_sp<SkImage> SkColorSpaceXformer::apply(const SkBitmap& src) {
}
sk_sp<SkColorFilter> SkColorSpaceXformer::apply(const SkColorFilter* colorFilter) {
- return this->cachedApply<SkColorFilter>(colorFilter, &fColorFilterCache,
- [](const SkColorFilter* f, SkColorSpaceXformer* xformer) {
- return f->makeColorSpace(xformer);
- });
+ return colorFilter->makeColorSpace(this);
}
sk_sp<SkImageFilter> SkColorSpaceXformer::apply(const SkImageFilter* imageFilter) {
- return this->cachedApply<SkImageFilter>(imageFilter, &fImageFilterCache,
- [](const SkImageFilter* f, SkColorSpaceXformer* xformer) {
- return f->makeColorSpace(xformer);
- });
+ if (!imageFilter) {
+ return nullptr;
+ }
+
+ if (auto* xformedFilter = fFilterCache.find(imageFilter->fUniqueID)) {
+ return sk_ref_sp(xformedFilter->get());
+ }
+
+ auto xformedFilter = imageFilter->makeColorSpace(this);
+ fFilterCache.set(imageFilter->fUniqueID, xformedFilter);
+
+ return xformedFilter;
}
sk_sp<SkShader> SkColorSpaceXformer::apply(const SkShader* shader) {
diff --git a/src/core/SkColorSpaceXformer.h b/src/core/SkColorSpaceXformer.h
index 15701c2317..fce8d03e43 100644
--- a/src/core/SkColorSpaceXformer.h
+++ b/src/core/SkColorSpaceXformer.h
@@ -44,15 +44,7 @@ private:
sk_sp<SkColorSpace> fDst;
std::unique_ptr<SkColorSpaceXform> fFromSRGB;
- template <typename T>
- using Cache = SkTHashMap<sk_sp<T>, sk_sp<T>>;
-
- template <typename T>
- sk_sp<T> cachedApply(const T*, Cache<T>*, sk_sp<T> (*)(const T*, SkColorSpaceXformer*));
-
- Cache<SkImage > fImageCache;
- Cache<SkColorFilter> fColorFilterCache;
- Cache<SkImageFilter> fImageFilterCache;
+ SkTHashMap<uint32_t, sk_sp<SkImageFilter>> fFilterCache;
};
#endif