Index: bench/DashBench.cpp |
diff --git a/bench/DashBench.cpp b/bench/DashBench.cpp |
index 35b72422aaaad617dc5c637c2e7d642231d2f315..bbe95122452afd534c6f4cbb301645a75b398d6c 100644 |
--- a/bench/DashBench.cpp |
+++ b/bench/DashBench.cpp |
@@ -373,6 +373,72 @@ private: |
typedef SkBenchmark INHERITED; |
}; |
+// Want to test how we draw a dashed grid (like what is used in spreadsheets) of many |
+// small dashed lines switching back and forth between horizontal and vertical |
+class DashGridBench : public SkBenchmark { |
+ SkString fName; |
+ int fStrokeWidth; |
+ bool fDoAA; |
+ |
+ SkAutoTUnref<SkPathEffect> fPathEffect; |
+ |
+public: |
+ DashGridBench(int dashLength, int strokeWidth, bool doAA) { |
+ fName.printf("dashgrid_%d_%d%s", dashLength, strokeWidth, doAA ? "_aa" : "_bw"); |
+ fStrokeWidth = strokeWidth; |
+ fDoAA = doAA; |
+ |
+ SkScalar vals[] = { SkIntToScalar(dashLength), SkIntToScalar(dashLength) }; |
+ fPathEffect.reset(SkDashPathEffect::Create(vals, 2, SK_Scalar1)); |
+ } |
+ |
+protected: |
+ virtual const char* onGetName() SK_OVERRIDE { |
+ return fName.c_str(); |
+ } |
+ |
+ virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
+ SkPaint p; |
+ this->setupPaint(&p); |
+ p.setColor(SK_ColorBLACK); |
+ p.setStyle(SkPaint::kStroke_Style); |
+ p.setStrokeWidth(SkIntToScalar(fStrokeWidth)); |
+ p.setPathEffect(fPathEffect); |
+ p.setAntiAlias(fDoAA); |
+ |
+ SkPoint pts[4] = { |
+ { SkIntToScalar(0), 20.5f }, |
+ { SkIntToScalar(20), 20.5f }, |
+ { 20.5f, SkIntToScalar(0) }, |
+ { 20.5f, SkIntToScalar(20) } |
+ }; |
+ |
+ for (int i = 0; i < loops; ++i) { |
+ for (int j = 0; j < 10; ++j) { |
+ for (int k = 0; k < 10; ++k) { |
+ // Horizontal line |
+ SkPoint horPts[2]; |
+ horPts[0].fX = pts[0].fX + k * 22.f; |
+ horPts[0].fY = pts[0].fY + j * 22.f; |
+ horPts[1].fX = pts[1].fX + k * 22.f; |
+ horPts[1].fY = pts[1].fY + j * 22.f; |
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, horPts, p); |
+ |
+ // Vertical line |
+ SkPoint vertPts[2]; |
+ vertPts[0].fX = pts[2].fX + k * 22.f; |
+ vertPts[0].fY = pts[2].fY + j * 22.f; |
+ vertPts[1].fX = pts[3].fX + k * 22.f; |
+ vertPts[1].fY = pts[3].fY + j * 22.f; |
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, vertPts, p); |
+ } |
+ } |
+ } |
+ } |
+ |
+private: |
+ typedef SkBenchmark INHERITED; |
+}; |
/////////////////////////////////////////////////////////////////////////////// |
@@ -415,4 +481,9 @@ DEF_BENCH( return new GiantDashBench(GiantDashBench::kDiag_LineType, 0); ) |
DEF_BENCH( return new GiantDashBench(GiantDashBench::kHori_LineType, 2); ) |
DEF_BENCH( return new GiantDashBench(GiantDashBench::kVert_LineType, 2); ) |
DEF_BENCH( return new GiantDashBench(GiantDashBench::kDiag_LineType, 2); ) |
+ |
+DEF_BENCH( return new DashGridBench(1, 1, true); ) |
+DEF_BENCH( return new DashGridBench(1, 1, false); ) |
+DEF_BENCH( return new DashGridBench(3, 1, true); ) |
+DEF_BENCH( return new DashGridBench(3, 1, false); ) |
#endif |