Enable move construction for OpChain and SkTArray<OpChain>.

OpChains contain an internal List which does bookkeeping/validation when
moved, but our SkTArray was skipping over this validation step because
MEM_MOVE was set to true.

Change-Id: I4a4f1f0dff96076dfa3719467f4393eb7e958c8f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/305958
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/src/gpu/GrOpsTask.h b/src/gpu/GrOpsTask.h
index edef6f6..e07286e 100644
--- a/src/gpu/GrOpsTask.h
+++ b/src/gpu/GrOpsTask.h
@@ -197,16 +197,18 @@
 
     class OpChain {
     public:
-        OpChain(const OpChain&) = delete;
-        OpChain& operator=(const OpChain&) = delete;
         OpChain(std::unique_ptr<GrOp>, GrProcessorSet::Analysis, GrAppliedClip*,
                 const DstProxyView*);
-
         ~OpChain() {
             // The ops are stored in a GrMemoryPool and must be explicitly deleted via the pool.
             SkASSERT(fList.empty());
         }
 
+        OpChain(const OpChain&) = delete;
+        OpChain& operator=(const OpChain&) = delete;
+        OpChain(OpChain&&) = default;
+        OpChain& operator=(OpChain&&) = default;
+
         void visitProxies(const GrOp::VisitProxyFunc&) const;
 
         GrOp* head() const { return fList.head(); }
@@ -320,7 +322,7 @@
     bool fHasWaitOp = false;
 
     // For ops/opsTask we have mean: 5 stdDev: 28
-    SkSTArray<25, OpChain, true> fOpChains;
+    SkSTArray<25, OpChain> fOpChains;
 
     // MDB TODO: 4096 for the first allocation of the clip space will be huge overkill.
     // Gather statistics to determine the correct size.