Revert "Allow CCPR in DDL mode"

This reverts commit 93540dd15715057e00b4f136977f441720317b60.

Reason for revert: Chrome!

> Allow CCPR in DDL mode
> 
> Bug: skia:7988
> Change-Id: If757f29e0156c0ef7045b437b04e17aebe4de851
> Reviewed-on: https://skia-review.googlesource.com/130509
> Commit-Queue: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Chris Dalton <csmartdalton@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>

TBR=egdaniel@google.com,robertphillips@google.com,csmartdalton@google.com

Change-Id: Ibb5017d1bf307545969069b94987e0a51a22e333
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:7988
Reviewed-on: https://skia-review.googlesource.com/130880
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/include/private/SkDeferredDisplayList.h b/include/private/SkDeferredDisplayList.h
index 69e9def..4d37963 100644
--- a/include/private/SkDeferredDisplayList.h
+++ b/include/private/SkDeferredDisplayList.h
@@ -11,10 +11,7 @@
 #include "SkSurfaceCharacterization.h"
 
 #if SK_SUPPORT_GPU
-#include <map>
 #include "GrOpList.h"
-
-struct GrCCPerOpListPaths;
 #endif
 
 class SkSurface;
@@ -25,7 +22,7 @@
  *
  * TODO: we probably need to expose this class so users can query it for memory usage.
  */
-class SK_API SkDeferredDisplayList {
+class SkDeferredDisplayList {
 public:
 
 #if SK_SUPPORT_GPU
@@ -45,7 +42,6 @@
 
     SkDeferredDisplayList(const SkSurfaceCharacterization& characterization,
                           sk_sp<LazyProxyData>);
-    ~SkDeferredDisplayList();
 
     const SkSurfaceCharacterization& characterization() const {
         return fCharacterization;
@@ -58,11 +54,7 @@
     const SkSurfaceCharacterization fCharacterization;
 
 #if SK_SUPPORT_GPU
-    // This needs to match the same type in GrCoverageCountingPathRenderer.h
-    using PendingPathsMap = std::map<uint32_t, sk_sp<GrCCPerOpListPaths>>;
-
     SkTArray<sk_sp<GrOpList>>    fOpLists;
-    PendingPathsMap              fPendingPaths;  // This is the path data from CCPR.
 #endif
     sk_sp<LazyProxyData>         fLazyProxyData;
 };
diff --git a/src/core/SkDeferredDisplayList.cpp b/src/core/SkDeferredDisplayList.cpp
index 6a4dc43..530523a 100644
--- a/src/core/SkDeferredDisplayList.cpp
+++ b/src/core/SkDeferredDisplayList.cpp
@@ -10,15 +10,8 @@
 #include "SkCanvas.h"
 #include "SkSurface.h"
 
-#if SK_SUPPORT_GPU
-#include "ccpr/GrCoverageCountingPathRenderer.h"
-#endif
-
 SkDeferredDisplayList::SkDeferredDisplayList(const SkSurfaceCharacterization& characterization,
                                              sk_sp<LazyProxyData> lazyProxyData)
         : fCharacterization(characterization)
         , fLazyProxyData(std::move(lazyProxyData)) {
 }
-
-SkDeferredDisplayList::~SkDeferredDisplayList() {
-}
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 3d57f98..572f589 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -113,6 +113,7 @@
         // Disable the small path renderer bc of the proxies in the atlas. They need to be
         // unified when the opLists are added back to the destination drawing manager.
         prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall;
+        prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kCoverageCounting;
     }
 
     GrTextContext::Options textContextOptions;
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index a1df078..4391117 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -26,7 +26,6 @@
 #include "SkSurface_Gpu.h"
 #include "SkTTopoSort.h"
 #include "GrTracing.h"
-#include "ccpr/GrCoverageCountingPathRenderer.h"
 #include "text/GrTextContext.h"
 
 // Turn on/off the sorting of opLists at flush time
@@ -382,11 +381,6 @@
     }
 
     ddl->fOpLists = std::move(fOpLists);
