1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2011 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/SkBitmap.h" 9cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 10cb93a386Sopenharmony_ci#include "include/core/SkColorPriv.h" 11cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 12cb93a386Sopenharmony_ci#include "include/core/SkShader.h" 13cb93a386Sopenharmony_ci#include "include/core/SkString.h" 14cb93a386Sopenharmony_ci#include "tools/ToolUtils.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_cistatic void draw_into_bitmap(const SkBitmap& bm) { 17cb93a386Sopenharmony_ci const int w = bm.width(); 18cb93a386Sopenharmony_ci const int h = bm.height(); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci SkCanvas canvas(bm); 21cb93a386Sopenharmony_ci SkPaint p; 22cb93a386Sopenharmony_ci p.setAntiAlias(true); 23cb93a386Sopenharmony_ci p.setColor(SK_ColorRED); 24cb93a386Sopenharmony_ci canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2, 25cb93a386Sopenharmony_ci SkIntToScalar(std::min(w, h))*3/8, p); 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci SkRect r; 28cb93a386Sopenharmony_ci r.setWH(SkIntToScalar(w), SkIntToScalar(h)); 29cb93a386Sopenharmony_ci p.setStyle(SkPaint::kStroke_Style); 30cb93a386Sopenharmony_ci p.setStrokeWidth(SkIntToScalar(4)); 31cb93a386Sopenharmony_ci p.setColor(SK_ColorBLUE); 32cb93a386Sopenharmony_ci canvas.drawRect(r, p); 33cb93a386Sopenharmony_ci} 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ciclass RepeatTileBench : public Benchmark { 36cb93a386Sopenharmony_ci const SkAlphaType fAlphaType; 37cb93a386Sopenharmony_ci SkPaint fPaint; 38cb93a386Sopenharmony_ci SkString fName; 39cb93a386Sopenharmony_ci SkBitmap fBitmap; 40cb93a386Sopenharmony_cipublic: 41cb93a386Sopenharmony_ci RepeatTileBench(SkColorType ct, SkAlphaType at = kPremul_SkAlphaType) : fAlphaType(at) { 42cb93a386Sopenharmony_ci const int w = 50; 43cb93a386Sopenharmony_ci const int h = 50; 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci fBitmap.setInfo(SkImageInfo::Make(w, h, ct, at)); 46cb93a386Sopenharmony_ci fName.printf("repeatTile_%s_%c", 47cb93a386Sopenharmony_ci ToolUtils::colortype_name(ct), 48cb93a386Sopenharmony_ci kOpaque_SkAlphaType == at ? 'X' : 'A'); 49cb93a386Sopenharmony_ci } 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ciprotected: 52cb93a386Sopenharmony_ci const char* onGetName() override { 53cb93a386Sopenharmony_ci return fName.c_str(); 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ci void onDelayedSetup() override { 57cb93a386Sopenharmony_ci fBitmap.allocPixels(); 58cb93a386Sopenharmony_ci fBitmap.eraseColor(kOpaque_SkAlphaType == fAlphaType ? SK_ColorWHITE : 0); 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci draw_into_bitmap(fBitmap); 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci fPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, 63cb93a386Sopenharmony_ci SkSamplingOptions())); 64cb93a386Sopenharmony_ci } 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas* canvas) override { 68cb93a386Sopenharmony_ci SkPaint paint(fPaint); 69cb93a386Sopenharmony_ci this->setupPaint(&paint); 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci for (int i = 0; i < loops; i++) { 72cb93a386Sopenharmony_ci canvas->drawPaint(paint); 73cb93a386Sopenharmony_ci } 74cb93a386Sopenharmony_ci } 75cb93a386Sopenharmony_ci 76cb93a386Sopenharmony_ciprivate: 77cb93a386Sopenharmony_ci using INHERITED = Benchmark; 78cb93a386Sopenharmony_ci}; 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ciDEF_BENCH(return new RepeatTileBench(kN32_SkColorType, kOpaque_SkAlphaType)) 81cb93a386Sopenharmony_ciDEF_BENCH(return new RepeatTileBench(kN32_SkColorType, kPremul_SkAlphaType)) 82cb93a386Sopenharmony_ciDEF_BENCH(return new RepeatTileBench(kRGB_565_SkColorType, kOpaque_SkAlphaType)) 83