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"
9126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkBitmap.h"
10126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkCanvas.h"
11126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkColorPriv.h"
12126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkDraw.h"
13126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkMatrix.h"
14126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkPath.h"
15126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com#include "SkRasterClip.h"
16126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
17f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DrawPathBench : public Benchmark {
18126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkPaint     fPaint;
19126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkString    fName;
20126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkPath      fPath;
21126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkRasterClip fRC;
22126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkBitmap    fBitmap;
23126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkMatrix    fIdentity;
24126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    SkDraw      fDraw;
25126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    bool        fDrawCoverage;
26126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.compublic:
27126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) {
28126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fPaint.setAntiAlias(true);
29126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false");
30126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
31126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fPath.moveTo(0, 0);
32126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fPath.quadTo(500, 0, 500, 500);
33126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fPath.quadTo(250, 0, 0, 500);
34126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
356c22573edb234ad14df947278cfed010669a39a7reed        fBitmap.allocPixels(SkImageInfo::MakeA8(500, 500));
36126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
37126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fIdentity.setIdentity();
38126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fRC.setRect(fPath.getBounds().round());
39126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
40126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fDraw.fBitmap   = &fBitmap;
41126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fDraw.fMatrix   = &fIdentity;
42126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fDraw.fClip     = &fRC.bwRgn();
43126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        fDraw.fRC       = &fRC;
44126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    }
45ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com
46126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comprotected:
47126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    virtual const char* onGetName() SK_OVERRIDE {
48126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        return fName.c_str();
49126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    }
50ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com
513361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org    virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
52126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        if (fDrawCoverage) {
533361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org            for (int i = 0; i < loops; ++i) {
54126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com                fDraw.drawPathCoverage(fPath, fPaint);
55126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com            }
56126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        } else {
573361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org            for (int i = 0; i < loops; ++i) {
58126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com                fDraw.drawPath(fPath, fPaint);
59126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com            }
60126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com        }
61126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com    }
62ab7442c8d733e0642d1cd80af23cdab43d77039eskia.committer@gmail.com
63126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comprivate:
64f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
65126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com};
66126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
67126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com///////////////////////////////////////////////////////////////////////////////
68126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com
69126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comDEF_BENCH( return new DrawPathBench(false) )
70126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comDEF_BENCH( return new DrawPathBench(true) )
71