[web] Fix arc rendering when it starts a new sub path. (#18535)

* Fix Path.addArc failure due to incorrect start position
diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml
index 36047fa..593346a 100644
--- a/lib/web_ui/dev/goldens_lock.yaml
+++ b/lib/web_ui/dev/goldens_lock.yaml
@@ -1,2 +1,2 @@
 repository: https://github.com/flutter/goldens.git
-revision: f80e019e225915e220f0f37884c8cd1b942d9bc2
+revision: 993752770817654e362b85f4781d300a9b215d4c
diff --git a/lib/web_ui/lib/src/engine/canvas_pool.dart b/lib/web_ui/lib/src/engine/canvas_pool.dart
index 1f55400..0be1459 100644
--- a/lib/web_ui/lib/src/engine/canvas_pool.dart
+++ b/lib/web_ui/lib/src/engine/canvas_pool.dart
@@ -520,6 +520,11 @@
             break;
           case PathCommandTypes.ellipse:
             final Ellipse ellipse = command;
+            if (c == 0) {
+              // Ellipses that start a new path need to set start point,
+              // otherwise it incorrectly uses last point.
+              ctx.moveTo(subpath.startX, subpath.startY);
+            }
             DomRenderer.ellipse(ctx,
                 ellipse.x,
                 ellipse.y,
diff --git a/lib/web_ui/test/golden_tests/engine/canvas_arc_golden_test.dart b/lib/web_ui/test/golden_tests/engine/canvas_arc_golden_test.dart
index b977e9b..4c2255c 100644
--- a/lib/web_ui/test/golden_tests/engine/canvas_arc_golden_test.dart
+++ b/lib/web_ui/test/golden_tests/engine/canvas_arc_golden_test.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.6
 import 'dart:html' as html;
-
+import 'dart:math' as math;
 import 'package:ui/src/engine.dart';
 import 'package:ui/ui.dart';
 import 'package:test/test.dart';
@@ -47,6 +47,20 @@
     await matchGoldenFile('canvas_arc_to_point.png', region: region);
   });
 
+  test('Path.addArc that starts new path has correct start point', () async {
+    final Rect rect = Rect.fromLTWH(20, 20, 200, 200);
+    final Path p = Path()
+      ..fillType = PathFillType.evenOdd
+      ..addRect(rect)
+      ..addArc(Rect.fromCircle(center: rect.center,
+          radius: rect.size.shortestSide / 2), 0.25 * math.pi, 1.5 * math.pi);
+    canvas.drawPath(p, SurfacePaintData()
+      ..color = Color(0xFFFF9800) // orange
+      ..style = PaintingStyle.fill);
+
+    html.document.body.append(canvas.rootElement);
+    await matchGoldenFile('canvas_addarc.png', region: region);
+  });
 }
 
 void paintArc(BitmapCanvas canvas, Offset offset,