Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(424)

Unified Diff: src/gpu/GrContext.cpp

Issue 563283004: Use per-typeface sets of glyphs for nvpr text (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_glyphmemorypath
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrContext.cpp
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 8d515bf09c295e1bb608b54c5b34f85ca2eb6453..06d579e8542d44dbd94945a20a6965e4589e50c2 100755
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -1926,6 +1926,32 @@ GrPath* GrContext::createPath(const SkPath& inPath, const SkStrokeRec& stroke) {
return path;
}
+GrPathRange* GrContext::createGlyphs(const SkTypeface* typeface,
+ const SkDescriptor* desc,
+ const SkStrokeRec& stroke) {
+ static const GrCacheID::Domain gGlyphsDomain = GrCacheID::GenerateDomain();
+
+ SkASSERT(fGpu->caps()->pathRenderingSupport());
+
+ GrCacheID::Key key;
+ uint64_t* keyData = key.fData64;
+ keyData[0] = desc ? desc->getChecksum() : 0;
+ keyData[0] = (keyData[0] << 32) | (typeface ? typeface->uniqueID() : 0);
+ keyData[1] = GrPath::ComputeStrokeKey(stroke);
+ GrResourceKey resourceKey = GrResourceKey(GrCacheID(gGlyphsDomain, key),
+ GrPathRange::resourceType(), 0);
+
+ GrPathRange* glyphs = static_cast<GrPathRange*>(fResourceCache->find(resourceKey));
+ if (glyphs && (NULL == desc || glyphs->isEqualTo(*desc))) {
+ glyphs->ref();
+ } else {
+ glyphs = fGpu->createGlyphs(typeface, desc, stroke);
+ fResourceCache->purgeAsNeeded(1, glyphs->gpuMemorySize());
+ fResourceCache->addResource(resourceKey, glyphs);
+ }
+ return glyphs;
+}
+
void GrContext::addResourceToCache(const GrResourceKey& resourceKey, GrGpuResource* resource) {
fResourceCache->purgeAsNeeded(1, resource->gpuMemorySize());
fResourceCache->addResource(resourceKey, resource);

Powered by Google App Engine
This is Rietveld 408576698