Have the drawing manager ref & unref DDLs on playback

Change-Id: I95f6dbfed9bb3ce75ecb260137d11b72e3953d75
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/298820
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 43d912b..23b2380 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -35,6 +35,7 @@
 #include "src/gpu/GrTextureResolveRenderTask.h"
 #include "src/gpu/GrTracing.h"
 #include "src/gpu/GrTransferFromRenderTask.h"
+#include "src/gpu/GrUnrefDDLTask.h"
 #include "src/gpu/GrWaitRenderTask.h"
 #include "src/gpu/ccpr/GrCoverageCountingPathRenderer.h"
 #include "src/gpu/text/GrSDFTOptions.h"
@@ -711,7 +712,11 @@
 
     fDAG.add(ddl->fRenderTasks);
 
-    // TODO: After migrating fully to sk_sp, ref it here and add a task to unref it after flush.
+#ifndef SK_DDL_IS_UNIQUE_POINTER
+    // Add a task to unref the DDL after flush.
+    GrRenderTask* unrefTask = fDAG.add(sk_make_sp<GrUnrefDDLTask>(std::move(ddl)));
+    unrefTask->makeClosed(*fContext->priv().caps());
+#endif
 
     SkDEBUGCODE(this->validate());
 }