Modify LineBench for drawing

Currently we only have benchmark for lines that contains randomly generated
points. This CL modifies the benchmark which adds cases of drawing straight
lines. Also, this CL changes the call from drawPoints() to drawLines()
which measures the performance of line drawing.

BUG=skia:5243
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1936153002

Review-Url: https://codereview.chromium.org/1936153002
This commit is contained in:
xidachen 2016-05-05 13:24:04 -07:00 committed by Commit bot
parent 4e30f27164
commit 6b27a5e729

View File

@ -21,19 +21,33 @@ class LineBench : public Benchmark {
bool fDoAA;
SkString fName;
enum {
PTS = 500,
LINES = 500,
};
SkPoint fPts[PTS];
SkPoint fStartPts[LINES];
SkPoint fEndPts[LINES];
public:
LineBench(SkScalar width, bool doAA) {
enum LineType {
SH, // Straight + horizontally
SV, // Straight + vertically
RAND,
};
LineBench(SkScalar width, bool doAA, LineType type) {
fStrokeWidth = width;
fDoAA = doAA;
fName.printf("lines_%g_%s", width, doAA ? "AA" : "BW");
fName.printf("lines_%g_%s_%s", width, doAA ? "AA" : "BW",
type == SH ? "SH" : (type == SV ? "SV" : "RAND"));
SkRandom rand;
for (int i = 0; i < PTS; ++i) {
fPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
for (int i = 0; i < LINES; ++i) {
fStartPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
if (type == SH) {
fEndPts[i].set(rand.nextUScalar1() * 640, fStartPts[i].y());
} else if (type == SV) {
fEndPts[i].set(fStartPts[i].x(), rand.nextUScalar1() * 480);
} else {
fEndPts[i].set(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
}
}
}
@ -51,7 +65,7 @@ protected:
paint.setStrokeWidth(fStrokeWidth);
for (int i = 0; i < loops; i++) {
canvas->drawPoints(SkCanvas::kLines_PointMode, PTS, fPts, paint);
canvas->drawLine(fStartPts[i].x(), fStartPts[i].y(), fEndPts[i].x(), fEndPts[i].y(), paint);
}
}
@ -59,8 +73,21 @@ private:
typedef Benchmark INHERITED;
};
DEF_BENCH(return new LineBench(0, false);)
DEF_BENCH(return new LineBench(SK_Scalar1, false);)
DEF_BENCH(return new LineBench(0, true);)
DEF_BENCH(return new LineBench(SK_Scalar1/2, true);)
DEF_BENCH(return new LineBench(SK_Scalar1, true);)
DEF_BENCH(return new LineBench(0, false, LineBench::SH);)
DEF_BENCH(return new LineBench(SK_Scalar1, false, LineBench::SH);)
DEF_BENCH(return new LineBench(0, true, LineBench::SH);)
DEF_BENCH(return new LineBench(SK_Scalar1/2, true, LineBench::SH);)
DEF_BENCH(return new LineBench(SK_Scalar1, true, LineBench::SH);)
DEF_BENCH(return new LineBench(SK_Scalar1*10,true, LineBench::SH);)
DEF_BENCH(return new LineBench(0, false, LineBench::SV);)
DEF_BENCH(return new LineBench(SK_Scalar1, false, LineBench::SV);)
DEF_BENCH(return new LineBench(0, true, LineBench::SV);)
DEF_BENCH(return new LineBench(SK_Scalar1/2, true, LineBench::SV);)
DEF_BENCH(return new LineBench(SK_Scalar1, true, LineBench::SV);)
DEF_BENCH(return new LineBench(SK_Scalar1*10,true, LineBench::SV);)
DEF_BENCH(return new LineBench(0, false, LineBench::RAND);)
DEF_BENCH(return new LineBench(SK_Scalar1, false, LineBench::RAND);)
DEF_BENCH(return new LineBench(0, true, LineBench::RAND);)
DEF_BENCH(return new LineBench(SK_Scalar1/2, true, LineBench::RAND);)
DEF_BENCH(return new LineBench(SK_Scalar1, true, LineBench::RAND);)
DEF_BENCH(return new LineBench(SK_Scalar1*10,true, LineBench::RAND);)