Loading libs/hwui/canvas/CanvasOpTypes.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,12 @@ enum class CanvasOpType : int8_t { // Drawing ops // Drawing ops DrawColor, DrawColor, DrawRect, DrawRect, DrawRoundRect, DrawCircle, DrawOval, DrawArc, DrawPaint, // TODO: Rest // TODO: Rest Loading libs/hwui/canvas/CanvasOps.h +54 −0 Original line number Original line Diff line number Diff line Loading @@ -111,6 +111,13 @@ struct CanvasOp<CanvasOpType::DrawColor> { ASSERT_DRAWABLE() ASSERT_DRAWABLE() }; }; template <> struct CanvasOp<CanvasOpType::DrawPaint> { SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawPaint(paint); } ASSERT_DRAWABLE() }; template <> template <> struct CanvasOp<CanvasOpType::DrawRect> { struct CanvasOp<CanvasOpType::DrawRect> { SkRect rect; SkRect rect; Loading @@ -119,6 +126,53 @@ struct CanvasOp<CanvasOpType::DrawRect> { ASSERT_DRAWABLE() ASSERT_DRAWABLE() }; }; template<> struct CanvasOp<CanvasOpType::DrawRoundRect> { SkRect rect; SkScalar rx; SkScalar ry; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawRoundRect(rect, rx, ry, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawCircle> { SkScalar cx; SkScalar cy; SkScalar radius; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawCircle(cx, cy, radius, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawOval> { SkRect oval; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawOval(oval, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawArc> { SkRect oval; SkScalar startAngle; SkScalar sweepAngle; bool useCenter; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawArc(oval, startAngle, sweepAngle, useCenter, paint); } ASSERT_DRAWABLE() }; // cleanup our macros // cleanup our macros #undef ASSERT_DRAWABLE #undef ASSERT_DRAWABLE Loading libs/hwui/tests/unit/CanvasOpTests.cpp +67 −0 Original line number Original line Diff line number Diff line Loading @@ -193,6 +193,73 @@ TEST(CanvasOp, simpleDrawRect) { EXPECT_EQ(1, canvas.sumTotalDrawCalls()); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } } TEST(CanvasOp, simpleDrawRoundRect) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawRoundRect> { .paint = SkPaint{}, .rect = SkRect::MakeEmpty(), .rx = 10, .ry = 10 }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawRRectCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawCircle) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawCircle> { .cx = 5, .cy = 7, .radius = 10, .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawOvalCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawOval) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawOval> { .oval = SkRect::MakeEmpty(), .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawOvalCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawArc) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawArc> { .oval = SkRect::MakeWH(100, 100), .startAngle = 120, .sweepAngle = 70, .useCenter = true, .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawArcCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, immediateRendering) { TEST(CanvasOp, immediateRendering) { auto canvas = std::make_shared<CallCountingCanvas>(); auto canvas = std::make_shared<CallCountingCanvas>(); Loading Loading
libs/hwui/canvas/CanvasOpTypes.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,12 @@ enum class CanvasOpType : int8_t { // Drawing ops // Drawing ops DrawColor, DrawColor, DrawRect, DrawRect, DrawRoundRect, DrawCircle, DrawOval, DrawArc, DrawPaint, // TODO: Rest // TODO: Rest Loading
libs/hwui/canvas/CanvasOps.h +54 −0 Original line number Original line Diff line number Diff line Loading @@ -111,6 +111,13 @@ struct CanvasOp<CanvasOpType::DrawColor> { ASSERT_DRAWABLE() ASSERT_DRAWABLE() }; }; template <> struct CanvasOp<CanvasOpType::DrawPaint> { SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawPaint(paint); } ASSERT_DRAWABLE() }; template <> template <> struct CanvasOp<CanvasOpType::DrawRect> { struct CanvasOp<CanvasOpType::DrawRect> { SkRect rect; SkRect rect; Loading @@ -119,6 +126,53 @@ struct CanvasOp<CanvasOpType::DrawRect> { ASSERT_DRAWABLE() ASSERT_DRAWABLE() }; }; template<> struct CanvasOp<CanvasOpType::DrawRoundRect> { SkRect rect; SkScalar rx; SkScalar ry; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawRoundRect(rect, rx, ry, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawCircle> { SkScalar cx; SkScalar cy; SkScalar radius; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawCircle(cx, cy, radius, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawOval> { SkRect oval; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawOval(oval, paint); } ASSERT_DRAWABLE() }; template<> struct CanvasOp<CanvasOpType::DrawArc> { SkRect oval; SkScalar startAngle; SkScalar sweepAngle; bool useCenter; SkPaint paint; void draw(SkCanvas* canvas) const { canvas->drawArc(oval, startAngle, sweepAngle, useCenter, paint); } ASSERT_DRAWABLE() }; // cleanup our macros // cleanup our macros #undef ASSERT_DRAWABLE #undef ASSERT_DRAWABLE Loading
libs/hwui/tests/unit/CanvasOpTests.cpp +67 −0 Original line number Original line Diff line number Diff line Loading @@ -193,6 +193,73 @@ TEST(CanvasOp, simpleDrawRect) { EXPECT_EQ(1, canvas.sumTotalDrawCalls()); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } } TEST(CanvasOp, simpleDrawRoundRect) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawRoundRect> { .paint = SkPaint{}, .rect = SkRect::MakeEmpty(), .rx = 10, .ry = 10 }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawRRectCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawCircle) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawCircle> { .cx = 5, .cy = 7, .radius = 10, .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawOvalCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawOval) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawOval> { .oval = SkRect::MakeEmpty(), .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawOvalCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, simpleDrawArc) { CanvasOpBuffer buffer; EXPECT_EQ(buffer.size(), 0); buffer.push(CanvasOp<Op::DrawArc> { .oval = SkRect::MakeWH(100, 100), .startAngle = 120, .sweepAngle = 70, .useCenter = true, .paint = SkPaint{} }); CallCountingCanvas canvas; EXPECT_EQ(0, canvas.sumTotalDrawCalls()); rasterizeCanvasBuffer(buffer, &canvas); EXPECT_EQ(1, canvas.drawArcCount); EXPECT_EQ(1, canvas.sumTotalDrawCalls()); } TEST(CanvasOp, immediateRendering) { TEST(CanvasOp, immediateRendering) { auto canvas = std::make_shared<CallCountingCanvas>(); auto canvas = std::make_shared<CallCountingCanvas>(); Loading