aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar xidachen <xidachen@chromium.org>2016-05-05 13:24:04 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-05 13:24:04 -0700
commit6b27a5e7292d9a18e376f0c229ec62f7b801305a (patch)
tree90a0e806cc009fe277faacba9382efee856d974b
parent4e30f27164179d344f0c8efa9a691d1bc9a53e3f (diff)
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
-rw-r--r--bench/LineBench.cpp51
1 files changed, 39 insertions, 12 deletions
diff --git a/bench/LineBench.cpp b/bench/LineBench.cpp
index 67dc5648be..3127d4efec 100644
--- a/bench/LineBench.cpp
+++ b/bench/LineBench.cpp
@@ -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);)