aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-07-18 21:27:57 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-18 21:28:02 +0000
commite9dd316a0000a0b2a0812701d80775c30c8eb8cc (patch)
tree01f5319306639afa21c32e780da57b01e2369a95 /bench
parent7c0998a130b5b1a64811defd17ab3266985515f4 (diff)
Revert "Reland "Add some optimizations to PolyUtils""
This reverts commit 946c37057f2618af7eda34fd6d2dd8625a9e9b61. Reason for revert: strict weak ordering: ((__x LT __y) && (__y LT __x)) != false Original change's description: > Reland "Add some optimizations to PolyUtils" > > This is a reland of 8bb0db3d07450880d346d808018708416c928657 > > Original change's description: > > Add some optimizations to PolyUtils > > > > * Switch inset/offset code to use a linked list rather than an array > > * Use std::set to store active edge list for IsSimplePolygon rather than array > > * Pre-alloc the priority queue for IsSimplePolygon > > * When adding radial curves, expand the array all at once rather than pushing > > one at a time. > > > > Bug: skia: > > Change-Id: I692f8c29c500c41ec1d1be39d924d8a752676bf4 > > Reviewed-on: https://skia-review.googlesource.com/140787 > > Reviewed-by: Robert Phillips <robertphillips@google.com> > > Commit-Queue: Jim Van Verth <jvanverth@google.com> > > Bug: skia: > Change-Id: I3f5d42cfb941deab2b28bed020b37ce199e91d3d > Reviewed-on: https://skia-review.googlesource.com/142200 > Reviewed-by: Robert Phillips <robertphillips@google.com> > Commit-Queue: Jim Van Verth <jvanverth@google.com> TBR=jvanverth@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: Ie8cdf2375613c51dedaf0d11125d6d22d88821df No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/142281 Reviewed-by: Ben Wagner <bungeman@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
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();)