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