1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com#include "SkCanvas.h" 10c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com#include "SkCommandLineFlags.h" 11bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com#include "SkPaint.h" 12bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com#include "SkRandom.h" 13981d4798007b91e2e19c13b171583927a56df63breed@google.com#include "SkShader.h" 14c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com#include "SkString.h" 15c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 16c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.comDEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench."); 17bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass RectBench : public Benchmark { 19bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.compublic: 202ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org int fShift, fStroke; 21bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com enum { 22bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com W = 640, 23bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com H = 480, 24c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com N = 300, 25bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com }; 26bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkRect fRects[N]; 27bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkColor fColors[N]; 28bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 29410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RectBench(int shift, int stroke = 0) 30410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : fShift(shift) 31000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org , fStroke(stroke) {} 321fcd51e6b2a210a37b9b9c2cfb82e1be7196e42areed@google.com 33d2c37448011f184c38b4650a657904af0a928f7ereed@android.com SkString fName; 34d2c37448011f184c38b4650a657904af0a928f7ereed@android.com const char* computeName(const char root[]) { 352ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org fName.printf("%s_%d", root, fShift); 362ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org if (fStroke > 0) { 372ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org fName.appendf("_stroke_%d", fStroke); 382ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org } 39d2c37448011f184c38b4650a657904af0a928f7ereed@android.com return fName.c_str(); 40d2c37448011f184c38b4650a657904af0a928f7ereed@android.com } 411fcd51e6b2a210a37b9b9c2cfb82e1be7196e42areed@google.com 422880df2609eba09b555ca37be04b6ad89290c765Tom Hudson bool isVisual() override { return true; } 432880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 44bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 45bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { 46bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawRect(r, p); 47bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 48bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 492880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { return computeName("rects"); } 50000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org 512880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void onDelayedSetup() override { 52000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org SkRandom rand; 53000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org const SkScalar offset = SK_Scalar1/3; 54000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org for (int i = 0; i < N; i++) { 55000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int x = rand.nextU() % W; 56000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int y = rand.nextU() % H; 57000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int w = rand.nextU() % W; 58000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int h = rand.nextU() % H; 59000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org w >>= fShift; 60000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org h >>= fShift; 61000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org x -= w/2; 62000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org y -= h/2; 63000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fRects[i].set(SkIntToScalar(x), SkIntToScalar(y), 64000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org SkIntToScalar(x+w), SkIntToScalar(y+h)); 65000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fRects[i].offset(offset, offset); 66000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fColors[i] = rand.nextU() | 0xFF808080; 67000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org } 68000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org } 69000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org 702880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void onDraw(int loops, SkCanvas* canvas) override { 71bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkPaint paint; 722ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org if (fStroke > 0) { 732ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 742ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(fStroke)); 752ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org } 763361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 77c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(fColors[i % N]); 784bc1983e01d756ae9c91fd380758457f579d26eareed@android.com this->setupPaint(&paint); 79c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->drawThisRect(canvas, fRects[i % N], paint); 80bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 81bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 82e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.comprivate: 83f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 84bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 85bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 862d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comclass SrcModeRectBench : public RectBench { 872d078b637a08d5d4298c50245d3b48950362e9cfreed@google.compublic: 88410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com SrcModeRectBench() : INHERITED(1, 0) { 892d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); 902d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 91884e60be30e20f38b3466a4697081187d2f1f814skia.committer@gmail.com 922d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com virtual ~SrcModeRectBench() { 932d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkSafeUnref(fMode); 942d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 952d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 962d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comprotected: 9736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void setupPaint(SkPaint* paint) override { 982d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com this->INHERITED::setupPaint(paint); 992d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com // srcmode is most interesting when we're not opaque 1002d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com paint->setAlpha(0x80); 1012d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com paint->setXfermode(fMode); 1022d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 1032d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 10436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 1052d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fName.set(this->INHERITED::onGetName()); 1062d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fName.prepend("srcmode_"); 1072d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com return fName.c_str(); 1082d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 1092d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1102d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comprivate: 1112d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkString fName; 1122d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkXfermode* fMode; 1132d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1142d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com typedef RectBench INHERITED; 1152d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com}; 1162d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1172880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonclass TransparentRectBench : public RectBench { 1182880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonpublic: 1192880df2609eba09b555ca37be04b6ad89290c765Tom Hudson TransparentRectBench() : INHERITED(1, 0) {} 1202880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 1212880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonprotected: 1222880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void setupPaint(SkPaint* paint) override { 1232880df2609eba09b555ca37be04b6ad89290c765Tom Hudson this->INHERITED::setupPaint(paint); 1242880df2609eba09b555ca37be04b6ad89290c765Tom Hudson // draw non opaque rect 1252880df2609eba09b555ca37be04b6ad89290c765Tom Hudson paint->setAlpha(0x80); 1262880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 1272880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 1282880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { 1292880df2609eba09b555ca37be04b6ad89290c765Tom Hudson fName.set(this->INHERITED::onGetName()); 1302880df2609eba09b555ca37be04b6ad89290c765Tom Hudson fName.prepend("transparent_"); 1312880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return fName.c_str(); 1322880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 1332880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 1342880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonprivate: 1352880df2609eba09b555ca37be04b6ad89290c765Tom Hudson SkString fName; 1362880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 1372880df2609eba09b555ca37be04b6ad89290c765Tom Hudson typedef RectBench INHERITED; 1382880df2609eba09b555ca37be04b6ad89290c765Tom Hudson}; 1392880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 1402880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 141bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass OvalBench : public RectBench { 142d2c37448011f184c38b4650a657904af0a928f7ereed@android.compublic: 143410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com OvalBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} 144bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 1452880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) override { 146bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawOval(r, p); 147bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 1482880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { return computeName("ovals"); } 149bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 150bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 151bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass RRectBench : public RectBench { 152d2c37448011f184c38b4650a657904af0a928f7ereed@android.compublic: 153410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RRectBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} 154bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 1552880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) override { 156bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawRoundRect(r, r.width() / 4, r.height() / 4, p); 157bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 1582880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { return computeName("rrects"); } 159bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 160bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 161bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass PointsBench : public RectBench { 162bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.compublic: 163bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkCanvas::PointMode fMode; 164bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com const char* fName; 165bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 166410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com PointsBench(SkCanvas::PointMode mode, const char* name) 167410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : RectBench(2) 168410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com , fMode(mode) { 169bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com fName = name; 170bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 171bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 172bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 1732880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void onDraw(int loops, SkCanvas* canvas) override { 174652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org SkScalar gSizes[] = { 175bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkIntToScalar(7), 0 176bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com }; 177652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org size_t sizes = SK_ARRAY_COUNT(gSizes); 178652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org 179c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com if (FLAGS_strokeWidth >= 0) { 180b87bf83f48e9424de6c3577e5578b3316cc88f8emtklein@google.com gSizes[0] = (SkScalar)FLAGS_strokeWidth; 181652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org sizes = 1; 182652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org } 183bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 184bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkPaint paint; 185bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com paint.setStrokeCap(SkPaint::kRound_Cap); 186652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org 1873361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int loop = 0; loop < loops; loop++) { 188c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (size_t i = 0; i < sizes; i++) { 189c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setStrokeWidth(gSizes[i]); 190c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->setupPaint(&paint); 191c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 192c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(fColors[i % N]); 193c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 194bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 195bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 1962880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { return fName; } 197bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 198bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 199981d4798007b91e2e19c13b171583927a56df63breed@google.com/******************************************************************************* 200981d4798007b91e2e19c13b171583927a56df63breed@google.com * to bench BlitMask [Opaque, Black, color, shader] 201981d4798007b91e2e19c13b171583927a56df63breed@google.com *******************************************************************************/ 202981d4798007b91e2e19c13b171583927a56df63breed@google.com 203981d4798007b91e2e19c13b171583927a56df63breed@google.comclass BlitMaskBench : public RectBench { 204981d4798007b91e2e19c13b171583927a56df63breed@google.compublic: 205981d4798007b91e2e19c13b171583927a56df63breed@google.com enum kMaskType { 206981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskOpaque = 0, 207981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskBlack, 208981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskColor, 209981d4798007b91e2e19c13b171583927a56df63breed@google.com KMaskShader 210981d4798007b91e2e19c13b171583927a56df63breed@google.com }; 211981d4798007b91e2e19c13b171583927a56df63breed@google.com SkCanvas::PointMode fMode; 212981d4798007b91e2e19c13b171583927a56df63breed@google.com const char* fName; 213981d4798007b91e2e19c13b171583927a56df63breed@google.com 214410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com BlitMaskBench(SkCanvas::PointMode mode, 215981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::kMaskType type, const char* name) : 216410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RectBench(2), fMode(mode), _type(type) { 217981d4798007b91e2e19c13b171583927a56df63breed@google.com fName = name; 218981d4798007b91e2e19c13b171583927a56df63breed@google.com } 219981d4798007b91e2e19c13b171583927a56df63breed@google.com 220981d4798007b91e2e19c13b171583927a56df63breed@google.comprotected: 2212880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void onDraw(int loops, SkCanvas* canvas) override { 222981d4798007b91e2e19c13b171583927a56df63breed@google.com SkScalar gSizes[] = { 223981d4798007b91e2e19c13b171583927a56df63breed@google.com SkIntToScalar(13), SkIntToScalar(24) 224981d4798007b91e2e19c13b171583927a56df63breed@google.com }; 225981d4798007b91e2e19c13b171583927a56df63breed@google.com size_t sizes = SK_ARRAY_COUNT(gSizes); 226981d4798007b91e2e19c13b171583927a56df63breed@google.com 227c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com if (FLAGS_strokeWidth >= 0) { 228b87bf83f48e9424de6c3577e5578b3316cc88f8emtklein@google.com gSizes[0] = (SkScalar)FLAGS_strokeWidth; 229981d4798007b91e2e19c13b171583927a56df63breed@google.com sizes = 1; 230981d4798007b91e2e19c13b171583927a56df63breed@google.com } 231e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 232981d4798007b91e2e19c13b171583927a56df63breed@google.com SkColor color = 0xFF000000; 233981d4798007b91e2e19c13b171583927a56df63breed@google.com U8CPU alpha = 0xFF; 234981d4798007b91e2e19c13b171583927a56df63breed@google.com SkPaint paint; 235981d4798007b91e2e19c13b171583927a56df63breed@google.com paint.setStrokeCap(SkPaint::kRound_Cap); 236981d4798007b91e2e19c13b171583927a56df63breed@google.com if (_type == KMaskShader) { 237981d4798007b91e2e19c13b171583927a56df63breed@google.com SkBitmap srcBM; 2386c22573edb234ad14df947278cfed010669a39a7reed srcBM.allocN32Pixels(10, 1); 239981d4798007b91e2e19c13b171583927a56df63breed@google.com srcBM.eraseColor(0xFF00FF00); 240981d4798007b91e2e19c13b171583927a56df63breed@google.com 241981d4798007b91e2e19c13b171583927a56df63breed@google.com SkShader* s; 242981d4798007b91e2e19c13b171583927a56df63breed@google.com s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode, 243981d4798007b91e2e19c13b171583927a56df63breed@google.com SkShader::kClamp_TileMode); 244981d4798007b91e2e19c13b171583927a56df63breed@google.com paint.setShader(s)->unref(); 245981d4798007b91e2e19c13b171583927a56df63breed@google.com } 2463361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int loop = 0; loop < loops; loop++) { 247c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (size_t i = 0; i < sizes; i++) { 248c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com switch (_type) { 249c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskOpaque: 250c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = fColors[i]; 251c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = 0xFF; 252c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 253c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskBlack: 254c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = 0xFF; 255c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = 0xFF000000; 256c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 257c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskColor: 258c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = fColors[i]; 259c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = rand.nextU() & 255; 260c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 261c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case KMaskShader: 262c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 263c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 264c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setStrokeWidth(gSizes[i]); 265c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->setupPaint(&paint); 266c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(color); 267c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setAlpha(alpha); 268c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 269c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 270c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 271981d4798007b91e2e19c13b171583927a56df63breed@google.com } 2722880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const char* onGetName() override { return fName; } 273981d4798007b91e2e19c13b171583927a56df63breed@google.comprivate: 274fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com typedef RectBench INHERITED; 275fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com kMaskType _type; 276981d4798007b91e2e19c13b171583927a56df63breed@google.com}; 277981d4798007b91e2e19c13b171583927a56df63breed@google.com 2782880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RectBench(1);) 2792880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RectBench(1, 4);) 2802880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RectBench(3);) 2812880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RectBench(3, 4);) 2822880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new OvalBench(1);) 2832880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new OvalBench(3);) 2842880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new OvalBench(1, 4);) 2852880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new OvalBench(3, 4);) 2862880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RRectBench(1);) 2872880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RRectBench(1, 4);) 2882880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RRectBench(3);) 2892880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new RRectBench(3, 4);) 2902880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new PointsBench(SkCanvas::kPoints_PointMode, "points");) 2912880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new PointsBench(SkCanvas::kLines_PointMode, "lines");) 2922880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new PointsBench(SkCanvas::kPolygon_PointMode, "polygon");) 2932880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 2942880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new SrcModeRectBench();) 2952880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 2962880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new TransparentRectBench();) 2978db65a6d0c60d0e31eadc64d427f6e7f050e1140joshualitt 298981d4798007b91e2e19c13b171583927a56df63breed@google.com/* init the blitmask bench 299981d4798007b91e2e19c13b171583927a56df63breed@google.com */ 3002880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, 3012880df2609eba09b555ca37be04b6ad89290c765Tom Hudson BlitMaskBench::kMaskOpaque, 3022880df2609eba09b555ca37be04b6ad89290c765Tom Hudson "maskopaque");) 3032880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, 3042880df2609eba09b555ca37be04b6ad89290c765Tom Hudson BlitMaskBench::kMaskBlack, 3052880df2609eba09b555ca37be04b6ad89290c765Tom Hudson "maskblack");) 3062880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, 3072880df2609eba09b555ca37be04b6ad89290c765Tom Hudson BlitMaskBench::kMaskColor, 3082880df2609eba09b555ca37be04b6ad89290c765Tom Hudson "maskcolor");) 3092880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, 3102880df2609eba09b555ca37be04b6ad89290c765Tom Hudson BlitMaskBench::KMaskShader, 3112880df2609eba09b555ca37be04b6ad89290c765Tom Hudson "maskshader");) 312