diff --git a/libs/hwui/canvas/CanvasOpTypes.h b/libs/hwui/canvas/CanvasOpTypes.h
index c8a21f6..895c6d0 100644
--- a/libs/hwui/canvas/CanvasOpTypes.h
+++ b/libs/hwui/canvas/CanvasOpTypes.h
@@ -38,6 +38,8 @@
     DrawColor,
     DrawRect,
     DrawRoundRect,
+    DrawRoundRectProperty,
+    DrawCircleProperty,
     DrawCircle,
     DrawOval,
     DrawArc,
diff --git a/libs/hwui/canvas/CanvasOps.h b/libs/hwui/canvas/CanvasOps.h
index 27eca21..afd88c0 100644
--- a/libs/hwui/canvas/CanvasOps.h
+++ b/libs/hwui/canvas/CanvasOps.h
@@ -20,6 +20,7 @@
 #include <SkCanvas.h>
 #include <SkPath.h>
 #include <log/log.h>
+#include "CanvasProperty.h"
 
 #include "CanvasOpTypes.h"
 
@@ -103,6 +104,36 @@
 //   Drawing Ops
 //  ---------------------------------------------
 
+template<>
+struct CanvasOp<CanvasOpType::DrawRoundRectProperty> {
+    sp<uirenderer::CanvasPropertyPrimitive> left;
+    sp<uirenderer::CanvasPropertyPrimitive> top;
+    sp<uirenderer::CanvasPropertyPrimitive> right;
+    sp<uirenderer::CanvasPropertyPrimitive> bottom;
+    sp<uirenderer::CanvasPropertyPrimitive> rx;
+    sp<uirenderer::CanvasPropertyPrimitive> ry;
+    sp<uirenderer::CanvasPropertyPaint> paint;
+
+    void draw(SkCanvas* canvas) const {
+        SkRect rect = SkRect::MakeLTRB(left->value, top->value, right->value, bottom->value);
+        canvas->drawRoundRect(rect, rx->value, ry->value, paint->value);
+    }
+    ASSERT_DRAWABLE()
+};
+
+template<>
+struct CanvasOp<CanvasOpType::DrawCircleProperty> {
+    sp<uirenderer::CanvasPropertyPrimitive> x;
+    sp<uirenderer::CanvasPropertyPrimitive> y;
+    sp<uirenderer::CanvasPropertyPrimitive> radius;
+    sp<uirenderer::CanvasPropertyPaint> paint;
+
+    void draw(SkCanvas* canvas) const {
+        canvas->drawCircle(x->value, y->value, radius->value, paint->value);
+    }
+    ASSERT_DRAWABLE()
+};
+
 template <>
 struct CanvasOp<CanvasOpType::DrawColor> {
     SkColor4f color;
diff --git a/libs/hwui/tests/unit/CanvasOpTests.cpp b/libs/hwui/tests/unit/CanvasOpTests.cpp
index c90d1a4..2311924 100644
--- a/libs/hwui/tests/unit/CanvasOpTests.cpp
+++ b/libs/hwui/tests/unit/CanvasOpTests.cpp
@@ -22,6 +22,9 @@
 
 #include <tests/common/CallCountingCanvas.h>
 
+#include "SkColor.h"
+#include "pipeline/skia/AnimatedDrawables.h"
+
 using namespace android;
 using namespace android::uirenderer;
 using namespace android::uirenderer::test;
@@ -178,6 +181,21 @@
     EXPECT_EQ(buffer.size(), 0);
 }
 
+TEST(CanvasOp, simpleDrawPaint) {
+    CanvasOpBuffer buffer;
+    EXPECT_EQ(buffer.size(), 0);
+    buffer.push(CanvasOp<Op::DrawColor> {
+        .color = SkColor4f{1, 1, 1, 1},
+        .mode = SkBlendMode::kSrcIn
+    });
+
+    CallCountingCanvas canvas;
+    EXPECT_EQ(0, canvas.sumTotalDrawCalls());
+    rasterizeCanvasBuffer(buffer, &canvas);
+    EXPECT_EQ(1, canvas.drawPaintCount);
+    EXPECT_EQ(1, canvas.sumTotalDrawCalls());
+}
+
 TEST(CanvasOp, simpleDrawRect) {
     CanvasOpBuffer buffer;
     EXPECT_EQ(buffer.size(), 0);
@@ -260,6 +278,60 @@
     EXPECT_EQ(1, canvas.sumTotalDrawCalls());
 }
 
+TEST(CanvasOp, simpleDrawRoundRectProperty) {
+    CanvasOpBuffer buffer;
+    EXPECT_EQ(buffer.size(), 0);
+
+    auto left = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(1));
+    auto top = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(2));
+    auto right = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(3));
+    auto bottom = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(4));
+    auto radiusX = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(5));
+    auto radiusY = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(6));
+    auto propertyPaint =
+            sp<uirenderer::CanvasPropertyPaint>(new uirenderer::CanvasPropertyPaint(SkPaint{}));
+
+    buffer.push(CanvasOp<Op::DrawRoundRectProperty> {
+        .left = left,
+        .top = top,
+        .right = right,
+        .bottom = bottom,
+        .rx = radiusX,
+        .ry = radiusY,
+        .paint = propertyPaint
+    });
+
+    CallCountingCanvas canvas;
+    EXPECT_EQ(0, canvas.sumTotalDrawCalls());
+    rasterizeCanvasBuffer(buffer, &canvas);
+    EXPECT_EQ(1, canvas.drawRRectCount);
+    EXPECT_EQ(1, canvas.sumTotalDrawCalls());
+}
+
+TEST(CanvasOp, simpleDrawCircleProperty) {
+    CanvasOpBuffer buffer;
+    EXPECT_EQ(buffer.size(), 0);
+
+    auto x = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(1));
+    auto y = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(2));
+    auto radius = sp<CanvasPropertyPrimitive>(new uirenderer::CanvasPropertyPrimitive(5));
+    auto propertyPaint =
+            sp<uirenderer::CanvasPropertyPaint>(new uirenderer::CanvasPropertyPaint(SkPaint{}));
+
+    buffer.push(CanvasOp<Op::DrawCircleProperty> {
+        .x = x,
+        .y = y,
+        .radius = radius,
+        .paint = propertyPaint
+    });
+
+    CallCountingCanvas canvas;
+    EXPECT_EQ(0, canvas.sumTotalDrawCalls());
+    rasterizeCanvasBuffer(buffer, &canvas);
+    EXPECT_EQ(1, canvas.drawOvalCount);
+    EXPECT_EQ(1, canvas.sumTotalDrawCalls());
+}
+
 TEST(CanvasOp, immediateRendering) {
     auto canvas = std::make_shared<CallCountingCanvas>();
 
