Added dashing fast path
https://codereview.appspot.com/6844067/
git-svn-id: http://skia.googlecode.com/svn/trunk@6585 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 3c1b72d..f4487af 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -635,6 +635,39 @@
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;