diff --git a/modules/canvaskit/CHANGELOG.md b/modules/canvaskit/CHANGELOG.md
index 7047b14..31b3eef 100644
--- a/modules/canvaskit/CHANGELOG.md
+++ b/modules/canvaskit/CHANGELOG.md
@@ -9,7 +9,8 @@
 ### Added
  - `SkCanvas.drawCircle()`, `SkCanvas.getSaveCount()`
  - `SkPath.offset()`, `SkPath.drawOval`
- - `SkRRect` support (`SkCanvas.drawRRect`, `SkCanvas.drawDRRect`)
+ - `SkRRect` support (`SkCanvas.drawRRect`, `SkCanvas.drawDRRect`, `CanvasKit.RRectXY`).
+   Advanced users can specify the 8 individual radii, if needed.
 
 ### Changed
  - `MakeSkVertices` uses a builder to save a copy.
diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp
index f610fc6..7e7d881 100644
--- a/modules/canvaskit/canvaskit_bindings.cpp
+++ b/modules/canvaskit/canvaskit_bindings.cpp
@@ -558,12 +558,23 @@
 // SimpleRRect is simpler than passing a (complex) SkRRect over the wire to JS.
 struct SimpleRRect {
     SkRect rect;
-    SkScalar rx;
-    SkScalar ry;
+
+    SkScalar rx1;
+    SkScalar ry1;
+    SkScalar rx2;
+    SkScalar ry2;
+    SkScalar rx3;
+    SkScalar ry3;
+    SkScalar rx4;
+    SkScalar ry4;
 };
 
 SkRRect toRRect(const SimpleRRect& r) {
-    return SkRRect::MakeRectXY(r.rect, r.rx, r.ry);
+    SkVector fRadii[4] = {{r.rx1, r.ry1}, {r.rx2, r.ry2},
+                          {r.rx3, r.ry3}, {r.rx4, r.ry4}};
+    SkRRect rr;
+    rr.setRectRadii(r.rect, fRadii);
+    return rr;
 }
 
 // These objects have private destructors / delete methods - I don't think
@@ -1310,8 +1321,14 @@
 
     value_object<SimpleRRect>("SkRRect")
         .field("rect", &SimpleRRect::rect)
-        .field("rx",   &SimpleRRect::rx)
-        .field("ry",   &SimpleRRect::ry);
+        .field("rx1",  &SimpleRRect::rx1)
+        .field("ry1",  &SimpleRRect::ry1)
+        .field("rx2",  &SimpleRRect::rx2)
+        .field("ry2",  &SimpleRRect::ry2)
+        .field("rx3",  &SimpleRRect::rx3)
+        .field("ry3",  &SimpleRRect::ry3)
+        .field("rx4",  &SimpleRRect::rx4)
+        .field("ry4",  &SimpleRRect::ry4);
 
     value_object<SkIRect>("SkIRect")
         .field("fLeft",   &SkIRect::fLeft)
diff --git a/modules/canvaskit/externs.js b/modules/canvaskit/externs.js
index 24ce99f..0ef36e7 100644
--- a/modules/canvaskit/externs.js
+++ b/modules/canvaskit/externs.js
@@ -29,6 +29,8 @@
 	LTRBRect: function() {},
 	/** @return {CanvasKit.SkRect} */
 	XYWHRect: function() {},
+	/** @return {CanvasKit.SkRRect} */
+	RRectXY: function() {},
 	/** @return {ImageData} */
 	ImageData: function() {},
 
@@ -285,8 +287,14 @@
 
 	SkRRect: {
 		rect: {},
-		rx: {},
-		ry: {},
+		rx1: {},
+		ry1: {},
+		rx2: {},
+		ry2: {},
+		rx3: {},
+		ry3: {},
+		rx4: {},
+		ry4: {},
 	},
 
 	SkSurface: {
diff --git a/modules/canvaskit/interface.js b/modules/canvaskit/interface.js
index 98db395..d0e8d19 100644
--- a/modules/canvaskit/interface.js
+++ b/modules/canvaskit/interface.js
@@ -793,6 +793,22 @@
   };
 }
 
