123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * 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"
- 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,
- SkTileMode::kClamp,
- 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););
|