GrAALinearizingConvexPathRenderer can't batch across view matrix changes

This op does not use explicit local coords and thus only supports one
view matrix per draw.

Bug: chromium:1060865
Change-Id: I5c44d58068f35587df73a281dd6f5dff1d26b188
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278459
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index c9c745c..9738f72 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -146,9 +146,10 @@
                              SkPaint::Join join,
                              SkScalar miterLimit,
                              const GrUserStencilSettings* stencilSettings)
-            : INHERITED(ClassID()), fHelper(helperArgs, GrAAType::kCoverage, stencilSettings) {
-        fPaths.emplace_back(
-                PathData{color, viewMatrix, path, strokeWidth, style, join, miterLimit});
+            : INHERITED(ClassID())
+            , fHelper(helperArgs, GrAAType::kCoverage, stencilSettings)
+            , fViewMatrix(viewMatrix) {
+        fPaths.emplace_back(PathData{color, path, strokeWidth, style, join, miterLimit});
 
         // compute bounds
         SkRect bounds = path.getBounds();
@@ -212,7 +213,7 @@
                              const GrXferProcessor::DstProxyView& dstProxyView) override {
         GrGeometryProcessor* gp = create_lines_only_gp(arena,
                                                        fHelper.compatibleWithCoverageAsAlpha(),
-                                                       this->viewMatrix(),
+                                                       fViewMatrix,
                                                        fHelper.usesLocalCoords(),
                                                        fWideColor);
         if (!gp) {
@@ -277,7 +278,7 @@
             GrAAConvexTessellator tess(args.fStyle, args.fStrokeWidth,
                                        args.fJoin, args.fMiterLimit);
 
-            if (!tess.tessellate(args.fViewMatrix, args.fPath)) {
+            if (!tess.tessellate(fViewMatrix, args.fPath)) {
                 continue;
             }
 
@@ -340,17 +341,18 @@
         if (!fHelper.isCompatible(that->fHelper, caps, this->bounds(), that->bounds())) {
             return CombineResult::kCannotCombine;
         }
+        if (fViewMatrix != that->fViewMatrix) {
+            return CombineResult::kCannotCombine;
+        }
 
         fPaths.push_back_n(that->fPaths.count(), that->fPaths.begin());
         fWideColor |= that->fWideColor;
         return CombineResult::kMerged;
     }
 
-    const SkMatrix& viewMatrix() const { return fPaths[0].fViewMatrix; }
 
     struct PathData {
         SkPMColor4f fColor;
-        SkMatrix fViewMatrix;
         SkPath fPath;
         SkScalar fStrokeWidth;
         SkStrokeRec::Style fStyle;
@@ -360,6 +362,7 @@
 
     SkSTArray<1, PathData, true> fPaths;
     Helper fHelper;
+    SkMatrix fViewMatrix;
     bool fWideColor;
 
     SkTDArray<GrSimpleMesh*> fMeshes;