aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2018-04-18 14:10:22 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-19 20:15:24 +0000
commitb3a6959408e177bc38b96cb29cfac692f876e100 (patch)
tree2045143c9070cf7c6e9248d95899b4deef96c9e9 /bench
parente68c4fbf601e38fdab1e0ab4093647d5538fff11 (diff)
ccpr: Clean up GrCCGeometry
Gets rid of the ugly template functions, rearranges a few static methods, and adds a benchmark. Bug: skia: Change-Id: I442f3a581ba7faf7601ae5be0c7e07327df09496 Reviewed-on: https://skia-review.googlesource.com/122128 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'bench')
-rw-r--r--bench/GrCCGeometryBench.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/bench/GrCCGeometryBench.cpp b/bench/GrCCGeometryBench.cpp
new file mode 100644
index 0000000000..5e47df042c
--- /dev/null
+++ b/bench/GrCCGeometryBench.cpp
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "Benchmark.h"
+
+#if SK_SUPPORT_GPU
+
+#include "ccpr/GrCCGeometry.h"
+#include "SkGeometry.h"
+
+static int kNumBaseLoops = 50000;
+
+class GrCCGeometryBench : public Benchmark {
+public:
+ GrCCGeometryBench(float x0, float y0, float x1, float y1,
+ float x2, float y2, float x3, float y3, const char* extraName) {
+ fPoints[0].set(x0, y0);
+ fPoints[1].set(x1, y1);
+ fPoints[2].set(x2, y2);
+ fPoints[3].set(x3, y3);
+
+ fName = "ccprgeometry";
+ switch (SkClassifyCubic(fPoints)) {
+ case SkCubicType::kSerpentine:
+ fName.append("_serp");
+ break;
+ case SkCubicType::kLoop:
+ fName.append("_loop");
+ break;
+ default:
+ SK_ABORT("Unexpected cubic type");
+ break;
+ }
+
+ fName.appendf("_%s", extraName);
+ }
+
+ bool isSuitableFor(Backend backend) override {
+ return backend == kNonRendering_Backend;
+ }
+
+ const char* onGetName() override {
+ return fName.c_str();
+ }
+
+ void onDraw(int loops, SkCanvas*) override {
+ for (int j = 0; j < loops; ++j) {
+ fGeometry.beginContour(fPoints[0]);
+ for (int i = 0; i < kNumBaseLoops; ++i) {
+ fGeometry.cubicTo(fPoints);
+ fGeometry.lineTo(fPoints[0]);
+ }
+ fGeometry.endContour();
+ fGeometry.reset();
+ }
+ }
+
+private:
+ SkPoint fPoints[4];
+ SkString fName;
+ GrCCGeometry fGeometry{4*100*kNumBaseLoops, 2*100*kNumBaseLoops};
+
+ typedef Benchmark INHERITED;
+};
+
+// Loops.
+DEF_BENCH( return new GrCCGeometryBench(529.049988f, 637.050049f, 335.750000f, -135.950012f,
+ 912.750000f, 560.949951f, 59.049988f, 295.950012f,
+ "2_roots"); )
+
+DEF_BENCH( return new GrCCGeometryBench(182.050003f, 300.049988f, 490.750000f, 111.049988f,
+ 482.750000f, 500.950012f, 451.049988f, 553.950012f,
+ "1_root"); )
+
+DEF_BENCH( return new GrCCGeometryBench(498.049988f, 476.049988f, 330.750000f, 330.049988f,
+ 222.750000f, 389.950012f, 169.049988f, 542.950012f,
+ "0_roots"); )
+
+// Serpentines.
+DEF_BENCH( return new GrCCGeometryBench(529.049988f, 714.049988f, 315.750000f, 196.049988f,
+ 484.750000f, 110.950012f, 349.049988f, 630.950012f,
+ "2_roots"); )
+
+DEF_BENCH( return new GrCCGeometryBench(513.049988f, 245.049988f, 73.750000f, 137.049988f,
+ 508.750000f, 657.950012f, 99.049988f, 601.950012f,
+ "1_root"); )
+
+DEF_BENCH( return new GrCCGeometryBench(560.049988f, 364.049988f, 217.750000f, 314.049988f,
+ 21.750000f, 364.950012f, 83.049988f, 624.950012f,
+ "0_roots"); )
+
+#endif