aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/DashBench.cpp
diff options
context:
space:
mode:
authorGravatar egdaniel <egdaniel@google.com>2014-06-04 08:15:31 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-06-04 08:15:31 -0700
commit05bb6f136d8d2b2d45a912cf967a09e4d42dd4d0 (patch)
tree30408fb20671d22caf7de14b3afecd8fff3019b3 /bench/DashBench.cpp
parent9b14f26d0f3a974f3dd626c8354e1db1cfcd322f (diff)
Add bench to measure drawing a dashed grid
BUG=skia: R=bsalomon@google.com Author: egdaniel@google.com Review URL: https://codereview.chromium.org/310083005
Diffstat (limited to 'bench/DashBench.cpp')
-rw-r--r--bench/DashBench.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/bench/DashBench.cpp b/bench/DashBench.cpp
index 35b72422aa..bbe9512245 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