123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- * 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 "bench/Benchmark.h"
- #include "include/core/SkCanvas.h"
- #include "include/core/SkColor.h"
- #include "include/core/SkPaint.h"
- #include "include/core/SkShader.h"
- #include "include/core/SkString.h"
- #include "include/effects/SkGradientShader.h"
- static const char* get_tilemode_name(SkTileMode tilemode) {
- switch (tilemode) {
- case SkTileMode::kClamp:
- return "clamp";
- case SkTileMode::kRepeat:
- return "repeat";
- case SkTileMode::kMirror:
- return "mirror";
- case SkTileMode::kDecal:
- return "decal";
- }
- return "";
- }
- class HardStopGradientBench_ScaleNumColors : public Benchmark {
- public:
- HardStopGradientBench_ScaleNumColors(SkTileMode tilemode, int count) {
- fName.printf("hardstop_scale_num_colors_%s_%03d_colors", get_tilemode_name(tilemode), count);
- fTileMode = tilemode;
- fColorCount = count;
- }
- const char* onGetName() override {
- return fName.c_str();
- }
- SkIPoint onGetSize() override {
- return SkIPoint::Make(kSize, kSize);
- }
- /*
- * Set up a linear gradient from left to right with
- * fColorCount colors alternating between four
- * different colors. The positions are evenly spaced,
- * with the exception of the first two; these create a
- * hard stop in order to trigger the hard stop code.
- */
- 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
- SkColor colors[100];
- for (int i = 0; i < fColorCount; i++) {
- colors[i] = color_choices[i % kNumColorChoices];
- }
- // Create a hard stop
- SkScalar positions[100];
- positions[0] = 0.0f;
- positions[1] = 0.0f;
- for (int i = 2; i < fColorCount; i++) {
- // Evenly spaced afterwards
- positions[i] = i / (fColorCount - 1.0f);
- }
- fPaint.setShader(SkGradientShader::MakeLinear(points,
- colors,
- positions,
- fColorCount,
- fTileMode,
- 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;
- SkTileMode fTileMode;
- SkString fName;
- int fColorCount;
- SkPaint fPaint;
- typedef Benchmark INHERITED;
- };
- // Clamp
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 3);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 4);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 5);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 10);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 25);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 50);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kClamp, 100);)
- // Repeat
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 3);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 4);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 5);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 10);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 25);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 50);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kRepeat, 100);)
- // Mirror
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 3);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 4);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 5);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 10);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 25);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 50);)
- DEF_BENCH(return new HardStopGradientBench_ScaleNumColors(SkTileMode::kMirror, 100);)
|