Check fullness and purge on every strike lookup
In the old code, the cache was checked and perged on every reattach
of a strike. That was left out of the multi-threaded code. Add the
check and purge back in to maintain cache size.
* Removed minimum cache size from setCacheSizeLimit.
Bug: skia:10046
Change-Id: I2438c83f04b6da8133c161a29604c3c3d7f58cd8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/277066
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
(cherry picked from commit 3b946c16180ca2df5b239d410829c046bb74ceb2)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/297599
Auto-Submit: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/src/core/SkStrikeCache.cpp b/src/core/SkStrikeCache.cpp
index c783081..b5bc181 100644
--- a/src/core/SkStrikeCache.cpp
+++ b/src/core/SkStrikeCache.cpp
@@ -101,6 +101,7 @@
auto scaler = typeface.createScalerContext(effects, &desc);
strike = this->internalCreateStrike(desc, std::move(scaler));
}
+ this->internalPurge();
return strike;
}
@@ -181,7 +182,9 @@
SkExclusiveStrikePtr SkStrikeCache::findStrikeExclusive(const SkDescriptor& desc) {
SkAutoSpinlock ac(fLock);
- return SkExclusiveStrikePtr(this->internalFindStrikeOrNull(desc));
+ sk_sp<SkStrike> result = this->internalFindStrikeOrNull(desc);
+ this->internalPurge();
+ return SkExclusiveStrikePtr(result);
}
auto SkStrikeCache::internalFindStrikeOrNull(const SkDescriptor& desc) -> sk_sp<Strike> {
@@ -251,11 +254,6 @@
}
size_t SkStrikeCache::setCacheSizeLimit(size_t newLimit) {
- static const size_t minLimit = 256 * 1024;
- if (newLimit < minLimit) {
- newLimit = minLimit;
- }
-
SkAutoSpinlock ac(fLock);
size_t prevLimit = fCacheSizeLimit;