aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
Diffstat (limited to 'bench')
-rw-r--r--bench/PolyUtilsBench.cpp102
1 files changed, 19 insertions, 83 deletions
diff --git a/bench/PolyUtilsBench.cpp b/bench/PolyUtilsBench.cpp
index e03c51cf8d..1b987fa038 100644
--- a/bench/PolyUtilsBench.cpp
+++ b/bench/PolyUtilsBench.cpp
@@ -9,12 +9,12 @@
#include "SkPolyUtils.h"
class PolyUtilsBench : public Benchmark {
-public:
// Evaluate SkTriangulateSimplePolygon's performance (via derived classes) on:
// a non-self-intersecting star, a circle of tiny line segments and a self-intersecting star
- enum class Type { kConvexCheck, kSimpleCheck, kInsetConvex, kOffsetSimple, kTessellateSimple };
- PolyUtilsBench(Type type) : fType(type) {}
+ SkString fName;
+public:
+ PolyUtilsBench() {}
virtual void appendName(SkString*) = 0;
virtual void makePoly(SkTDArray<SkPoint>* poly) = 0;
@@ -24,84 +24,32 @@ protected:
const char* onGetName() override {
fName = "poly_utils_";
this->appendName(&fName);
- switch (fType) {
- case Type::kConvexCheck:
- fName.append("_c");
- break;
- case Type::kSimpleCheck:
- fName.append("_s");
- break;
- case Type::kInsetConvex:
- fName.append("_i");
- break;
- case Type::kOffsetSimple:
- fName.append("_o");
- break;
- case Type::kTessellateSimple:
- fName.append("_t");
- break;
- }
return fName.c_str();
}
void onDraw(int loops, SkCanvas* canvas) override {
SkTDArray<SkPoint> poly;
this->makePoly(&poly);
- switch (fType) {
- case Type::kConvexCheck:
- for (int i = 0; i < loops; i++) {
- (void)SkIsConvexPolygon(poly.begin(), poly.count());
- }
- break;
- case Type::kSimpleCheck:
- for (int i = 0; i < loops; i++) {
- (void)SkIsSimplePolygon(poly.begin(), poly.count());
- }
- break;
- case Type::kInsetConvex:
- if (SkIsConvexPolygon(poly.begin(), poly.count())) {
- SkTDArray<SkPoint> result;
- for (int i = 0; i < loops; i++) {
- (void)SkInsetConvexPolygon(poly.begin(), poly.count(), 10, &result);
- (void)SkInsetConvexPolygon(poly.begin(), poly.count(), 40, &result);
- }
- }
- break;
- case Type::kOffsetSimple:
- if (SkIsSimplePolygon(poly.begin(), poly.count())) {
- SkTDArray<SkPoint> result;
- for (int i = 0; i < loops; i++) {
- (void)SkOffsetSimplePolygon(poly.begin(), poly.count(), 10, &result);
- (void)SkOffsetSimplePolygon(poly.begin(), poly.count(), -10, &result);
- }
- }
- break;
- case Type::kTessellateSimple:
- if (SkIsSimplePolygon(poly.begin(), poly.count())) {
- SkAutoSTMalloc<64, uint16_t> indexMap(poly.count());
- for (int i = 0; i < poly.count(); ++i) {
- indexMap[i] = i;
- }
- SkTDArray<uint16_t> triangleIndices;
- for (int i = 0; i < loops; i++) {
- SkTriangulateSimplePolygon(poly.begin(), indexMap, poly.count(),
- &triangleIndices);
- }
- }
- break;
+ SkAutoSTMalloc<64, uint16_t> indexMap(poly.count());
+ for (int i = 0; i < poly.count(); ++i) {
+ indexMap[i] = i;
+ }
+ SkTDArray<uint16_t> triangleIndices;
+ for (int i = 0; i < loops; i++) {
+ if (SkIsSimplePolygon(poly.begin(), poly.count())) {
+ SkTriangulateSimplePolygon(poly.begin(), indexMap, poly.count(),
+ &triangleIndices);
+ }
}
}
private:
- SkString fName;
- Type fType;
-
typedef Benchmark INHERITED;
};
class StarPolyUtilsBench : public PolyUtilsBench {
public:
- StarPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {}
+ StarPolyUtilsBench() {}
void appendName(SkString* name) override {
name->append("star");
@@ -129,7 +77,7 @@ private:
class CirclePolyUtilsBench : public PolyUtilsBench {
public:
- CirclePolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {}
+ CirclePolyUtilsBench() {}
void appendName(SkString* name) override {
name->append("circle");
@@ -153,7 +101,7 @@ private:
class IntersectingPolyUtilsBench : public PolyUtilsBench {
public:
- IntersectingPolyUtilsBench(PolyUtilsBench::Type type) : INHERITED(type) {}
+ IntersectingPolyUtilsBench() {}
void appendName(SkString* name) override {
name->append("intersecting");
@@ -177,18 +125,6 @@ private:
typedef PolyUtilsBench INHERITED;
};
-DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);)
-DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);)
-DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);)
-DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);)
-DEF_BENCH(return new StarPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);)
-DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);)
-DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);)
-DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);)
-DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);)
-DEF_BENCH(return new CirclePolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);)
-DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kConvexCheck);)
-DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kSimpleCheck);)
-DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kInsetConvex);)
-DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kOffsetSimple);)
-DEF_BENCH(return new IntersectingPolyUtilsBench(PolyUtilsBench::Type::kTessellateSimple);)
+DEF_BENCH(return new StarPolyUtilsBench();)
+DEF_BENCH(return new CirclePolyUtilsBench();)
+DEF_BENCH(return new IntersectingPolyUtilsBench();)