From 629ab540667422d3edcb97c51e9628b7051e1ba4 Mon Sep 17 00:00:00 2001 From: "robertphillips@google.com" Date: Wed, 28 Nov 2012 17:18:11 +0000 Subject: Added dashing fast path https://codereview.appspot.com/6844067/ git-svn-id: http://skia.googlecode.com/svn/trunk@6585 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/core/SkDraw.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/core/SkDraw.cpp') diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 3c1b72dde4..f4487af9c8 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -635,6 +635,39 @@ void SkDraw::drawPoints(SkCanvas::PointMode mode, size_t count, break; } case SkCanvas::kLines_PointMode: +#ifndef SK_DISABLE_DASHING_OPTIMIZATION + if (2 == count && NULL != paint.getPathEffect()) { + // most likely a dashed line - see if it is one of the ones + // we can accelerate + SkStrokeRec rec(paint); + SkPathEffect::PointData dst; + + SkPath path; + path.moveTo(pts[0]); + path.lineTo(pts[1]); + + if (paint.getPathEffect()->asPoints(&dst, path, rec, *fMatrix) && + SK_Scalar1 == dst.fSize.fX && SK_Scalar1 == dst.fSize.fY && + !(SkPathEffect::PointData::kUsePath_PointFlag & dst.fFlags)) { + SkPaint newP(paint); + newP.setPathEffect(NULL); + + if (SkPathEffect::PointData::kCircles_PointFlag & dst.fFlags) { + newP.setStrokeCap(SkPaint::kRound_Cap); + } else { + newP.setStrokeCap(SkPaint::kButt_Cap); + } + + this->drawPoints(SkCanvas::kPoints_PointMode, + dst.fPoints.count(), + dst.fPoints.begin(), + newP, + forceUseDevice); + break; + } + } +#endif // DISABLE_DASHING_OPTIMIZATION + // couldn't take fast path so fall through! case SkCanvas::kPolygon_PointMode: { count -= 1; SkPath path; -- cgit v1.2.3