aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/private/GrSurfaceProxy.h
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2018-02-21 14:17:08 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-21 19:46:56 +0000
commit056c1a821afcfbe606615ad1a7d1b554549d0846 (patch)
tree33ed26319e742379d7630065dc1ef165296df35d /include/private/GrSurfaceProxy.h
parent9ce9507a7f66634eeb06fc34aebdfb6c4f1a1d11 (diff)
Separate creation time & flush time behavior in GrDrawOpAtlas
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: I54909b7a3ba4bec2db5f1218f6a2a3a1636f66d6 Reviewed-on: https://skia-review.googlesource.com/108520 Commit-Queue: Robert Phillips <robertphillips@google.com> Reviewed-by: Jim Van Verth <jvanverth@google.com>
Diffstat (limited to 'include/private/GrSurfaceProxy.h')
-rw-r--r--include/private/GrSurfaceProxy.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/include/private/GrSurfaceProxy.h b/include/private/GrSurfaceProxy.h
index cb8c46e78f..6beb11e46f 100644
--- a/include/private/GrSurfaceProxy.h
+++ b/include/private/GrSurfaceProxy.h
@@ -57,6 +57,17 @@ public:
}
#endif
+ void release() {
+ SkASSERT(1 == fRefCnt);
+ SkASSERT(0 == fPendingReads);
+ SkASSERT(0 == fPendingWrites);
+
+ SkASSERT(fTarget->internalHasUniqueRef());
+ SkASSERT(!fTarget->internalHasPendingIO());
+ fTarget->unref();
+ fTarget = nullptr;
+ }
+
void validate() const {
#ifdef SK_DEBUG
SkASSERT(fRefCnt >= 0);
@@ -129,7 +140,7 @@ protected:
}
virtual ~GrIORefProxy() {
// We don't unref 'fTarget' here since the 'unref' method will already
- // have forwarded on the unref call that got use here.
+ // have forwarded on the unref call that got us here.
}
// This GrIORefProxy was deferred before but has just been instantiated. To
@@ -279,6 +290,8 @@ public:
virtual bool instantiate(GrResourceProvider* resourceProvider) = 0;
+ void deInstantiate();
+
/**
* Helper that gets the width and height of the surface as a bounding rectangle.
*/