Split getOrCreateCache into a SkFont and descriptor based calles
Change-Id: Ie4724137baf3d355b94bd9966cc381a688c465fb Reviewed-on: https://skia-review.googlesource.com/c/190671 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Herb Derby <herb@google.com>
This commit is contained in:
parent
37064c1739
commit
c6dde3bc69
@ -309,14 +309,19 @@ SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache(
|
||||
SkAutoDescriptor descStorage;
|
||||
auto desc = create_descriptor(paint, font, matrix, props, flags, &descStorage, effects);
|
||||
|
||||
SkTypeface* typeface = font.getTypefaceOrDefault();
|
||||
return this->getOrCreateCache(*desc, *font.getTypefaceOrDefault(), *effects);
|
||||
|
||||
}
|
||||
|
||||
SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache(
|
||||
const SkDescriptor& desc, const SkTypeface& typeface, SkScalerContextEffects effects) {
|
||||
|
||||
// In cases where tracing is turned off, make sure not to get an unused function warning.
|
||||
// Lambdaize the function.
|
||||
TRACE_EVENT1("skia", "RecForDesc", "rec",
|
||||
TRACE_STR_COPY(
|
||||
[desc](){
|
||||
auto ptr = desc->findEntry(kRec_SkDescriptorTag, nullptr);
|
||||
[&desc](){
|
||||
auto ptr = desc.findEntry(kRec_SkDescriptorTag, nullptr);
|
||||
SkScalerContextRec rec;
|
||||
std::memcpy(&rec, ptr, sizeof(rec));
|
||||
return rec.dump();
|
||||
@ -325,22 +330,22 @@ SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache(
|
||||
);
|
||||
|
||||
// Already locked.
|
||||
if (fLockedDescs.find(desc) != fLockedDescs.end()) {
|
||||
auto it = fRemoteGlyphStateMap.find(desc);
|
||||
if (fLockedDescs.find(&desc) != fLockedDescs.end()) {
|
||||
auto it = fRemoteGlyphStateMap.find(&desc);
|
||||
SkASSERT(it != fRemoteGlyphStateMap.end());
|
||||
SkGlyphCacheState* cache = it->second.get();
|
||||
cache->setTypefaceAndEffects(typeface, *effects);
|
||||
cache->setTypefaceAndEffects(&typeface, effects);
|
||||
return cache;
|
||||
}
|
||||
|
||||
// Try to lock.
|
||||
auto it = fRemoteGlyphStateMap.find(desc);
|
||||
auto it = fRemoteGlyphStateMap.find(&desc);
|
||||
if (it != fRemoteGlyphStateMap.end()) {
|
||||
SkGlyphCacheState* cache = it->second.get();
|
||||
bool locked = fDiscardableHandleManager->lockHandle(it->second->discardableHandleId());
|
||||
if (locked) {
|
||||
fLockedDescs.insert(it->first);
|
||||
cache->setTypefaceAndEffects(typeface, *effects);
|
||||
cache->setTypefaceAndEffects(&typeface, effects);
|
||||
return cache;
|
||||
}
|
||||
|
||||
@ -349,21 +354,20 @@ SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache(
|
||||
fRemoteGlyphStateMap.erase(it);
|
||||
}
|
||||
|
||||
const SkFontID typefaceId = typeface->uniqueID();
|
||||
const SkFontID typefaceId = typeface.uniqueID();
|
||||
if (!fCachedTypefaces.contains(typefaceId)) {
|
||||
fCachedTypefaces.add(typefaceId);
|
||||
fTypefacesToSend.emplace_back(typefaceId,
|
||||
typeface->countGlyphs(),
|
||||
typeface->fontStyle(),
|
||||
typeface->isFixedPitch());
|
||||
fTypefacesToSend.emplace_back(typefaceId, typeface.countGlyphs(),
|
||||
typeface.fontStyle(),
|
||||
typeface.isFixedPitch());
|
||||
}
|
||||
|
||||
auto context = typeface->createScalerContext(*effects, desc);
|
||||
auto context = typeface.createScalerContext(effects, &desc);
|
||||
|
||||
// Create a new cache state and insert it into the map.
|
||||
auto newHandle = fDiscardableHandleManager->createHandle();
|
||||
auto cacheState = skstd::make_unique<SkGlyphCacheState>(
|
||||
*desc, std::move(context), newHandle);
|
||||
desc, std::move(context), newHandle);
|
||||
|
||||
auto* cacheStatePtr = cacheState.get();
|
||||
|
||||
@ -372,7 +376,7 @@ SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache(
|
||||
|
||||
checkForDeletedEntries();
|
||||
|
||||
cacheStatePtr->setTypefaceAndEffects(typeface, *effects);
|
||||
cacheStatePtr->setTypefaceAndEffects(&typeface, effects);
|
||||
return cacheStatePtr;
|
||||
}
|
||||
|
||||
|
@ -132,6 +132,10 @@ public:
|
||||
SkScalerContextFlags flags,
|
||||
SkScalerContextEffects* effects);
|
||||
|
||||
SkGlyphCacheState* getOrCreateCache(const SkDescriptor& desc,
|
||||
const SkTypeface& typeface,
|
||||
SkScalerContextEffects effects);
|
||||
|
||||
void setMaxEntriesInDescriptorMapForTesting(size_t count) {
|
||||
fMaxEntriesInDescriptorMap = count;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user