From 96165ebeaa36a2aae0eedaf12d81f53d3caf999a Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Fri, 23 Feb 2018 12:09:22 -0500 Subject: Separate creation time & flush time behavior in GrDrawOpAtlas (take 2) This CL clarifies what is going on in the GrDrawOpAtlas and GrAtlasGlyphCache. For the GrDrawOpAtlas: At creation time all the allowed pages are created (with their backing GrTextureProxies) but they aren't instantiated. The GrDrawOpAtlas::instantiate call is called in preFlushCB and allocates any pages known to be needed at the start of flush GrDrawOpAtlas::addToAtlas is called at flush time and, if a new page is activated, will instantiated it at that time. During compaction, an unused page will be deInstantiated but its Plots and backing GrTextureProxy will remain alive. The GrAtlasGlyphCache reflects the changes to the GrDrawOpAtlas It now carries a GrProxyProvider for when it needs to create an atlas It passes in a GrResourceProvider* at flush time to allow instantiation. It does not, yet, allocate that GrDrawOpAtlases it might ever require. Change-Id: Ie9b64b13e261b01ee14be09fbf7e17841b7781dc Reviewed-on: https://skia-review.googlesource.com/109749 Reviewed-by: Jim Van Verth Commit-Queue: Robert Phillips --- src/atlastext/SkAtlasTextTarget.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/atlastext') diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp index d80c7a45d7..f553ffad96 100644 --- a/src/atlastext/SkAtlasTextTarget.cpp +++ b/src/atlastext/SkAtlasTextTarget.cpp @@ -183,12 +183,18 @@ void GrAtlasTextOp::executeForTextTarget(SkAtlasTextTarget* target) { FlushInfo flushInfo; SkAutoGlyphCache glyphCache; auto& context = target->context()->internal(); - auto* atlasGlyphCache = context.grContext()->contextPriv().getAtlasGlyphCache(); + auto atlasGlyphCache = context.grContext()->contextPriv().getAtlasGlyphCache(); + auto resourceProvider = context.grContext()->contextPriv().resourceProvider(); + auto drawingManager = context.grContext()->contextPriv().drawingManager(); + + GrOnFlushResourceProvider onFlushResourceProvider(drawingManager); + atlasGlyphCache->preFlush(&onFlushResourceProvider, nullptr, 0, nullptr); + for (int i = 0; i < fGeoCount; ++i) { GrAtlasTextBlob::VertexRegenerator regenerator( - fGeoData[i].fBlob, fGeoData[i].fRun, fGeoData[i].fSubRun, fGeoData[i].fViewMatrix, - fGeoData[i].fX, fGeoData[i].fY, fGeoData[i].fColor, &context, atlasGlyphCache, - &glyphCache); + resourceProvider, fGeoData[i].fBlob, fGeoData[i].fRun, fGeoData[i].fSubRun, + fGeoData[i].fViewMatrix, fGeoData[i].fX, fGeoData[i].fY, fGeoData[i].fColor, + &context, atlasGlyphCache, &glyphCache); GrAtlasTextBlob::VertexRegenerator::Result result; do { result = regenerator.regenerate(); -- cgit v1.2.3