xref: /aosp_15_r20/external/skia/bench/PerlinNoiseBench.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2013 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker #include "bench/Benchmark.h"
8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkPerlinNoiseShader.h"
11*c8dee2aaSAndroid Build Coastguard Worker 
12*c8dee2aaSAndroid Build Coastguard Worker class PerlinNoiseBench : public Benchmark {
13*c8dee2aaSAndroid Build Coastguard Worker     SkISize fSize;
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker public:
PerlinNoiseBench()16*c8dee2aaSAndroid Build Coastguard Worker     PerlinNoiseBench()  {
17*c8dee2aaSAndroid Build Coastguard Worker         fSize = SkISize::Make(80, 80);
18*c8dee2aaSAndroid Build Coastguard Worker     }
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker protected:
onGetName()21*c8dee2aaSAndroid Build Coastguard Worker     const char* onGetName() override {
22*c8dee2aaSAndroid Build Coastguard Worker         return "perlinnoise";
23*c8dee2aaSAndroid Build Coastguard Worker     }
24*c8dee2aaSAndroid Build Coastguard Worker 
onDraw(int loops,SkCanvas * canvas)25*c8dee2aaSAndroid Build Coastguard Worker     void onDraw(int loops, SkCanvas* canvas) override {
26*c8dee2aaSAndroid Build Coastguard Worker         this->test(loops, canvas, 0, 0, 0.1f, 0.1f, 3, 0, false);
27*c8dee2aaSAndroid Build Coastguard Worker     }
28*c8dee2aaSAndroid Build Coastguard Worker 
29*c8dee2aaSAndroid Build Coastguard Worker private:
drawClippedRect(SkCanvas * canvas,int x,int y,const SkPaint & paint)30*c8dee2aaSAndroid Build Coastguard Worker     void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
31*c8dee2aaSAndroid Build Coastguard Worker         canvas->save();
32*c8dee2aaSAndroid Build Coastguard Worker         canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
33*c8dee2aaSAndroid Build Coastguard Worker                          SkIntToScalar(fSize.width()), SkIntToScalar(fSize.height())));
34*c8dee2aaSAndroid Build Coastguard Worker         SkRect r = SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
35*c8dee2aaSAndroid Build Coastguard Worker                                     SkIntToScalar(fSize.width()),
36*c8dee2aaSAndroid Build Coastguard Worker                                     SkIntToScalar(fSize.height()));
37*c8dee2aaSAndroid Build Coastguard Worker         canvas->drawRect(r, paint);
38*c8dee2aaSAndroid Build Coastguard Worker         canvas->restore();
39*c8dee2aaSAndroid Build Coastguard Worker     }
40*c8dee2aaSAndroid Build Coastguard Worker 
test(int loops,SkCanvas * canvas,int x,int y,float baseFrequencyX,float baseFrequencyY,int numOctaves,float seed,bool stitchTiles)41*c8dee2aaSAndroid Build Coastguard Worker     void test(int loops, SkCanvas* canvas, int x, int y,
42*c8dee2aaSAndroid Build Coastguard Worker               float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed,
43*c8dee2aaSAndroid Build Coastguard Worker               bool stitchTiles) {
44*c8dee2aaSAndroid Build Coastguard Worker         SkPaint paint;
45*c8dee2aaSAndroid Build Coastguard Worker         paint.setShader(SkShaders::MakeFractalNoise(
46*c8dee2aaSAndroid Build Coastguard Worker                 baseFrequencyX, baseFrequencyY, numOctaves, seed, stitchTiles ? &fSize : nullptr));
47*c8dee2aaSAndroid Build Coastguard Worker         for (int i = 0; i < loops; i++) {
48*c8dee2aaSAndroid Build Coastguard Worker             this->drawClippedRect(canvas, x, y, paint);
49*c8dee2aaSAndroid Build Coastguard Worker         }
50*c8dee2aaSAndroid Build Coastguard Worker     }
51*c8dee2aaSAndroid Build Coastguard Worker 
52*c8dee2aaSAndroid Build Coastguard Worker     using INHERITED = Benchmark;
53*c8dee2aaSAndroid Build Coastguard Worker };
54*c8dee2aaSAndroid Build Coastguard Worker 
55*c8dee2aaSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
56*c8dee2aaSAndroid Build Coastguard Worker 
57*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH( return new PerlinNoiseBench(); )
58