From 05bb6f136d8d2b2d45a912cf967a09e4d42dd4d0 Mon Sep 17 00:00:00 2001 From: egdaniel Date: Wed, 4 Jun 2014 08:15:31 -0700 Subject: 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 --- bench/DashBench.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'bench/DashBench.cpp') 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 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 -- cgit v1.2.3