diff options
author | Florin Malita <fmalita@chromium.org> | 2017-07-10 11:14:40 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-10 16:17:45 +0000 |
commit | 5449aade6227a1e701ebc24ee683d94a810c9a70 (patch) | |
tree | 34fe52f49f780e231cebaeac81e603a90dd3f9d6 /src/core/SkColorSpaceXformer.h | |
parent | 81995592d8a941fcf79ba5cee71a37510fa8d6e5 (diff) |
[Reland] More SkColorSpaceXformer caching
* apply(SkColorFilter*)
* apply(SkImage*)
Also add purge logic to minimize caching scope.
Change-Id: I295d20f760f8be0c3746858d6f9c73e351f10a36
Reviewed-on: https://skia-review.googlesource.com/22030
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXformer.h')
-rw-r--r-- | src/core/SkColorSpaceXformer.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/core/SkColorSpaceXformer.h b/src/core/SkColorSpaceXformer.h index fce8d03e43..5fa4d836b7 100644 --- a/src/core/SkColorSpaceXformer.h +++ b/src/core/SkColorSpaceXformer.h @@ -41,10 +41,24 @@ public: private: SkColorSpaceXformer(sk_sp<SkColorSpace> dst, std::unique_ptr<SkColorSpaceXform> fromSRGB); + 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*)); + + void purgeCaches(); + + class AutoCachePurge; + sk_sp<SkColorSpace> fDst; std::unique_ptr<SkColorSpaceXform> fFromSRGB; - SkTHashMap<uint32_t, sk_sp<SkImageFilter>> fFilterCache; + size_t fReentryCount; // tracks the number of nested apply() calls for cache purging. + + Cache<SkImage > fImageCache; + Cache<SkColorFilter> fColorFilterCache; + Cache<SkImageFilter> fImageFilterCache; }; #endif |