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
This commit is contained in:
egdaniel 2014-06-04 08:15:31 -07:00 committed by Commit bot
parent 9b14f26d0f
commit 05bb6f136d

View File

@ -373,6 +373,72 @@ private:
typedef SkBenchmark INHERITED; 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::kHori_LineType, 2); )
DEF_BENCH( return new GiantDashBench(GiantDashBench::kVert_LineType, 2); ) DEF_BENCH( return new GiantDashBench(GiantDashBench::kVert_LineType, 2); )
DEF_BENCH( return new GiantDashBench(GiantDashBench::kDiag_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 #endif