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 8cb93a386Sopenharmony_ci#include "bench/Benchmark.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkColorPriv.h" 12cb93a386Sopenharmony_ci#include "include/core/SkMatrix.h" 13cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 14cb93a386Sopenharmony_ci#include "src/core/SkAutoPixmapStorage.h" 15cb93a386Sopenharmony_ci#include "src/core/SkDraw.h" 16cb93a386Sopenharmony_ci#include "src/core/SkMatrixProvider.h" 17cb93a386Sopenharmony_ci#include "src/core/SkRasterClip.h" 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ciclass DrawPathBench : public Benchmark { 20cb93a386Sopenharmony_ci SkPaint fPaint; 21cb93a386Sopenharmony_ci SkString fName; 22cb93a386Sopenharmony_ci SkPath fPath; 23cb93a386Sopenharmony_ci SkRasterClip fRC; 24cb93a386Sopenharmony_ci SkAutoPixmapStorage fPixmap; 25cb93a386Sopenharmony_ci SkSimpleMatrixProvider fIdentityMatrixProvider; 26cb93a386Sopenharmony_ci SkDraw fDraw; 27cb93a386Sopenharmony_ci bool fDrawCoverage; 28cb93a386Sopenharmony_cipublic: 29cb93a386Sopenharmony_ci DrawPathBench(bool drawCoverage) 30cb93a386Sopenharmony_ci : fIdentityMatrixProvider(SkMatrix::I()), fDrawCoverage(drawCoverage) { 31cb93a386Sopenharmony_ci fPaint.setAntiAlias(true); 32cb93a386Sopenharmony_ci fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false"); 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci fPath.moveTo(0, 0); 35cb93a386Sopenharmony_ci fPath.quadTo(500, 0, 500, 500); 36cb93a386Sopenharmony_ci fPath.quadTo(250, 0, 0, 500); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci fPixmap.alloc(SkImageInfo::MakeA8(500, 500)); 39cb93a386Sopenharmony_ci if (!drawCoverage) { 40cb93a386Sopenharmony_ci // drawPathCoverage() goes out of its way to work fine with an uninitialized 41cb93a386Sopenharmony_ci // dst buffer, even in "SrcOver" mode, but ordinary drawing sure doesn't. 42cb93a386Sopenharmony_ci fPixmap.erase(0); 43cb93a386Sopenharmony_ci } 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci fRC.setRect(fPath.getBounds().round()); 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci fDraw.fDst = fPixmap; 48cb93a386Sopenharmony_ci fDraw.fMatrixProvider = &fIdentityMatrixProvider; 49cb93a386Sopenharmony_ci fDraw.fRC = &fRC; 50cb93a386Sopenharmony_ci } 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ciprotected: 53cb93a386Sopenharmony_ci const char* onGetName() override { 54cb93a386Sopenharmony_ci return fName.c_str(); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas* canvas) override { 58cb93a386Sopenharmony_ci if (fDrawCoverage) { 59cb93a386Sopenharmony_ci for (int i = 0; i < loops; ++i) { 60cb93a386Sopenharmony_ci fDraw.drawPathCoverage(fPath, fPaint); 61cb93a386Sopenharmony_ci } 62cb93a386Sopenharmony_ci } else { 63cb93a386Sopenharmony_ci for (int i = 0; i < loops; ++i) { 64cb93a386Sopenharmony_ci fDraw.drawPath(fPath, fPaint); 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci } 67cb93a386Sopenharmony_ci } 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ciprivate: 70cb93a386Sopenharmony_ci using INHERITED = Benchmark; 71cb93a386Sopenharmony_ci}; 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci/////////////////////////////////////////////////////////////////////////////// 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ciDEF_BENCH( return new DrawPathBench(false) ) 76cb93a386Sopenharmony_ciDEF_BENCH( return new DrawPathBench(true) ) 77