1126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com/* 2126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com * Copyright 2013 Google Inc. 3126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com * 4126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com * Use of this source code is governed by a BSD-style license that can be 5126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com * found in the LICENSE file. 6126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com */ 7126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9c5035e70cc3fb290f95fd1c052c637aa0dbaf9earobertphillips#include "SkAutoPixmapStorage.h" 10126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkBitmap.h" 11126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkCanvas.h" 12126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkColorPriv.h" 13126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkDraw.h" 14126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkMatrix.h" 15126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkPath.h" 16126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkRasterClip.h" 17126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DrawPathBench : public Benchmark { 19126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkPaint fPaint; 20126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkString fName; 21126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkPath fPath; 22126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkRasterClip fRC; 2341e010cb901c0da9066c4df562030808c9ccd7f8reed SkAutoPixmapStorage fPixmap; 24126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkMatrix fIdentity; 25126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com SkDraw fDraw; 26126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com bool fDrawCoverage; 27126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.compublic: 28126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) { 29126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fPaint.setAntiAlias(true); 30126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false"); 31126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 32126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fPath.moveTo(0, 0); 33126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fPath.quadTo(500, 0, 500, 500); 34126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fPath.quadTo(250, 0, 0, 500); 35126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 3641e010cb901c0da9066c4df562030808c9ccd7f8reed fPixmap.alloc(SkImageInfo::MakeA8(500, 500)); 37e71b167dbd4d8da76495ca85db83d1a3b49aaabdMike Klein if (!drawCoverage) { 38e71b167dbd4d8da76495ca85db83d1a3b49aaabdMike Klein // drawPathCoverage() goes out of its way to work fine with an uninitialized 39e71b167dbd4d8da76495ca85db83d1a3b49aaabdMike Klein // dst buffer, even in "SrcOver" mode, but ordinary drawing sure doesn't. 40e71b167dbd4d8da76495ca85db83d1a3b49aaabdMike Klein fPixmap.erase(0); 41e71b167dbd4d8da76495ca85db83d1a3b49aaabdMike Klein } 42126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 43126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fIdentity.setIdentity(); 44126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fRC.setRect(fPath.getBounds().round()); 45126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 4641e010cb901c0da9066c4df562030808c9ccd7f8reed fDraw.fDst = fPixmap; 47126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fDraw.fMatrix = &fIdentity; 48126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fDraw.fRC = &fRC; 49126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 50ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com 51126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comprotected: 5236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 53126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com return fName.c_str(); 54126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 55ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com 56a1ebeb25e9acfcd801e089e063311d716b83b8a5mtklein void onDraw(int loops, SkCanvas* canvas) override { 57126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com if (fDrawCoverage) { 583361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 59126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fDraw.drawPathCoverage(fPath, fPaint); 60126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 61126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } else { 623361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 63126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com fDraw.drawPath(fPath, fPaint); 64126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 65126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 66126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com } 67ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com 68126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comprivate: 69f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 70126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com}; 71126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 72126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com/////////////////////////////////////////////////////////////////////////////// 73126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 74126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comDEF_BENCH( return new DrawPathBench(false) ) 75126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comDEF_BENCH( return new DrawPathBench(true) ) 76