Move proxyProvider and singleOwner to GrImageContext

This starts to beef up the capabilities of the GrImageContext in preparation for its future responsibilities (i.e., creating promise images w/o a recordingContext).

Note that the proxyProvider still has different behavior if it has a full context vs. a reduced context. I intend to just let this behavior remain as is.

Change-Id: Idb9d99a548ef928fc1b9dc1e5a34f74343bb0b4b
Reviewed-on: https://skia-review.googlesource.com/c/189490
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 9bf044d..8d7f945 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -38,24 +38,24 @@
 
 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this)
 #define ASSERT_SINGLE_OWNER \
-    SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(&fSingleOwner);)
+    SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(this->singleOwner());)
 #define RETURN_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return; }
 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return false; }
 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return nullptr; }
 
 ////////////////////////////////////////////////////////////////////////////////
 
-GrContext::GrContext(GrBackendApi backend, const GrContextOptions& options, int32_t id)
-        : INHERITED(backend, options, id) {
+GrContext::GrContext(GrBackendApi backend, const GrContextOptions& options, int32_t contextID)
+        : INHERITED(backend, options, contextID) {
     fResourceCache = nullptr;
     fResourceProvider = nullptr;
-    fProxyProvider = nullptr;
     fGlyphCache = nullptr;
 }
 
 bool GrContext::init(sk_sp<const GrCaps> caps, sk_sp<GrSkSLFPFactoryCache> FPFactoryCache) {
     ASSERT_SINGLE_OWNER
     SkASSERT(fThreadSafeProxy); // needs to have been initialized by derived classes
+    SkASSERT(this->proxyProvider());
 
     if (!INHERITED::init(std::move(caps), std::move(FPFactoryCache))) {
         return false;
@@ -64,17 +64,13 @@
     SkASSERT(this->caps());
 
     if (fGpu) {
-        fResourceCache = new GrResourceCache(this->caps(), &fSingleOwner, this->contextID());
-        fResourceProvider = new GrResourceProvider(fGpu.get(), fResourceCache, &fSingleOwner,
+        fResourceCache = new GrResourceCache(this->caps(), this->singleOwner(), this->contextID());
+        fResourceProvider = new GrResourceProvider(fGpu.get(), fResourceCache, this->singleOwner(),
                                                    this->options().fExplicitlyAllocateGPUResources);
-        fProxyProvider = new GrProxyProvider(fResourceProvider, fResourceCache,
-                                             this->refCaps(), &fSingleOwner);
-    } else {
-        fProxyProvider = new GrProxyProvider(this->contextID(), this->refCaps(), &fSingleOwner);
     }
 
     if (fResourceCache) {
-        fResourceCache->setProxyProvider(fProxyProvider);
+        fResourceCache->setProxyProvider(this->proxyProvider());
     }
 
     fDidTestPMConversions = false;
@@ -113,7 +109,7 @@
                                             ? fResourceProvider->explicitlyAllocateGPUResources()
                                             : false;
     fDrawingManager.reset(new GrDrawingManager(this, prcOptions, textContextOptions,
-                                               &fSingleOwner, explicitlyAllocatingResources,
+                                               this->singleOwner(), explicitlyAllocatingResources,
                                                this->options().fSortRenderTargets,
                                                this->options().fReduceOpListSplitting));
 
@@ -140,7 +136,6 @@
     }
     delete fResourceProvider;
     delete fResourceCache;
-    delete fProxyProvider;
     delete fGlyphCache;
 }
 
@@ -153,7 +148,7 @@
 void GrContext::abandonContext() {
     ASSERT_SINGLE_OWNER
 
-    fProxyProvider->abandon();
+    this->proxyProvider()->abandon();
     fResourceProvider->abandon();
 
     // Need to abandon the drawing manager first so all the render targets
@@ -182,7 +177,7 @@
     if (this->abandoned()) {
         return;
     }
-    fProxyProvider->abandon();
+    this->proxyProvider()->abandon();
     fResourceProvider->abandon();
 
     // Need to abandon the drawing manager first so all the render targets
@@ -229,7 +224,7 @@
     fResourceCache->purgeResourcesNotUsedSince(purgeTime);
 
     if (auto ccpr = fDrawingManager->getCoverageCountingPathRenderer()) {
-        ccpr->purgeCacheEntriesOlderThan(fProxyProvider, purgeTime);
+        ccpr->purgeCacheEntriesOlderThan(this->proxyProvider(), purgeTime);
     }
 
     fTextBlobCache->purgeStaleBlobs();