diff options
author | Chris Dalton <csmartdalton@google.com> | 2018-04-18 14:10:22 -0600 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-19 20:15:24 +0000 |
commit | b3a6959408e177bc38b96cb29cfac692f876e100 (patch) | |
tree | 2045143c9070cf7c6e9248d95899b4deef96c9e9 /bench | |
parent | e68c4fbf601e38fdab1e0ab4093647d5538fff11 (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.cpp | 96 |
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 |