-    if (fPathRendererChain) {
-        if (auto ccpr = fPathRendererChain->getCoverageCountingPathRenderer()) {
-            ddl->fPendingPaths = ccpr->detachPendingPaths();
-        }
-    }
 }
 
 void GrDrawingManager::copyOpListsFromDDL(const SkDeferredDisplayList* ddl,
@@ -394,12 +388,6 @@
     // Here we jam the proxy that backs the current replay SkSurface into the LazyProxyData.
     // The lazy proxy that references it (in the copied opLists) will steal its GrTexture.
     ddl->fLazyProxyData->fReplayDest = newDest;
-
-    if (ddl->fPendingPaths.size()) {
-        GrCoverageCountingPathRenderer* ccpr = this->getCoverageCountingPathRenderer();
-
-        ccpr->mergePendingPaths(ddl->fPendingPaths);
-    }
     fOpLists.push_back_n(ddl->fOpLists.count(), ddl->fOpLists.begin());
 }
 
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
index 63e503b..d51c0b5 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp
@@ -50,7 +50,7 @@
 GrCCPerOpListPaths* GrCoverageCountingPathRenderer::lookupPendingPaths(uint32_t opListID) {
     auto it = fPendingPaths.find(opListID);
     if (fPendingPaths.end() == it) {
-        sk_sp<GrCCPerOpListPaths> paths = sk_make_sp<GrCCPerOpListPaths>();
+        auto paths = skstd::make_unique<GrCCPerOpListPaths>();
         it = fPendingPaths.insert(std::make_pair(opListID, std::move(paths))).first;
     }
     return it->second.get();
@@ -227,7 +227,6 @@
 
     // Commit flushing paths to the resources once they are successfully completed.
     for (auto& flushingPaths : fFlushingPaths) {
-        SkASSERT(!flushingPaths->fFlushResources);
         flushingPaths->fFlushResources = resources;
     }
 }
@@ -235,13 +234,6 @@
 void GrCoverageCountingPathRenderer::postFlush(GrDeferredUploadToken, const uint32_t* opListIDs,
                                                int numOpListIDs) {
     SkASSERT(fFlushing);
-
-    // In DDL mode these aren't guaranteed to be deleted so we must clear out the perFlush
-    // resources manually.
-    for (auto& flushingPaths : fFlushingPaths) {
-        flushingPaths->fFlushResources = nullptr;
-    }
-
     // We wait to erase these until after flush, once Ops and FPs are done accessing their data.
     fFlushingPaths.reset();
     SkDEBUGCODE(fFlushing = false);
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
index 66374ea..d101866 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
@@ -21,8 +21,7 @@
 /**
  * Tracks all the paths in a given opList that will be drawn when it flushes.
  */
-// DDL TODO: given the usage pattern in DDL mode, this could probably be non-atomic refcounting.
-struct GrCCPerOpListPaths : SkRefCnt {
+struct GrCCPerOpListPaths {
     ~GrCCPerOpListPaths() {
         // Ensure there are no surviving DrawPathsOps with a dangling pointer into this class.
         if (!fDrawOps.isEmpty()) {
@@ -58,23 +57,17 @@
         SkASSERT(!fFlushing);
     }
 
-    using PendingPathsMap = std::map<uint32_t, sk_sp<GrCCPerOpListPaths>>;
+    using PendingPathsMap = std::map<uint32_t, std::unique_ptr<GrCCPerOpListPaths>>;
 
     // In DDL mode, Ganesh needs to be able to move the pending GrCCPerOpListPaths to the DDL object
     // (detachPendingPaths) and then return them upon replay (mergePendingPaths).
     PendingPathsMap detachPendingPaths() { return std::move(fPendingPaths); }
 
-    void mergePendingPaths(const PendingPathsMap& paths) {
-#ifdef SK_DEBUG
+    void mergePendingPaths(PendingPathsMap&& paths) {
         // Ensure there are no duplicate opList IDs between the incoming path map and ours.
-        // This should always be true since opList IDs are globally unique and these are coming
-        // from different DDL recordings.
-        for (const auto& it : paths) {
-            SkASSERT(!fPendingPaths.count(it.first));
-        }
-#endif
-
-        fPendingPaths.insert(paths.begin(), paths.end());
+        SkDEBUGCODE(for (const auto& it : paths) SkASSERT(!fPendingPaths.count(it.first)));
+        fPendingPaths.insert(std::make_move_iterator(paths.begin()),
+                             std::make_move_iterator(paths.end()));
     }
 
     // GrPathRenderer overrides.
@@ -108,7 +101,7 @@
 
     // fFlushingPaths holds the GrCCPerOpListPaths objects that are currently being flushed.
     // (It will only contain elements when fFlushing is true.)
-    SkSTArray<4, sk_sp<GrCCPerOpListPaths>> fFlushingPaths;
+    SkSTArray<4, std::unique_ptr<GrCCPerOpListPaths>> fFlushingPaths;
     SkDEBUGCODE(bool fFlushing = false);
 
     const bool fDrawCachablePaths;