diff --git a/Android.bp b/Android.bp
index 3fc7028..09ec4e1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1818,6 +1818,7 @@
         "tests/VkWrapTests.cpp",
         "tests/VkYcbcrSamplerTest.cpp",
         "tests/VptrTest.cpp",
+        "tests/WangsFormulaTest.cpp",
         "tests/WindowRectanglesTest.cpp",
         "tests/WritePixelsTest.cpp",
         "tests/Writer32Test.cpp",
diff --git a/METADATA b/METADATA
index ddcdfc0..28f2eaf 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,11 @@
     type: GIT
     value: "https://skia.googlesource.com/skia"
   }
-  version: "dbe7770afc613fbd478f239d8cdbf280e7f6e5c4"
+  version: "f6bf5169268fd83795b9b6d66b28eb9801676797"
   license_type: RECIPROCAL
   last_upgrade_date {
     year: 2020
     month: 5
-    day: 13
+    day: 14
   }
 }
diff --git a/bench/TessellatePathBench.cpp b/bench/TessellatePathBench.cpp
index cb61e57..dc0daf7 100644
--- a/bench/TessellatePathBench.cpp
+++ b/bench/TessellatePathBench.cpp
@@ -7,9 +7,11 @@
 
 #include "bench/Benchmark.h"
 #include "include/gpu/GrContext.h"
+#include "src/core/SkPathPriv.h"
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrOpFlushState.h"
 #include "src/gpu/tessellate/GrTessellatePathOp.h"
+#include "src/gpu/tessellate/GrWangsFormula.h"
 #include "tools/ToolUtils.h"
 
 // This is the number of cubics in desk_chalkboard.skp. (There are no quadratics in the chalkboard.)
@@ -19,29 +21,74 @@
     SkRandom rand;
     SkPath path;
     for (int i = 0; i < kNumCubicsInChalkboard/2; ++i) {
-                float x = std::ldexp(rand.nextF(), (i % 18)) / 1e3f;
+        float x = std::ldexp(rand.nextF(), (i % 18)) / 1e3f;
         path.cubicTo(111.625f*x, 308.188f*x, 764.62f*x, -435.688f*x, 742.63f*x, 85.187f*x);
         path.cubicTo(764.62f*x, -435.688f*x, 111.625f*x, 308.188f*x, 0, 0);
     }
     return path;
 }
 
-static sk_sp<GrContext> make_tessellation_mock_context() {
-    GrMockOptions mockOptions;
-    mockOptions.fDrawInstancedSupport = true;
-    mockOptions.fTessellationSupport = true;
-    mockOptions.fMapBufferFlags = GrCaps::kCanMap_MapFlag;
-    return GrContext::MakeMock(&mockOptions);
-}
+// This is a dummy GrMeshDrawOp::Target implementation that just gives back pointers into
+// pre-allocated CPU buffers, rather than allocating and mapping GPU buffers.
+class BenchmarkTarget : public GrMeshDrawOp::Target {
+public:
+    void resetAllocator() { fAllocator.reset(); }
+    SkArenaAlloc* allocator() override { return &fAllocator; }
+    void putBackVertices(int vertices, size_t vertexStride) override { /* no-op */ }
+
+    void* makeVertexSpace(size_t vertexSize, int vertexCount, sk_sp<const GrBuffer>*,
+                          int* startVertex) override {
+        if (vertexSize * vertexCount > sizeof(fStaticVertexData)) {
+            SK_ABORT(SkStringPrintf(
+                    "FATAL: wanted %zu bytes of static vertex data; only have %zu.\n",
+                    vertexSize * vertexCount, SK_ARRAY_COUNT(fStaticVertexData)).c_str());
+        }
+        return fStaticVertexData;
+    }
+
+    GrDrawIndexedIndirectCommand* makeDrawIndexedIndirectSpace(
+            int drawCount, sk_sp<const GrBuffer>* buffer, size_t* offsetInBytes) override {
+        int staticBufferCount = (int)SK_ARRAY_COUNT(fStaticDrawIndexedIndirectData);
+        if (drawCount > staticBufferCount) {
+            SK_ABORT(SkStringPrintf(
+                    "FATAL: wanted %i static drawIndexedIndirect elements; only have %i.\n",
+                    drawCount, staticBufferCount).c_str());
+        }
+        return fStaticDrawIndexedIndirectData;
+    }
+
+#define UNIMPL(...) __VA_ARGS__ override { SK_ABORT("unimplemented."); }
+    UNIMPL(void recordDraw(const GrGeometryProcessor*, const GrSimpleMesh[], int,
+                           const GrSurfaceProxy* const[], GrPrimitiveType))
+    UNIMPL(uint16_t* makeIndexSpace(int, sk_sp<const GrBuffer>*, int*))
+    UNIMPL(void* makeVertexSpaceAtLeast(size_t, int, int, sk_sp<const GrBuffer>*, int*, int*))
+    UNIMPL(uint16_t* makeIndexSpaceAtLeast(int, int, sk_sp<const GrBuffer>*, int*, int*))
+    UNIMPL(GrDrawIndirectCommand* makeDrawIndirectSpace(int, sk_sp<const GrBuffer>*, size_t*))
+    UNIMPL(void putBackIndices(int))
+    UNIMPL(GrRenderTargetProxy* proxy() const)
+    UNIMPL(const GrSurfaceProxyView* writeView() const)
+    UNIMPL(const GrAppliedClip* appliedClip() const)
+    UNIMPL(GrAppliedClip detachAppliedClip())
+    UNIMPL(const GrXferProcessor::DstProxyView& dstProxyView() const)
+    UNIMPL(GrResourceProvider* resourceProvider() const)
+    UNIMPL(GrStrikeCache* strikeCache() const)
+    UNIMPL(GrAtlasManager* atlasManager() const)
+    UNIMPL(SkTArray<GrSurfaceProxy*, true>* sampledProxyArray())
+    UNIMPL(const GrCaps& caps() const)
+    UNIMPL(GrDeferredUploadTarget* deferredUploadTarget())
+#undef UNIMPL
+
+private:
+    SkPoint fStaticVertexData[(kNumCubicsInChalkboard + 2) * 5];
+    GrDrawIndexedIndirectCommand fStaticDrawIndexedIndirectData[32];
+    SkSTArenaAlloc<1024 * 1024> fAllocator;
+};
 
 // This serves as a base class for benchmarking individual methods on GrTessellatePathOp.
 class GrTessellatePathOp::TestingOnly_Benchmark : public Benchmark {
 public:
     TestingOnly_Benchmark(const char* subName, SkPath path, const SkMatrix& m)
-            : fCtx(make_tessellation_mock_context())
-            , fOp(m, path, GrPaint(), GrAAType::kMSAA)
-            , fFlushState(fCtx->priv().getGpu(), fCtx->priv().resourceProvider(), nullptr,
-                          GrBufferAllocPool::CpuBufferCache::Make(6)) {
+            : fOp(m, path, GrPaint(), GrAAType::kMSAA) {
         fName.printf("tessellate_%s", subName);
     }
 
@@ -51,6 +98,7 @@
     class MiddleOutInnerTrianglesBench;
     class OuterCubicsBench;
     class CubicWedgesBench;
+    class WangsFormulaBench;
 
 private:
     void onDraw(int loops, SkCanvas*) final {
@@ -60,15 +108,15 @@
             fOp.fDoFillTriangleBuffer = false;
             fOp.fCubicBuffer.reset();
             fOp.fStencilCubicsShader = nullptr;
-            this->runBench(&fFlushState, &fOp);
+            this->runBench(&fTarget, &fOp);
+            fTarget.resetAllocator();
         }
     }
 
-    virtual void runBench(GrOpFlushState*, GrTessellatePathOp*) = 0;
+    virtual void runBench(GrMeshDrawOp::Target*, GrTessellatePathOp*) = 0;
 
-    sk_sp<GrContext> fCtx;
     GrTessellatePathOp fOp;
-    GrOpFlushState fFlushState;
+    BenchmarkTarget fTarget;
     SkString fName;
 };
 
