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 42bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 43bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { 44bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawRect(r, p); 45bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 46bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 474bc1983e01d756ae9c91fd380758457f579d26eareed@android.com virtual const char* onGetName() { return computeName("rects"); } 48000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org 49000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org virtual void onPreDraw() { 50000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org SkRandom rand; 51000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org const SkScalar offset = SK_Scalar1/3; 52000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org for (int i = 0; i < N; i++) { 53000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int x = rand.nextU() % W; 54000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int y = rand.nextU() % H; 55000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int w = rand.nextU() % W; 56000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org int h = rand.nextU() % H; 57000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org w >>= fShift; 58000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org h >>= fShift; 59000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org x -= w/2; 60000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org y -= h/2; 61000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fRects[i].set(SkIntToScalar(x), SkIntToScalar(y), 62000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org SkIntToScalar(x+w), SkIntToScalar(y+h)); 63000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fRects[i].offset(offset, offset); 64000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org fColors[i] = rand.nextU() | 0xFF808080; 65000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org } 66000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org } 67000d732ca70391aa7196efdbaf9992a96ff2fc99commit-bot@chromium.org 683361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 69bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkPaint paint; 702ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org if (fStroke > 0) { 712ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 722ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(fStroke)); 732ecead560421447acaf6ef6f1e8ba9da313b29d5mike@reedtribe.org } 743361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 75c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(fColors[i % N]); 764bc1983e01d756ae9c91fd380758457f579d26eareed@android.com this->setupPaint(&paint); 77c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->drawThisRect(canvas, fRects[i % N], paint); 78bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 79bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 80e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.comprivate: 81f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 82bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 83bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 842d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comclass SrcModeRectBench : public RectBench { 852d078b637a08d5d4298c50245d3b48950362e9cfreed@google.compublic: 86410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com SrcModeRectBench() : INHERITED(1, 0) { 872d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); 882d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 89884e60be30e20f38b3466a4697081187d2f1f814skia.committer@gmail.com 902d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com virtual ~SrcModeRectBench() { 912d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkSafeUnref(fMode); 922d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 932d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 942d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comprotected: 952d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com virtual void setupPaint(SkPaint* paint) SK_OVERRIDE { 962d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com this->INHERITED::setupPaint(paint); 972d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com // srcmode is most interesting when we're not opaque 982d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com paint->setAlpha(0x80); 992d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com paint->setXfermode(fMode); 1002d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 1012d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1022d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com virtual const char* onGetName() SK_OVERRIDE { 1032d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fName.set(this->INHERITED::onGetName()); 1042d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com fName.prepend("srcmode_"); 1052d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com return fName.c_str(); 1062d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com } 1072d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1082d078b637a08d5d4298c50245d3b48950362e9cfreed@google.comprivate: 1092d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkString fName; 1102d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com SkXfermode* fMode; 1112d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 1122d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com typedef RectBench INHERITED; 1132d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com}; 1142d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 115bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass OvalBench : public RectBench { 116d2c37448011f184c38b4650a657904af0a928f7ereed@android.compublic: 117410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com OvalBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} 118bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 119bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { 120bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawOval(r, p); 121bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 122d2c37448011f184c38b4650a657904af0a928f7ereed@android.com virtual const char* onGetName() { return computeName("ovals"); } 123bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 124bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 125bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass RRectBench : public RectBench { 126d2c37448011f184c38b4650a657904af0a928f7ereed@android.compublic: 127410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RRectBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} 128bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 129bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { 130bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com c->drawRoundRect(r, r.width() / 4, r.height() / 4, p); 131bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 1324bc1983e01d756ae9c91fd380758457f579d26eareed@android.com virtual const char* onGetName() { return computeName("rrects"); } 133bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 134bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 135bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comclass PointsBench : public RectBench { 136bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.compublic: 137bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkCanvas::PointMode fMode; 138bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com const char* fName; 139bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 140410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com PointsBench(SkCanvas::PointMode mode, const char* name) 141410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : RectBench(2) 142410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com , fMode(mode) { 143bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com fName = name; 144bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 145bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 146bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.comprotected: 1473361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 148652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org SkScalar gSizes[] = { 149bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkIntToScalar(7), 0 150bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com }; 151652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org size_t sizes = SK_ARRAY_COUNT(gSizes); 152652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org 153c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com if (FLAGS_strokeWidth >= 0) { 154b87bf83f48e9424de6c3577e5578b3316cc88f8emtklein@google.com gSizes[0] = (SkScalar)FLAGS_strokeWidth; 155652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org sizes = 1; 156652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org } 157bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 158bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com SkPaint paint; 159bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com paint.setStrokeCap(SkPaint::kRound_Cap); 160652807bbc8c57e5fa9622126b51fd369f5c67935agl@chromium.org 1613361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int loop = 0; loop < loops; loop++) { 162c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (size_t i = 0; i < sizes; i++) { 163c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setStrokeWidth(gSizes[i]); 164c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->setupPaint(&paint); 165c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 166c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(fColors[i % N]); 167c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 168bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 169bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com } 170bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com virtual const char* onGetName() { return fName; } 171bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com}; 172bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 173f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass AARectBench : public Benchmark { 17412310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.compublic: 17512310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com enum { 17612310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com W = 640, 17712310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com H = 480, 17812310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com }; 17912310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 180410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com AARectBench(bool rotate) : fRotate(rotate) {} 18112310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 18212310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.comprotected: 18312310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 1842fd42c471c77f54ace35c13975651e17d5b2e8c6skia.committer@gmail.com virtual const char* onGetName() { 185370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com if (fRotate) { 1862fd42c471c77f54ace35c13975651e17d5b2e8c6skia.committer@gmail.com return "aarects_rotated"; 187370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com } 1882fd42c471c77f54ace35c13975651e17d5b2e8c6skia.committer@gmail.com return "aarects"; 189370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com } 19012310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 1913361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 1924b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org static const SkScalar kHalfRectSize = 0.75f; 193370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com 19412310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com SkPaint paint; 19512310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com this->setupPaint(&paint); 19612310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com paint.setAntiAlias(true); 19712310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com paint.setColor(SK_ColorBLACK); 198370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com SkRect r = { -kHalfRectSize, -kHalfRectSize, kHalfRectSize, kHalfRectSize }; 199370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com int rot = 0; 20012310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 2013361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 202c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com // Draw small aa rects in a grid across the screen 203c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (SkScalar y = kHalfRectSize+SK_Scalar1; y < H; y += 2*kHalfRectSize+2) { 204c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (SkScalar x = kHalfRectSize+SK_Scalar1; x < W; x += 2*kHalfRectSize+2) { 205c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->save(); 206c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->translate(x, y); 207c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 208c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com if (fRotate) { 209c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkMatrix rotate; 210c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com rotate.setRotate(SkIntToScalar(rot)); 211c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->concat(rotate); 212c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com rot += 10; 213c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 214c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 215c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawRect(r, paint); 216c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->restore(); 217370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com } 21812310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com } 21912310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com } 22012310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 22112310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com } 22212310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.comprivate: 223370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com bool fRotate; 224f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 22512310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com}; 22612310e42f1798ba7caf8038c2088be16727b0355robertphillips@google.com 227981d4798007b91e2e19c13b171583927a56df63breed@google.com/******************************************************************************* 228981d4798007b91e2e19c13b171583927a56df63breed@google.com * to bench BlitMask [Opaque, Black, color, shader] 229981d4798007b91e2e19c13b171583927a56df63breed@google.com *******************************************************************************/ 230981d4798007b91e2e19c13b171583927a56df63breed@google.com 231981d4798007b91e2e19c13b171583927a56df63breed@google.comclass BlitMaskBench : public RectBench { 232981d4798007b91e2e19c13b171583927a56df63breed@google.compublic: 233981d4798007b91e2e19c13b171583927a56df63breed@google.com enum kMaskType { 234981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskOpaque = 0, 235981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskBlack, 236981d4798007b91e2e19c13b171583927a56df63breed@google.com kMaskColor, 237981d4798007b91e2e19c13b171583927a56df63breed@google.com KMaskShader 238981d4798007b91e2e19c13b171583927a56df63breed@google.com }; 239981d4798007b91e2e19c13b171583927a56df63breed@google.com SkCanvas::PointMode fMode; 240981d4798007b91e2e19c13b171583927a56df63breed@google.com const char* fName; 241981d4798007b91e2e19c13b171583927a56df63breed@google.com 242410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com BlitMaskBench(SkCanvas::PointMode mode, 243981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::kMaskType type, const char* name) : 244410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RectBench(2), fMode(mode), _type(type) { 245981d4798007b91e2e19c13b171583927a56df63breed@google.com fName = name; 246981d4798007b91e2e19c13b171583927a56df63breed@google.com } 247981d4798007b91e2e19c13b171583927a56df63breed@google.com 248981d4798007b91e2e19c13b171583927a56df63breed@google.comprotected: 2493361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 250981d4798007b91e2e19c13b171583927a56df63breed@google.com SkScalar gSizes[] = { 251981d4798007b91e2e19c13b171583927a56df63breed@google.com SkIntToScalar(13), SkIntToScalar(24) 252981d4798007b91e2e19c13b171583927a56df63breed@google.com }; 253981d4798007b91e2e19c13b171583927a56df63breed@google.com size_t sizes = SK_ARRAY_COUNT(gSizes); 254981d4798007b91e2e19c13b171583927a56df63breed@google.com 255c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com if (FLAGS_strokeWidth >= 0) { 256b87bf83f48e9424de6c3577e5578b3316cc88f8emtklein@google.com gSizes[0] = (SkScalar)FLAGS_strokeWidth; 257981d4798007b91e2e19c13b171583927a56df63breed@google.com sizes = 1; 258981d4798007b91e2e19c13b171583927a56df63breed@google.com } 259e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 260981d4798007b91e2e19c13b171583927a56df63breed@google.com SkColor color = 0xFF000000; 261981d4798007b91e2e19c13b171583927a56df63breed@google.com U8CPU alpha = 0xFF; 262981d4798007b91e2e19c13b171583927a56df63breed@google.com SkPaint paint; 263981d4798007b91e2e19c13b171583927a56df63breed@google.com paint.setStrokeCap(SkPaint::kRound_Cap); 264981d4798007b91e2e19c13b171583927a56df63breed@google.com if (_type == KMaskShader) { 265981d4798007b91e2e19c13b171583927a56df63breed@google.com SkBitmap srcBM; 2666c22573edb234ad14df947278cfed010669a39a7reed srcBM.allocN32Pixels(10, 1); 267981d4798007b91e2e19c13b171583927a56df63breed@google.com srcBM.eraseColor(0xFF00FF00); 268981d4798007b91e2e19c13b171583927a56df63breed@google.com 269981d4798007b91e2e19c13b171583927a56df63breed@google.com SkShader* s; 270981d4798007b91e2e19c13b171583927a56df63breed@google.com s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode, 271981d4798007b91e2e19c13b171583927a56df63breed@google.com SkShader::kClamp_TileMode); 272981d4798007b91e2e19c13b171583927a56df63breed@google.com paint.setShader(s)->unref(); 273981d4798007b91e2e19c13b171583927a56df63breed@google.com } 2743361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int loop = 0; loop < loops; loop++) { 275c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (size_t i = 0; i < sizes; i++) { 276c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com switch (_type) { 277c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskOpaque: 278c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = fColors[i]; 279c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = 0xFF; 280c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 281c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskBlack: 282c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = 0xFF; 283c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = 0xFF000000; 284c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 285c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case kMaskColor: 286c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com color = fColors[i]; 287c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com alpha = rand.nextU() & 255; 288c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 289c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com case KMaskShader: 290c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com break; 291c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 292c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setStrokeWidth(gSizes[i]); 293c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com this->setupPaint(&paint); 294c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(color); 295c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setAlpha(alpha); 296c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 297c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 298c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 299981d4798007b91e2e19c13b171583927a56df63breed@google.com } 300981d4798007b91e2e19c13b171583927a56df63breed@google.com virtual const char* onGetName() { return fName; } 301981d4798007b91e2e19c13b171583927a56df63breed@google.comprivate: 302fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com typedef RectBench INHERITED; 303fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com kMaskType _type; 304981d4798007b91e2e19c13b171583927a56df63breed@google.com}; 305981d4798007b91e2e19c13b171583927a56df63breed@google.com 306981d4798007b91e2e19c13b171583927a56df63breed@google.com 307410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RectBench, (1)); ) 308410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RectBench, (1, 4)); ) 309410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RectBench, (3)); ) 310410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RectBench, (3, 4)); ) 311410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(OvalBench, (1)); ) 312410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(OvalBench, (3)); ) 313410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(OvalBench, (1, 4)); ) 314410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(OvalBench, (3, 4)); ) 315410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RRectBench, (1)); ) 316410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RRectBench, (1, 4)); ) 317410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RRectBench, (3)); ) 318410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RRectBench, (3, 4)); ) 319410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kPoints_PointMode, "points")); ) 320410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kLines_PointMode, "lines")); ) 321410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kPolygon_PointMode, "polygon")); ) 322bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 323410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(SrcModeRectBench, ()); ) 324370d835c1cf293b46b34477ec99b84ba82ff9c49robertphillips@google.com 325410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(AARectBench, (false)); ) 326410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(AARectBench, (true)); ) 3272d078b637a08d5d4298c50245d3b48950362e9cfreed@google.com 328981d4798007b91e2e19c13b171583927a56df63breed@google.com/* init the blitmask bench 329981d4798007b91e2e19c13b171583927a56df63breed@google.com */ 33060712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.comDEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 331410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com (SkCanvas::kPoints_PointMode, 332981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::kMaskOpaque, "maskopaque") 33360712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.com ); ) 33460712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.comDEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 335410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com (SkCanvas::kPoints_PointMode, 336981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::kMaskBlack, "maskblack") 33760712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.com ); ) 33860712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.comDEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 339410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com (SkCanvas::kPoints_PointMode, 340981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::kMaskColor, "maskcolor") 34160712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.com ); ) 34260712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.comDEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 343410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com (SkCanvas::kPoints_PointMode, 344981d4798007b91e2e19c13b171583927a56df63breed@google.com BlitMaskBench::KMaskShader, "maskshader") 34560712f3180f5d35a51292ebfd0f25c16a3925d28reed@google.com ); ) 346