From 17e829794db9621879baf2e90856a72b17eaf7dc Mon Sep 17 00:00:00 2001 From: fmenozzi Date: Thu, 28 Jul 2016 10:59:49 -0700 Subject: Add HardStopGradientBench_ScaleNumHardStops.cpp Rename HardStopGradientBench.cpp to HardStopGradientBench_ScaleNumColors.cpp BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2178913003 Review-Url: https://codereview.chromium.org/2178913003 --- bench/HardStopGradientBench_ScaleNumHardStops.cpp | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 bench/HardStopGradientBench_ScaleNumHardStops.cpp (limited to 'bench/HardStopGradientBench_ScaleNumHardStops.cpp') diff --git a/bench/HardStopGradientBench_ScaleNumHardStops.cpp b/bench/HardStopGradientBench_ScaleNumHardStops.cpp new file mode 100644 index 0000000000..2b8b55e67a --- /dev/null +++ b/bench/HardStopGradientBench_ScaleNumHardStops.cpp @@ -0,0 +1,114 @@ +/* + * 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" + +class HardStopGradientBench_ScaleNumHardStops : public Benchmark { +public: + HardStopGradientBench_ScaleNumHardStops(int colorCount, int hardStopCount) { + SkASSERT(hardStopCount <= colorCount/2); + + fName.printf("hardstop_scale_num_hard_stops_%03d_colors_%03d_hard_stops", + colorCount, hardStopCount); + + fColorCount = colorCount; + fHardStopCount = hardStopCount; + } + + const char* onGetName() override { + return fName.c_str(); + } + + SkIPoint onGetSize() override { + return SkIPoint::Make(kSize, kSize); + } + + void onPreDraw(SkCanvas* canvas) override { + // Left to right + SkPoint points[2] = { + SkPoint::Make(0, kSize/2), + SkPoint::Make(kSize-1, kSize/2), + }; + + constexpr int kNumColorChoices = 4; + SkColor color_choices[kNumColorChoices] = { + SK_ColorRED, + SK_ColorGREEN, + SK_ColorBLUE, + SK_ColorYELLOW, + }; + + // Alternate between different choices + SkAutoTArray colors(fColorCount); + for (int i = 0; i < fColorCount; i++) { + colors[i] = color_choices[i % kNumColorChoices]; + } + + // Create requisite number of hard stops, and evenly + // space positions after that + SkAutoTArray positions(fColorCount); + int k = 0; + for (int i = 0; i < fHardStopCount; i++) { + float val = k/2.0f; + positions[k++] = val / fColorCount; + positions[k++] = val / fColorCount; + } + for (int i = k; i < fColorCount; i++) { + positions[i] = i / (fColorCount - 1.0f); + } + + fPaint.setShader(SkGradientShader::MakeLinear(points, + colors.get(), + positions.get(), + fColorCount, + SkShader::kClamp_TileMode, + 0, + nullptr)); + } + + /* + * Draw simple linear gradient from left to right + */ + void onDraw(int loops, SkCanvas* canvas) override { + for (int i = 0; i < loops; i++) { + canvas->drawPaint(fPaint); + } + } + +private: + static const int kSize = 500; + + SkString fName; + int fColorCount; + int fHardStopCount; + SkPaint fPaint; + + typedef Benchmark INHERITED; +}; + +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(10, 1);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(10, 2);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(10, 5);) + +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(20, 1);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(20, 5);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(20, 10);) + +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(50, 1);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(50, 10);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(50, 25);) + +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(100, 1);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(100, 25);) +DEF_BENCH(return new HardStopGradientBench_ScaleNumHardStops(100, 50);) -- cgit v1.2.3