diff options
author | Florin Malita <fmalita@chromium.org> | 2017-07-09 02:37:48 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-09 02:37:58 +0000 |
commit | 8545915d625847675b0ac650accc4420531fe39f (patch) | |
tree | 85277ea7a49b36a18243768d7a2f27e44742aa84 | |
parent | 8d1fc16ba6161afc1174e29e30bae4fc9939264f (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>
-rw-r--r-- | src/core/SkColorSpaceXformer.cpp | 44 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformer.h | 10 |
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 |