aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/HardStopGradientBench_SpecialHardStops.cpp
diff options
context:
space:
mode:
authorGravatar fmenozzi <fmenozzi@google.com>2016-08-03 12:12:19 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-03 12:12:19 -0700
commite57b8c9a790253df1e2f0663bf63f8d6e04227d1 (patch)
tree4474adc72cbec6f4e778b367ca015f9012624014 /bench/HardStopGradientBench_SpecialHardStops.cpp
parentdabd4f0b799318cb6e90b69ae1ec0ed0b6d32f60 (diff)
Add new benchmark for testing special hard stop gradient cases
Diffstat (limited to 'bench/HardStopGradientBench_SpecialHardStops.cpp')
-rw-r--r--bench/HardStopGradientBench_SpecialHardStops.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/bench/HardStopGradientBench_SpecialHardStops.cpp b/bench/HardStopGradientBench_SpecialHardStops.cpp
new file mode 100644
index 0000000000..0a9e23e81b
--- /dev/null
+++ b/bench/HardStopGradientBench_SpecialHardStops.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2016 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"
+
+#include "SkCanvas.h"
+#include "SkShader.h"
+#include "SkGradientShader.h"
+#include "SkString.h"
+#include "SkColor.h"
+#include "SkPaint.h"
+
+enum class Kind {
+ k001,
+ k011,
+ kCentered,
+};
+
+const char* kindstr(Kind k) {
+ switch (k) {
+ case Kind::k001:
+ return "001";
+ case Kind::k011:
+ return "011";
+ case Kind::kCentered:
+ return "centered";
+ default:
+ return "Invalid kind";
+ }
+}
+
+class HardStopGradientBench_SpecialHardStops : public Benchmark {
+public:
+ HardStopGradientBench_SpecialHardStops(int w, int h, Kind kind) {
+ fW = w;
+ fH = h;
+ fKind = kind;
+
+ fName.printf("hardstop_special_%03dx%03d_%s", fW, fH, kindstr(fKind));
+ }
+
+ const char* onGetName() override {
+ return fName.c_str();
+ }
+
+ SkIPoint onGetSize() override {
+ return SkIPoint::Make(fW, fH);
+ }
+
+ void onPreDraw(SkCanvas* canvas) override {
+ SkPoint points[2] = {
+ SkPoint::Make( 0.0f, fH/2.0f),
+ SkPoint::Make(fW+2.0f, fH/2.0f),
+ };
+
+ SkColor colors[4] = {
+ SK_ColorRED,
+ SK_ColorGREEN,
+ SK_ColorBLUE,
+ SK_ColorYELLOW,
+ };
+
+ SkScalar pos_001[3] = {
+ 0.0f,
+ 0.0f,
+ 1.0f,
+ };
+
+ SkScalar pos_011[3] = {
+ 0.0f,
+ 1.0f,
+ 1.0f,
+ };
+
+ SkScalar pos_centered[4] = {
+ 0.0f,
+ 0.5f,
+ 0.5f,
+ 1.0f,
+ };
+
+ SkScalar* positions = fKind == Kind::k001 ? pos_001 :
+ fKind == Kind::k011 ? pos_011 :
+ pos_centered;
+
+ int count = fKind == Kind::kCentered ? 4 : 3;
+
+ fPaint.setShader(SkGradientShader::MakeLinear(points,
+ colors,
+ positions,
+ count,
+ SkShader::kClamp_TileMode,
+ 0,
+ nullptr));
+ }
+
+ void onDraw(int loops, SkCanvas* canvas) override {
+ for (int i = 0; i < loops; i++) {
+ canvas->drawPaint(fPaint);
+ }
+ }
+
+private:
+ SkString fName;
+ int fW;
+ int fH;
+ Kind fKind;
+ SkPaint fPaint;
+};
+
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(100, 100, Kind::k001););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(200, 200, Kind::k001););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(300, 300, Kind::k001););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(400, 400, Kind::k001););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(500, 500, Kind::k001););
+
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(100, 100, Kind::k011););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(200, 200, Kind::k011););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(300, 300, Kind::k011););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(400, 400, Kind::k011););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(500, 500, Kind::k011););
+
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(100, 100, Kind::kCentered););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(200, 200, Kind::kCentered););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(300, 300, Kind::kCentered););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(400, 400, Kind::kCentered););
+DEF_BENCH(return new HardStopGradientBench_SpecialHardStops(500, 500, Kind::kCentered););