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