@@ -81,13 +129,13 @@
                                                          kNumCubicsInChalkboard),
                                     SkMatrix::I()) {
     }
-    void runBench(GrOpFlushState* flushState, GrTessellatePathOp* op) override {
+    void runBench(GrMeshDrawOp::Target* target, GrTessellatePathOp* op) override {
         int numBeziers;
-        op->prepareMiddleOutInnerTriangles(flushState, &numBeziers);
+        op->prepareMiddleOutInnerTriangles(target, &numBeziers);
     }
 };
 
-DEF_BENCH( return new GrTessellatePathOp::TestingOnly_Benchmark::MiddleOutInnerTrianglesBench(););
+DEF_BENCH( return new GrTessellatePathOp::TestingOnly_Benchmark::MiddleOutInnerTrianglesBench(); );
 
 class GrTessellatePathOp::TestingOnly_Benchmark::OuterCubicsBench
         : public GrTessellatePathOp::TestingOnly_Benchmark {
@@ -95,13 +143,13 @@
     OuterCubicsBench()
             : TestingOnly_Benchmark("prepareOuterCubics", make_cubic_path(), SkMatrix::I()) {
     }
-    void runBench(GrOpFlushState* flushState, GrTessellatePathOp* op) override {
-        op->prepareOuterCubics(flushState, kNumCubicsInChalkboard,
+    void runBench(GrMeshDrawOp::Target* target, GrTessellatePathOp* op) override {
+        op->prepareOuterCubics(target, kNumCubicsInChalkboard,
                                CubicDataAlignment::kVertexBoundary);
     }
 };
 
-DEF_BENCH( return new GrTessellatePathOp::TestingOnly_Benchmark::OuterCubicsBench(););
+DEF_BENCH( return new GrTessellatePathOp::TestingOnly_Benchmark::OuterCubicsBench(); );
 
 class GrTessellatePathOp::TestingOnly_Benchmark::CubicWedgesBench
         : public GrTessellatePathOp::TestingOnly_Benchmark {
@@ -109,9 +157,46 @@
     CubicWedgesBench()
             : TestingOnly_Benchmark("prepareCubicWedges", make_cubic_path(), SkMatrix::I()) {
     }
-    void runBench(GrOpFlushState* flushState, GrTessellatePathOp* op) override {
-        op->prepareCubicWedges(flushState);
+    void runBench(GrMeshDrawOp::Target* target, GrTessellatePathOp* op) override {
+        op->prepareCubicWedges(target);
     }
 };
 
 DEF_BENCH( return new GrTessellatePathOp::TestingOnly_Benchmark::CubicWedgesBench(););
+
+class GrTessellatePathOp::TestingOnly_Benchmark::WangsFormulaBench
+        : public GrTessellatePathOp::TestingOnly_Benchmark {
+public:
+    WangsFormulaBench(const char* suffix, const SkMatrix& matrix)
+            : TestingOnly_Benchmark(SkStringPrintf("wangs_formula_cubic_log2%s", suffix).c_str(),
+                                    make_cubic_path(), SkMatrix::I())
+            , fMatrix(matrix) {
+    }
+    void runBench(GrMeshDrawOp::Target*, GrTessellatePathOp* op) override {
+        int sum = 0;
+        GrVectorXform xform(fMatrix);
+        for (auto [verb, pts, w] : SkPathPriv::Iterate(op->fPath)) {
+            if (verb == SkPathVerb::kCubic) {
+                sum += GrWangsFormula::cubic_log2(4, pts, xform);
+            }
+        }
+        // Don't let the compiler optimize away GrWangsFormula::cubic_log2.
+        if (sum <= 0) {
+            SK_ABORT("sum should be > 0.");
+        }
+    }
+private:
+    SkMatrix fMatrix;
+};
+
+DEF_BENCH(
+    return new GrTessellatePathOp::TestingOnly_Benchmark::WangsFormulaBench("", SkMatrix::I());
+);
+DEF_BENCH(
+    return new GrTessellatePathOp::TestingOnly_Benchmark::WangsFormulaBench(
+            "_scale", SkMatrix::MakeScale(1.1f, 0.9f));
+);
+DEF_BENCH(
+    return new GrTessellatePathOp::TestingOnly_Benchmark::WangsFormulaBench(
+            "_affine", SkMatrix::MakeAll(.9f,0.9f,0,  1.1f,1.1f,0, 0,0,1));
+);
diff --git a/gn/gpu.gni b/gn/gpu.gni
index 2081203..2310000 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -445,6 +445,8 @@
   "$_src/gpu/tessellate/GrTessellatePathOp.h",
   "$_src/gpu/tessellate/GrTessellationPathRenderer.cpp",
   "$_src/gpu/tessellate/GrTessellationPathRenderer.h",
+  "$_src/gpu/tessellate/GrVectorXform.h",
+  "$_src/gpu/tessellate/GrWangsFormula.h",
 
   # text
   "$_src/gpu/text/GrAtlasManager.cpp",
diff --git a/gn/tests.gni b/gn/tests.gni
index 0944a4f..63354fc 100644
--- a/gn/tests.gni
+++ b/gn/tests.gni
@@ -398,4 +398,5 @@
   "$_tests/PathOpsTigerTest.cpp",
   "$_tests/PathOpsTightBoundsTest.cpp",
   "$_tests/PathOpsTypesTest.cpp",
+  "$_tests/WangsFormulaTest.cpp",
 ]
diff --git a/infra/bots/recipe_modules/flavor/android.py b/infra/bots/recipe_modules/flavor/android.py
index 4cdc7cb..5fcb80a 100644
--- a/infra/bots/recipe_modules/flavor/android.py
+++ b/infra/bots/recipe_modules/flavor/android.py
@@ -510,7 +510,7 @@
   def step(self, name, cmd):
     sh = '%s.sh' % cmd[0]
     self.m.run.writefile(self.m.vars.tmp_dir.join(sh),
-        'set -x; env LD_LIBRARY_PATH=%s %s%s; echo $? >%src' % (
+        'set -x; LD_LIBRARY_PATH=%s %s%s; echo $? >%src' % (
             self.device_dirs.bin_dir,
             self.device_dirs.bin_dir, subprocess.list2cmdline(map(str, cmd)),
             self.device_dirs.bin_dir))
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
index e2b13ae..2659d16 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
@@ -837,13 +837,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan.json
index 38a2046..bcb522a 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan.json
@@ -870,13 +870,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
index fab1c0c..1484bda 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
@@ -853,13 +853,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json
index aa2c890..4bf53df 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android.json
@@ -1055,13 +1055,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
index 1871ebc..2f7ef28 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
@@ -1231,13 +1231,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json
index 4efd691..559be8a 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp.json
@@ -582,13 +582,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json
index bd86699..ec8d26d 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android.json
@@ -895,13 +895,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
index ac64e22..1b7e674 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android.json
@@ -853,13 +853,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
index 899cd40..faaa989 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json
@@ -1137,13 +1137,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json
index 5b81d35..f1bae98 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json
@@ -1227,13 +1227,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json
index 2acfc96..dd40db7 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan.json
@@ -895,13 +895,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json b/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json
index 87a3a9e..33fed19 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed_once.json
@@ -1306,13 +1306,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json
index 80a4ee4..7f7e7a2 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json
@@ -1231,13 +1231,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json
index f3fe315..cc01e1c 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json
@@ -1280,13 +1280,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json b/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json
index 70a8667..2ccc832 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json
@@ -1281,13 +1281,13 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --some-flag; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json b/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json
index 2db7409..29ab746 100644
--- a/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json
+++ b/infra/bots/recipes/perf.expected/Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json
@@ -1088,7 +1088,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --dummy --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --dummy --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/nanobench.sh"
     ],
     "env": {
@@ -1098,7 +1098,7 @@
     "infra_step": true,
     "name": "write nanobench.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@nanobench.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --dummy --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --dummy --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@nanobench.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json b/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
index ec6b27e..60c090f 100644
--- a/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
+++ b/infra/bots/recipes/perf_skottietrace.expected/Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing.json
@@ -449,7 +449,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -459,7 +459,7 @@
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
@@ -636,7 +636,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -646,7 +646,7 @@
     "infra_step": true,
     "name": "write dm.sh (2)",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
@@ -823,7 +823,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -833,7 +833,7 @@
     "infra_step": true,
     "name": "write dm.sh (3)",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json b/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json
index 74cdc51..6eb9d68 100644
--- a/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json
+++ b/infra/bots/recipes/perf_skottietrace.expected/skottietracing_parse_trace_error.json
@@ -449,7 +449,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -459,7 +459,7 @@
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json b/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json
index af00a68..82f2d1d 100644
--- a/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json
+++ b/infra/bots/recipes/perf_skottietrace.expected/skottietracing_trybot.json
@@ -449,7 +449,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -459,7 +459,7 @@
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \"^lottie 3!.json$\" --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
@@ -636,7 +636,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -646,7 +646,7 @@
     "infra_step": true,
     "name": "write dm.sh (2)",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^lottie\\(test\\)\\'\\!2\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
@@ -823,7 +823,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -833,7 +833,7 @@
     "infra_step": true,
     "name": "write dm.sh (3)",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/4.json --match \\^lottie1\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json
index 82977ed..ed73fdc 100644
--- a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json
+++ b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json
@@ -1044,7 +1044,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -1054,7 +1054,7 @@
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json
index dd937c5..b75ad6c 100644
--- a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json
+++ b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android.json
@@ -1180,7 +1180,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc",
+      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc",
       "[START_DIR]/tmp/dm.sh"
     ],
     "env": {
@@ -1190,7 +1190,7 @@
     "infra_step": true,
     "name": "write dm.sh",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@dm.sh@set -x; env LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc@@@",
+      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --dummy --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc@@@",
       "@@@STEP_LOG_END@dm.sh@@@"
     ]
   },
diff --git a/src/gpu/GrTriangulator.cpp b/src/gpu/GrTriangulator.cpp
index a969732..b2b2af3 100644
--- a/src/gpu/GrTriangulator.cpp
+++ b/src/gpu/GrTriangulator.cpp
@@ -822,8 +822,10 @@
     SkScalar toleranceSqd = tolerance * tolerance;
     bool innerPolygons = (Mode::kSimpleInnerPolygons == mode);
 
+    SkPoint pts[4];
     int localCurveCount = 0;
     VertexList* contour = contours;
+    SkPath::Iter iter(path, false);
     if (path.isInverseFillType()) {
         SkPoint quad[4];
         clipBounds.toQuad(quad);
@@ -833,32 +835,34 @@
         contour++;
     }
     SkAutoConicToQuads converter;
-    for (auto [verb, pts, w] : SkPathPriv::Iterate(path)) {
+    SkPath::Verb verb;
+    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
         switch (verb) {
-            case SkPathVerb::kConic: {
+            case SkPath::kConic_Verb: {
                 ++localCurveCount;
                 if (innerPolygons) {
                     append_point_to_contour(pts[2], contour, alloc);
                     break;
                 }
-                const SkPoint* quadPts = converter.computeQuads(pts, *w, toleranceSqd);
+                SkScalar weight = iter.conicWeight();
+                const SkPoint* quadPts = converter.computeQuads(pts, weight, toleranceSqd);
                 for (int i = 0; i < converter.countQuads(); ++i) {
                     append_quadratic_to_contour(quadPts, toleranceSqd, contour, alloc);
                     quadPts += 2;
                 }
                 break;
             }
-            case SkPathVerb::kMove:
+            case SkPath::kMove_Verb:
                 if (contour->fHead) {
                     contour++;
                 }
                 append_point_to_contour(pts[0], contour, alloc);
                 break;
-            case SkPathVerb::kLine: {
+            case SkPath::kLine_Verb: {
                 append_point_to_contour(pts[1], contour, alloc);
                 break;
             }
-            case SkPathVerb::kQuad: {
+            case SkPath::kQuad_Verb: {
                 ++localCurveCount;
                 if (innerPolygons) {
                     append_point_to_contour(pts[2], contour, alloc);
@@ -867,7 +871,7 @@
                 append_quadratic_to_contour(pts, toleranceSqd, contour, alloc);
                 break;
             }
-            case SkPathVerb::kCubic: {
+            case SkPath::kCubic_Verb: {
                 ++localCurveCount;
                 if (innerPolygons) {
                     append_point_to_contour(pts[3], contour, alloc);
@@ -878,7 +882,8 @@
                                       pointsLeft, alloc);
                 break;
             }
-            case SkPathVerb::kClose:
+            case SkPath::kClose_Verb:
+            case SkPath::kDone_Verb:
                 break;
         }
     }
@@ -2385,18 +2390,21 @@
     int contourCnt = 1;
     bool hasPoints = false;
 
+    SkPath::Iter iter(path, false);
+    SkPath::Verb verb;
+    SkPoint pts[4];
     bool first = true;
-    for (auto [verb, pts, w] : SkPathPriv::Iterate(path)) {
+    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
         switch (verb) {
-            case SkPathVerb::kMove:
+            case SkPath::kMove_Verb:
                 if (!first) {
                     ++contourCnt;
                 }
                 // fallthru.
-            case SkPathVerb::kLine:
-            case SkPathVerb::kConic:
-            case SkPathVerb::kQuad:
-            case SkPathVerb::kCubic:
+            case SkPath::kLine_Verb:
+            case SkPath::kConic_Verb:
+            case SkPath::kQuad_Verb:
+            case SkPath::kCubic_Verb:
                 hasPoints = true;
                 // fallthru to break.
             default:
diff --git a/src/gpu/tessellate/GrTessellatePathOp.cpp b/src/gpu/tessellate/GrTessellatePathOp.cpp
index 28d4eab..7e0950a 100644
--- a/src/gpu/tessellate/GrTessellatePathOp.cpp
+++ b/src/gpu/tessellate/GrTessellatePathOp.cpp
@@ -76,7 +76,7 @@
     this->prepareCubicWedges(state);
 }
 
-bool GrTessellatePathOp::prepareNonOverlappingInnerTriangles(GrOpFlushState* flushState,
+bool GrTessellatePathOp::prepareNonOverlappingInnerTriangles(GrMeshDrawOp::Target* target,
                                                              int* numCountedCurves) {
     SkASSERT(!fTriangleBuffer);
     SkASSERT(!fDoStencilTriangleBuffer);
@@ -84,7 +84,7 @@
 
     using GrTriangulator::Mode;
 
-    GrEagerDynamicVertexAllocator vertexAlloc(flushState, &fTriangleBuffer, &fBaseTriangleVertex);
+    GrEagerDynamicVertexAllocator vertexAlloc(target, &fTriangleBuffer, &fBaseTriangleVertex);
     fTriangleVertexCount = GrTriangulator::PathToTriangles(fPath, 0, SkRect::MakeEmpty(),
                                                            &vertexAlloc, Mode::kSimpleInnerPolygons,
                                                            numCountedCurves);
@@ -94,7 +94,7 @@
         return false;
     }
     if (((Flags::kStencilOnly | Flags::kWireframe) & fFlags) || GrAAType::kCoverage == fAAType ||
-        (flushState->appliedClip() && flushState->appliedClip()->hasStencilClip())) {
+        (target->appliedClip() && target->appliedClip()->hasStencilClip())) {
         // If we have certain flags, mixed samples, or a stencil clip then we unfortunately
         // can't fill the inner polygon directly. Indicate that these triangles need to be
         // stencilled.
@@ -106,7 +106,7 @@
     return true;
 }
 
-void GrTessellatePathOp::prepareMiddleOutInnerTriangles(GrOpFlushState* flushState,
+void GrTessellatePathOp::prepareMiddleOutInnerTriangles(GrMeshDrawOp::Target* target,
                                                         int* numCountedCurves) {
     SkASSERT(!fTriangleBuffer);
     SkASSERT(!fDoStencilTriangleBuffer);
@@ -116,7 +116,7 @@
     // Each triangle has 3 vertices.
     int maxVertices = (fPath.countVerbs() - 1) * 3;
 
-    GrEagerDynamicVertexAllocator vertexAlloc(flushState, &fTriangleBuffer, &fBaseTriangleVertex);
+    GrEagerDynamicVertexAllocator vertexAlloc(target, &fTriangleBuffer, &fBaseTriangleVertex);
     auto* vertexData = vertexAlloc.lock<SkPoint>(maxVertices);
     if (!vertexData) {
         return;
@@ -176,7 +176,7 @@
     out[3] = pts[2];
 }
 
-void GrTessellatePathOp::prepareOuterCubics(GrOpFlushState* flushState, int numCountedCurves,
+void GrTessellatePathOp::prepareOuterCubics(GrMeshDrawOp::Target* target, int numCountedCurves,
                                             CubicDataAlignment alignment) {
     SkASSERT(!fCubicBuffer);
     SkASSERT(!fStencilCubicsShader);
@@ -190,7 +190,7 @@
     int instanceOrVertexCount = (instanceAligned) ? numCountedCurves : numCountedCurves * 4;
     int baseInstanceOrVertex;
 
-    auto* vertexData = static_cast<SkPoint*>(flushState->makeVertexSpace(
+    auto* vertexData = static_cast<SkPoint*>(target->makeVertexSpace(
             instanceOrVertexStride, instanceOrVertexCount, &fCubicBuffer, &baseInstanceOrVertex));
     if (!vertexData) {
         return;
@@ -216,10 +216,10 @@
     }
     SkASSERT(fCubicVertexCount == numCountedCurves * 4);
 
-    fStencilCubicsShader = flushState->allocator()->make<GrStencilCubicShader>(fViewMatrix);
+    fStencilCubicsShader = target->allocator()->make<GrStencilCubicShader>(fViewMatrix);
 }
 
-void GrTessellatePathOp::prepareCubicWedges(GrOpFlushState* flushState) {
+void GrTessellatePathOp::prepareCubicWedges(GrMeshDrawOp::Target* target) {
     SkASSERT(!fCubicBuffer);
     SkASSERT(!fStencilCubicsShader);
 
@@ -227,7 +227,7 @@
     // Each wedge has 5 vertices.
     int maxVertices = (fPath.countVerbs() + 1) * 5;
 
-    GrEagerDynamicVertexAllocator vertexAlloc(flushState, &fCubicBuffer, &fBaseCubicVertex);
+    GrEagerDynamicVertexAllocator vertexAlloc(target, &fCubicBuffer, &fBaseCubicVertex);
     auto* vertexData = vertexAlloc.lock<SkPoint>(maxVertices);
     if (!vertexData) {
         return;
@@ -274,7 +274,7 @@
     vertexAlloc.unlock(fCubicVertexCount);
 
     if (fCubicVertexCount) {
-        fStencilCubicsShader = flushState->allocator()->make<GrStencilWedgeShader>(fViewMatrix);
+        fStencilCubicsShader = target->allocator()->make<GrStencilWedgeShader>(fViewMatrix);
     }
 }
 
diff --git a/src/gpu/tessellate/GrTessellatePathOp.h b/src/gpu/tessellate/GrTessellatePathOp.h
index 1c0b473..8ee6d21 100644
--- a/src/gpu/tessellate/GrTessellatePathOp.h
+++ b/src/gpu/tessellate/GrTessellatePathOp.h
@@ -8,7 +8,7 @@
 #ifndef GrTessellatePathOp_DEFINED
 #define GrTessellatePathOp_DEFINED
 
-#include "src/gpu/ops/GrDrawOp.h"
+#include "src/gpu/ops/GrMeshDrawOp.h"
 
 class GrAppliedHardClip;
 class GrStencilPathShader;
@@ -64,7 +64,7 @@
     // Returns false if the inner triangles do not form a simple polygon (e.g., self intersection,
     // double winding). Non-simple polygons would need to split edges in order to avoid overlap,
     // and this is not an option as it would introduce T-junctions with the outer cubics.
-    bool prepareNonOverlappingInnerTriangles(GrOpFlushState*, int* numCountedCurves);
+    bool prepareNonOverlappingInnerTriangles(GrMeshDrawOp::Target*, int* numCountedCurves);
 
     // Produces a "Red Book" style triangulation of the SkPath's inner polygon(s). The inner
     // polygons connect the endpoints of each verb. (i.e., they are the path that would result from
@@ -74,7 +74,7 @@
     // This method emits the inner triangles with a "middle-out" topology. Middle-out can reduce
     // the load on the rasterizer by a great deal as compared to a linear triangle strip or fan.
     // See GrMiddleOutPolygonTriangulator.
-    void prepareMiddleOutInnerTriangles(GrOpFlushState*, int* numCountedCurves);
+    void prepareMiddleOutInnerTriangles(GrMeshDrawOp::Target*, int* numCountedCurves);
 
     enum class CubicDataAlignment : bool {
         kVertexBoundary,
@@ -84,7 +84,7 @@
     // Writes an array of "outer" cubics from each bezier in the SkPath, converting any quadratics
     // to cubics. An outer cubic is an independent, 4-point closed contour consisting of a single
     // cubic curve. Stencilled together with the inner triangles, these define the complete path.
-    void prepareOuterCubics(GrOpFlushState* flushState, int numCountedCurves, CubicDataAlignment);
+    void prepareOuterCubics(GrMeshDrawOp::Target*, int numCountedCurves, CubicDataAlignment);
 
     // Writes an array of cubic "wedges" from the SkPath, converting any lines or quadratics to
     // cubics. A wedge is an independent, 5-point closed contour consisting of 4 cubic control
@@ -92,7 +92,7 @@
     // stencilled, these wedges alone define the complete path.
     //
     // TODO: Eventually we want to use rational cubic wedges in order to support conics.
-    void prepareCubicWedges(GrOpFlushState*);
+    void prepareCubicWedges(GrMeshDrawOp::Target*);
 
     void onExecute(GrOpFlushState*, const SkRect& chainBounds) override;
     void drawStencilPass(GrOpFlushState*);
diff --git a/src/gpu/tessellate/GrVectorXform.h b/src/gpu/tessellate/GrVectorXform.h
new file mode 100644
index 0000000..61b7412
--- /dev/null
+++ b/src/gpu/tessellate/GrVectorXform.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrVectorXform_DEFINED
+#define GrVectorXform_DEFINED
+
+#include "include/core/SkMatrix.h"
+#include "include/private/SkNx.h"
+
+// We enclose this class in the anonymous namespace so it can have Sk2f/Sk4f members.
+namespace {  // NOLINT(google-build-namespaces)
+
+// Represents the upper-left 2x2 matrix of an affine transform for applying to vectors:
+//
+//     VectorXform(p1 - p0) == M * float3(p1, 1) - M * float3(p0, 1)
+//
+class GrVectorXform {
+public:
+    explicit GrVectorXform() : fType(Type::kIdentity) {}
+    explicit GrVectorXform(const SkMatrix& m) {
+        SkASSERT(!m.hasPerspective());
+        if (m.getType() & SkMatrix::kAffine_Mask) {
+            fType = Type::kAffine;
+            fScaleXSkewY = {m.getScaleX(), m.getSkewY()};
+            fSkewXScaleY = {m.getSkewX(), m.getScaleY()};
+            fScaleXYXY = {m.getScaleX(), m.getScaleY(), m.getScaleX(), m.getScaleY()};
+            fSkewXYXY = {m.getSkewX(), m.getSkewY(), m.getSkewX(), m.getSkewY()};
+        } else if (m.getType() & SkMatrix::kScale_Mask) {
+            fType = Type::kScale;
+            fScaleXY = {m.getScaleX(), m.getScaleY()};
+            fScaleXYXY = {m.getScaleX(), m.getScaleY(), m.getScaleX(), m.getScaleY()};
+        } else {
+            SkASSERT(!(m.getType() & ~SkMatrix::kTranslate_Mask));
+            fType = Type::kIdentity;
+        }
+    }
+    Sk2f operator()(const Sk2f& vector) const {
+        switch (fType) {
+            case Type::kIdentity:
+                return vector;
+            case Type::kScale:
+                return fScaleXY * vector;
+            case Type::kAffine:
+                return fScaleXSkewY * vector[0] + fSkewXScaleY * vector[1];
+        }
+        SkUNREACHABLE;
+    }
+    Sk4f operator()(const Sk4f& vectors) const {
+        switch (fType) {
+            case Type::kIdentity:
+                return vectors;
+            case Type::kScale:
+                return vectors * fScaleXYXY;
+            case Type::kAffine:
+                return fScaleXYXY * vectors + fSkewXYXY * SkNx_shuffle<1,0,3,2>(vectors);
+        }
+        SkUNREACHABLE;
+    }
+private:
+    enum class Type { kIdentity, kScale, kAffine } fType;
+    union { Sk2f fScaleXY, fScaleXSkewY; };
+    Sk2f fSkewXScaleY;
+    Sk4f fScaleXYXY;
+    Sk4f fSkewXYXY;
+};
+
+}  // namespace
+
+#endif
diff --git a/src/gpu/tessellate/GrWangsFormula.h b/src/gpu/tessellate/GrWangsFormula.h
new file mode 100644
index 0000000..1fa79c6
--- /dev/null
+++ b/src/gpu/tessellate/GrWangsFormula.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrWangsFormula_DEFINED
+#define GrWangsFormula_DEFINED
+
+#include "include/core/SkPoint.h"
+#include "include/private/SkNx.h"
+#include "src/gpu/tessellate/GrVectorXform.h"
+
+// Wang's formulas for cubics and quadratics (1985) give us the minimum number of evenly spaced (in
+// the parametric sense) line segments that a curve must be chopped into in order to guarantee all
+// lines stay within a distance of "1/intolerance" pixels from the true curve.
+namespace GrWangsFormula {
+
+SK_ALWAYS_INLINE static float length(const Sk2f& n) {
+    Sk2f nn = n*n;
+    return std::sqrt(nn[0] + nn[1]);
+}
+
+// Returns the minimum number of evenly spaced (in the parametric sense) line segments that the
+// quadratic must be chopped into in order to guarantee all lines stay within a distance of
+// "1/intolerance" pixels from the true curve.
+SK_ALWAYS_INLINE static float quadratic(float intolerance, const SkPoint pts[]) {
+    Sk2f p0 = Sk2f::Load(pts);
+    Sk2f p1 = Sk2f::Load(pts + 1);
+    Sk2f p2 = Sk2f::Load(pts + 2);
+    float k = intolerance * .25f;
+    return SkScalarSqrt(k * length(p0 - p1*2 + p2));
+}
+
+// Returns the minimum number of evenly spaced (in the parametric sense) line segments that the
+// cubic must be chopped into in order to guarantee all lines stay within a distance of
+// "1/intolerance" pixels from the true curve.
+SK_ALWAYS_INLINE static float cubic(float intolerance, const SkPoint pts[]) {
+    Sk2f p0 = Sk2f::Load(pts);
+    Sk2f p1 = Sk2f::Load(pts + 1);
+    Sk2f p2 = Sk2f::Load(pts + 2);
+    Sk2f p3 = Sk2f::Load(pts + 3);
+    float k = intolerance * .75f;
+    return SkScalarSqrt(k * length(Sk2f::Max((p0 - p1*2 + p2).abs(),
+                                             (p1 - p2*2 + p3).abs())));
+}
+
+// Returns the log2 of the provided value, were that value to be rounded up to the next power of 2.
+// Returns 0 if value <= 0:
+// Never returns a negative number, even if value is NaN.
+//
+//     nextlog2((-inf..1]) -> 0
+//     nextlog2((1..2]) -> 1
+//     nextlog2((2..4]) -> 2
+//     nextlog2((4..8]) -> 3
+//     ...
+SK_ALWAYS_INLINE static int nextlog2(float value) {
+    uint32_t bits;
+    memcpy(&bits, &value, 4);
+    bits += (1u << 23) - 1u;  // Increment the exponent for non-powers-of-2.
+    int exp = ((int32_t)bits >> 23) - 127;
+    return exp & ~(exp >> 31);  // Return 0 for negative or denormalized floats, and exponents < 0.
+}
+
+// Returns the minimum log2 number of evenly spaced (in the parametric sense) line segments that the
+// transformed quadratic must be chopped into in order to guarantee all lines stay within a distance
+// of "1/intolerance" pixels from the true curve.
+SK_ALWAYS_INLINE static int quadratic_log2(float intolerance, const SkPoint pts[],
+                                           const GrVectorXform& vectorXform = GrVectorXform()) {
+    Sk2f p0 = Sk2f::Load(pts);
+    Sk2f p1 = Sk2f::Load(pts + 1);
+    Sk2f p2 = Sk2f::Load(pts + 2);
+    Sk2f v = p0 + p1*-2 + p2;
+    v = vectorXform(v);
+    Sk2f vv = v*v;
+    float k = intolerance * .25f;
+    float f = k*k * (vv[0] + vv[1]);
+    return (nextlog2(f) + 3) >> 2;  // ceil(log2(sqrt(sqrt(f))))
+}
+
+// Returns the minimum log2 number of evenly spaced (in the parametric sense) line segments that the
+// transformed cubic must be chopped into in order to guarantee all lines stay within a distance of
+// "1/intolerance" pixels from the true curve.
+SK_ALWAYS_INLINE static int cubic_log2(float intolerance, const SkPoint pts[],
+                                       const GrVectorXform& vectorXform = GrVectorXform()) {
+    Sk4f p01 = Sk4f::Load(pts);
+    Sk4f p12 = Sk4f::Load(pts + 1);
+    Sk4f p23 = Sk4f::Load(pts + 2);
+    Sk4f v = p01 + p12*-2 + p23;
+    v = vectorXform(v);
+    Sk4f vv = v*v;
+    vv = Sk4f::Max(vv, SkNx_shuffle<2,3,0,1>(vv));
+    float k = intolerance * .75f;
+    float f = k*k * (vv[0] + vv[1]);
+    return (nextlog2(f) + 3) >> 2;  // ceil(log2(sqrt(sqrt(f))))
+}
+
+}  // namespace
+
+#endif
diff --git a/tests/WangsFormulaTest.cpp b/tests/WangsFormulaTest.cpp
new file mode 100644
index 0000000..a8e1c77
--- /dev/null
+++ b/tests/WangsFormulaTest.cpp
@@ -0,0 +1,278 @@
+/*
+ * Copyright 2020 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "include/utils/SkRandom.h"
+#include "src/core/SkGeometry.h"
+#include "src/gpu/tessellate/GrWangsFormula.h"
+#include "tests/Test.h"
+
+constexpr static int kIntolerance = 4;  // 1/4 pixel max error.
+
+const SkPoint kSerp[4] = {
+        {285.625f, 499.687f}, {411.625f, 808.188f}, {1064.62f, 135.688f}, {1042.63f, 585.187f}};
+
+const SkPoint kLoop[4] = {
+        {635.625f, 614.687f}, {171.625f, 236.188f}, {1064.62f, 135.688f}, {516.625f, 570.187f}};
+
+const SkPoint kQuad[4] = {
+        {460.625f, 557.187f}, {707.121f, 209.688f}, {779.628f, 577.687f}};
+
+DEF_TEST(WangsFormula_nextlog2, r) {
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-std::numeric_limits<float>::infinity()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-std::numeric_limits<float>::max()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-1000.0f) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-0.1f) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-std::numeric_limits<float>::min()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(-std::numeric_limits<float>::denorm_min()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(0.0f) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(std::numeric_limits<float>::denorm_min()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(std::numeric_limits<float>::min()) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(0.1f) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(1.0f) == 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(1.1f) == 1);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(2.0f) == 1);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(2.1f) == 2);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(3.0f) == 2);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(3.1f) == 2);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(4.0f) == 2);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(4.1f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(5.0f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(5.1f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(6.0f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(6.1f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(7.0f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(7.1f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(8.0f) == 3);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(8.1f) == 4);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(9.0f) == 4);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(9.1f) == 4);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(std::numeric_limits<float>::max()) == 128);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(std::numeric_limits<float>::infinity()) > 0);
+    REPORTER_ASSERT(r, GrWangsFormula::nextlog2(std::numeric_limits<float>::quiet_NaN()) >= 0);
+
+    for (int i = 0; i < 100; ++i) {
+        float pow2 = std::ldexp(1, i);
+        float epsilon = std::ldexp(SK_ScalarNearlyZero, i);
+        REPORTER_ASSERT(r, GrWangsFormula::nextlog2(pow2) == i);
+        REPORTER_ASSERT(r, GrWangsFormula::nextlog2(pow2 + epsilon) == i + 1);
+        REPORTER_ASSERT(r, GrWangsFormula::nextlog2(pow2 - epsilon) == i);
+    }
+}
+
+void for_random_matrices(SkRandom* rand, std::function<void(const SkMatrix&)> f) {
+    SkMatrix m;
+    m.setIdentity();
+    f(m);
+
+    for (int i = -10; i <= 30; ++i) {
+        for (int j = -10; j <= 30; ++j) {
+            m.setScaleX(std::ldexp(1 + rand->nextF(), i));
+            m.setSkewX(0);
+            m.setSkewY(0);
+            m.setScaleY(std::ldexp(1 + rand->nextF(), j));
+            f(m);
+
+            m.setScaleX(std::ldexp(1 + rand->nextF(), i));
+            m.setSkewX(std::ldexp(1 + rand->nextF(), (j + i) / 2));
+            m.setSkewY(std::ldexp(1 + rand->nextF(), (j + i) / 2));
+            m.setScaleY(std::ldexp(1 + rand->nextF(), j));
+            f(m);
+        }
+    }
+}
+
+void for_random_beziers(int numPoints, SkRandom* rand, std::function<void(const SkPoint[])> f) {
+    SkASSERT(numPoints <= 4);
+    SkPoint pts[4];
+    for (int i = -10; i <= 30; ++i) {
+        for (int j = 0; j < numPoints; ++j) {
+            pts[j].set(std::ldexp(1 + rand->nextF(), i), std::ldexp(1 + rand->nextF(), i));
+        }
+        f(pts);
+    }
+}
+
+// Ensure the optimized "*_log2" versions return the same value as ceil(std::log2(f)).
+DEF_TEST(WangsFormula_log2, r) {
+    // Constructs a cubic such that the 'length' term in wang's formula == term.
+    //
+    //     f = sqrt(k * length(max(abs(p0 - p1*2 + p2),
+    //                             abs(p1 - p2*2 + p3))));
+    auto setupCubicLengthTerm = [](int seed, SkPoint pts[], float term) {
+        memset(pts, 0, sizeof(SkPoint) * 4);
+
+        SkPoint term2d = (seed & 1) ?
+                SkPoint::Make(term, 0) : SkPoint::Make(.5f, std::sqrt(3)/2) * term;
+        seed >>= 1;
+
+        if (seed & 1) {
+            term2d.fX = -term2d.fX;
+        }
+        seed >>= 1;
+
+        if (seed & 1) {
+            std::swap(term2d.fX, term2d.fY);
+        }
+        seed >>= 1;
+
+        switch (seed % 4) {
+            case 0:
+                pts[0] = term2d;
+                pts[3] = term2d * .75f;
+                return;
+            case 1:
+                pts[1] = term2d * -.5f;
+                return;
+            case 2:
+                pts[1] = term2d * -.5f;
+                return;
+            case 3:
+                pts[3] = term2d;
+                pts[0] = term2d * .75f;
+                return;
+        }
+    };
+
+    // Constructs a quadratic such that the 'length' term in wang's formula == term.
+    //
+    //     f = sqrt(k * length(p0 - p1*2 + p2));
+    auto setupQuadraticLengthTerm = [](int seed, SkPoint pts[], float term) {
+        memset(pts, 0, sizeof(SkPoint) * 3);
+
+        SkPoint term2d = (seed & 1) ?
+                SkPoint::Make(term, 0) : SkPoint::Make(.5f, std::sqrt(3)/2) * term;
+        seed >>= 1;
+
+        if (seed & 1) {
+            term2d.fX = -term2d.fX;
+        }
+        seed >>= 1;
+
+        if (seed & 1) {
+            std::swap(term2d.fX, term2d.fY);
+        }
+        seed >>= 1;
+
+        switch (seed % 3) {
+            case 0:
+                pts[0] = term2d;
+                return;
+            case 1:
+                pts[1] = term2d * -.5f;
+                return;
+            case 2:
+                pts[2] = term2d;
+                return;
+        }
+    };
+
+    for (int level = 0; level < 30; ++level) {
+        float epsilon = std::ldexp(SK_ScalarNearlyZero, level * 2);
+        SkPoint pts[4];
+
+        {
+            // Test cubic boundaries.
+            //     f = sqrt(k * length(max(abs(p0 - p1*2 + p2),
+            //                             abs(p1 - p2*2 + p3))));
+            constexpr static float k = (3 * 2) / (8 * (1.f/kIntolerance));
+            float x = std::ldexp(1, level * 2) / k;
+            setupCubicLengthTerm(level << 1, pts, x - epsilon);
+            REPORTER_ASSERT(r,
+                    std::ceil(std::log2(GrWangsFormula::cubic(kIntolerance, pts))) == level);
+            REPORTER_ASSERT(r, GrWangsFormula::cubic_log2(kIntolerance, pts) == level);
+            setupCubicLengthTerm(level << 1, pts, x + epsilon);
+            REPORTER_ASSERT(r,
+                    std::ceil(std::log2(GrWangsFormula::cubic(kIntolerance, pts))) == level + 1);
+            REPORTER_ASSERT(r, GrWangsFormula::cubic_log2(kIntolerance, pts) == level + 1);
+        }
+
+        {
+            // Test quadratic boundaries.
+            //     f = std::sqrt(k * Length(p0 - p1*2 + p2));
+            constexpr static float k = 2 / (8 * (1.f/kIntolerance));
+            float x = std::ldexp(1, level * 2) / k;
+            setupQuadraticLengthTerm(level << 1, pts, x - epsilon);
+            REPORTER_ASSERT(r,
+                    std::ceil(std::log2(GrWangsFormula::quadratic(kIntolerance, pts))) == level);
+            REPORTER_ASSERT(r, GrWangsFormula::quadratic_log2(kIntolerance, pts) == level);
+            setupQuadraticLengthTerm(level << 1, pts, x + epsilon);
+            REPORTER_ASSERT(r,
+                    std::ceil(std::log2(GrWangsFormula::quadratic(kIntolerance, pts))) == level+1);
+            REPORTER_ASSERT(r, GrWangsFormula::quadratic_log2(kIntolerance, pts) == level + 1);
+        }
+    }
+
+    auto check_cubic_log2 = [&](const SkPoint* pts) {
+        float f = std::max(1.f, GrWangsFormula::cubic(kIntolerance, pts));
+        int f_log2 = GrWangsFormula::cubic_log2(kIntolerance, pts);
+        REPORTER_ASSERT(r, SkScalarCeilToInt(std::log2(f)) == f_log2);
+    };
+
+    auto check_quadratic_log2 = [&](const SkPoint* pts) {
+        float f = std::max(1.f, GrWangsFormula::quadratic(kIntolerance, pts));
+        int f_log2 = GrWangsFormula::quadratic_log2(kIntolerance, pts);
+        REPORTER_ASSERT(r, SkScalarCeilToInt(std::log2(f)) == f_log2);
+    };
+
+    SkRandom rand;
+
+    for_random_matrices(&rand, [&](const SkMatrix& m) {
+        SkPoint pts[4];
+        m.mapPoints(pts, kSerp, 4);
+        check_cubic_log2(pts);
+
+        m.mapPoints(pts, kLoop, 4);
+        check_cubic_log2(pts);
+
+        m.mapPoints(pts, kQuad, 3);
+        check_quadratic_log2(pts);
+    });
+
+    for_random_beziers(4, &rand, [&](const SkPoint pts[]) {
+        check_cubic_log2(pts);
+    });
+
+    for_random_beziers(3, &rand, [&](const SkPoint pts[]) {
+        check_quadratic_log2(pts);
+    });
+}
+
+// Ensure using transformations gives the same result as pre-transforming all points.
+DEF_TEST(WangsFormula_vectorXforms, r) {
+    auto check_cubic_log2_with_transform = [&](const SkPoint* pts, const SkMatrix& m){
+        SkPoint ptsXformed[4];
+        m.mapPoints(ptsXformed, pts, 4);
+        int expected = GrWangsFormula::cubic_log2(kIntolerance, ptsXformed);
+        int actual = GrWangsFormula::cubic_log2(kIntolerance, pts, GrVectorXform(m));
+        REPORTER_ASSERT(r, actual == expected);
+    };
+
+    auto check_quadratic_log2_with_transform = [&](const SkPoint* pts, const SkMatrix& m) {
+        SkPoint ptsXformed[3];
+        m.mapPoints(ptsXformed, pts, 3);
+        int expected = GrWangsFormula::quadratic_log2(kIntolerance, ptsXformed);
+        int actual = GrWangsFormula::quadratic_log2(kIntolerance, pts, GrVectorXform(m));
+        REPORTER_ASSERT(r, actual == expected);
+    };
+
+    SkRandom rand;
+
+    for_random_matrices(&rand, [&](const SkMatrix& m) {
+        check_cubic_log2_with_transform(kSerp, m);
+        check_cubic_log2_with_transform(kLoop, m);
+        check_quadratic_log2_with_transform(kQuad, m);
+
+        for_random_beziers(4, &rand, [&](const SkPoint pts[]) {
+            check_cubic_log2_with_transform(pts, m);
+        });
+
+        for_random_beziers(3, &rand, [&](const SkPoint pts[]) {
+            check_quadratic_log2_with_transform(pts, m);
+        });
+    });
+
+}
