[canvaskit] Expose setVolatile (especially for animations)

Bug: skia:
Change-Id: Ifd8ef390d1b9a102baaa89804b9f6d11e8f39955
Reviewed-on: https://skia-review.googlesource.com/c/177882
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/experimental/canvaskit/CHANGELOG.md b/experimental/canvaskit/CHANGELOG.md
index 7922db0..984d428 100644
--- a/experimental/canvaskit/CHANGELOG.md
+++ b/experimental/canvaskit/CHANGELOG.md
@@ -10,6 +10,8 @@
 - Add Canvas2D JS layer. This mirrors the HTML Canvas API. This may be omitted at compile time
     it by adding `no_canvas` to the `compile.sh` invocation.
 - `CanvasKit.FontMgr.DefaultRef()` and `fontmgr.MakeTypefaceFromData` to load fonts.
+- Exposed `SkPath.setVolatile`. Some animations see performance improvements by setting
+their paths' volatility to true.
 
 ### Fixed
 - `SkPath.addRect` now correctly draws counter-clockwise vs clockwise.
diff --git a/experimental/canvaskit/canvaskit/example.html b/experimental/canvaskit/canvaskit/example.html
index 9650130..85b9211 100644
--- a/experimental/canvaskit/canvaskit/example.html
+++ b/experimental/canvaskit/canvaskit/example.html
@@ -175,6 +175,9 @@
 
     function drawFrame() {
       const path = starPath(CanvasKit, X, Y);
+      // Some animations see performance improvements by marking their
+      // paths as volatile.
+      path.setIsVolatile(true);
       CanvasKit.setCurrentContext(context);
       const dpe = CanvasKit.MakeSkDashPathEffect([15, 5, 5, 10], i/5);
       i++;
diff --git a/experimental/canvaskit/canvaskit_bindings.cpp b/experimental/canvaskit/canvaskit_bindings.cpp
index 0fe3d33..02616e7 100644
--- a/experimental/canvaskit/canvaskit_bindings.cpp
+++ b/experimental/canvaskit/canvaskit_bindings.cpp
@@ -779,9 +779,11 @@
         .function("_cubicTo", &ApplyCubicTo)
         .function("getPoint", &SkPath::getPoint)
         .function("isEmpty",  &SkPath::isEmpty)
+        .function("isVolatile", &SkPath::isVolatile)
         .function("_lineTo", &ApplyLineTo)
         .function("_moveTo", &ApplyMoveTo)
         .function("_quadTo", &ApplyQuadTo)
+        .function("setIsVolatile", &SkPath::setIsVolatile)
         .function("_transform", select_overload<void(SkPath&, SkScalar, SkScalar, SkScalar, SkScalar, SkScalar, SkScalar, SkScalar, SkScalar, SkScalar)>(&ApplyTransform))
 
         // PathEffects
diff --git a/experimental/canvaskit/externs.js b/experimental/canvaskit/externs.js
index 3280cb3..57a4306 100644
--- a/experimental/canvaskit/externs.js
+++ b/experimental/canvaskit/externs.js
@@ -174,7 +174,9 @@
 		getFillType: function() {},
 		getPoint: function() {},
 		isEmpty: function() {},
+		isVolatile: function() {},
 		setFillType: function() {},
+		setIsVolatile: function() {},
 		toSVGString: function() {},
 
 		// private API