+// RRectXY returns an RRect with the given rect and a radiusX and radiusY for
+// all 4 corners.
+CanvasKit.RRectXY = function(rect, rx, ry) {
+  return {
+    rect: rect,
+    rx1: rx,
+    ry1: ry,
+    rx2: rx,
+    ry2: ry,
+    rx3: rx,
+    ry3: ry,
+    rx4: rx,
+    ry4: ry,
+  };
+}
+
 CanvasKit.MakePathFromCmds = function(cmds) {
   var ptrLen = loadCmdsTypedArray(cmds);
   var path = CanvasKit._MakePathFromCmds(ptrLen[0], ptrLen[1]);
diff --git a/modules/canvaskit/tests/canvas.spec.js b/modules/canvaskit/tests/canvas.spec.js
index e7054c0..b4f4cc9 100644
--- a/modules/canvaskit/tests/canvas.spec.js
+++ b/modules/canvaskit/tests/canvas.spec.js
@@ -162,7 +162,47 @@
         }));
     });
 
-    it('draws rrects', function(done) {
+    it('draws simple rrects', function(done) {
+        LoadCanvasKit.then(catchException(done, () => {
+            const surface = CanvasKit.MakeCanvasSurface('test');
+            expect(surface).toBeTruthy('Could not make surface')
+            if (!surface) {
+                done();
+                return;
+            }
+            const canvas = surface.getCanvas();
+            const path = starPath(CanvasKit);
+
+            const paint = new CanvasKit.SkPaint();
+
+            paint.setStyle(CanvasKit.PaintStyle.Stroke);
+            paint.setStrokeWidth(3.0);
+            paint.setAntiAlias(true);
+            paint.setColor(CanvasKit.BLACK);
+
+            canvas.clear(CanvasKit.WHITE);
+
+            canvas.drawRRect(CanvasKit.RRectXY(
+                CanvasKit.LTRBRect(10, 10, 50, 50), 5, 10), paint);
+
+            canvas.drawRRect(CanvasKit.RRectXY(
+                CanvasKit.LTRBRect(60, 10, 110, 50), 10, 5), paint);
+
+            canvas.drawRRect(CanvasKit.RRectXY(
+                CanvasKit.LTRBRect(10, 60, 210, 260), 0, 30), paint);
+
+            canvas.drawRRect(CanvasKit.RRectXY(
+                CanvasKit.LTRBRect(50, 90, 160, 210), 30, 30), paint);
+
+            surface.flush();
+            path.delete();
+            paint.delete();
+
+            reportSurface(surface, 'rrect_canvas', done);
+        }));
+    });
+
+    it('draws complex rrects', function(done) {
         LoadCanvasKit.then(catchException(done, () => {
             const surface = CanvasKit.MakeCanvasSurface('test');
             expect(surface).toBeTruthy('Could not make surface')
@@ -183,34 +223,22 @@
             canvas.clear(CanvasKit.WHITE);
 
             canvas.drawRRect({
-                rect: CanvasKit.LTRBRect(10, 10, 50, 50),
-                rx: 5,
-                ry: 10,
-            }, paint);
-
-            canvas.drawRRect({
-                rect: CanvasKit.LTRBRect(60, 10, 110, 50),
-                rx: 10,
-                ry: 5,
-            }, paint);
-
-            canvas.drawRRect({
-                rect: CanvasKit.LTRBRect(10, 60, 210, 260),
-                rx: 0,
-                ry: 30,
-            }, paint);
-
-            canvas.drawRRect({
-                rect: CanvasKit.LTRBRect(50, 90, 160, 210),
-                rx: 30,
-                ry: 30,
+              rect: CanvasKit.LTRBRect(10, 10, 210, 210),
+              rx1: 10, // top left corner, going clockwise
+              ry1: 30,
+              rx2: 30,
+              ry2: 10,
+              rx3: 50,
+              ry3: 75,
+              rx4: 120,
+              ry4: 120,
             }, paint);
 
             surface.flush();
             path.delete();
             paint.delete();
 
-            reportSurface(surface, 'rrect_canvas', done);
+            reportSurface(surface, 'rrect_8corners_canvas', done);
         }));
     });
 
@@ -234,18 +262,8 @@
 
             canvas.clear(CanvasKit.WHITE);
 
-
-            const outer = {
-                rect: CanvasKit.LTRBRect(10, 60, 210, 260),
-                rx: 10,
-                ry: 5,
-            };
-
-            const inner = {
-                rect: CanvasKit.LTRBRect(50, 90, 160, 210),
-                rx: 30,
-                ry: 30,
-            };
+            const outer = CanvasKit.RRectXY(CanvasKit.LTRBRect(10, 60, 210, 260), 10, 5);
+            const inner = CanvasKit.RRectXY(CanvasKit.LTRBRect(50, 90, 160, 210), 30, 30);
 
             canvas.drawDRRect(outer, inner, paint);
 
