1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#ifndef SkBenchmark_DEFINED
9#define SkBenchmark_DEFINED
10
11#include "SkRefCnt.h"
12#include "SkPoint.h"
13#include "SkTDict.h"
14#include "SkTRegistry.h"
15
16#ifdef SK_DEBUG
17    #define SkBENCHLOOP(n) 1
18#else
19    #define SkBENCHLOOP(n) n
20#endif
21
22class SkCanvas;
23class SkPaint;
24
25class SkTriState {
26public:
27    enum State {
28        kDefault,
29        kTrue,
30        kFalse
31    };
32};
33
34class SkBenchmark : public SkRefCnt {
35public:
36    SkBenchmark(void* defineDict);
37
38    const char* getName();
39    SkIPoint getSize();
40    void draw(SkCanvas*);
41
42    void setForceAlpha(int alpha) {
43        fForceAlpha = alpha;
44    }
45
46    void setForceAA(bool aa) {
47        fForceAA = aa;
48    }
49
50    void setForceFilter(bool filter) {
51        fForceFilter = filter;
52    }
53
54    void setDither(SkTriState::State state) {
55        fDither = state;
56    }
57
58    void setStrokeWidth(SkScalar width) {
59      strokeWidth = width;
60      fHasStrokeWidth = true;
61    }
62
63    SkScalar getStrokeWidth() {
64      return strokeWidth;
65    }
66
67    bool hasStrokeWidth() {
68      return fHasStrokeWidth;
69    }
70
71    const char* findDefine(const char* key) const;
72    bool findDefine32(const char* key, int32_t* value) const;
73    bool findDefineScalar(const char* key, SkScalar* value) const;
74
75protected:
76    void setupPaint(SkPaint* paint);
77
78    virtual const char* onGetName() = 0;
79    virtual void onDraw(SkCanvas*) = 0;
80
81    virtual SkIPoint onGetSize();
82
83private:
84    const SkTDict<const char*>* fDict;
85    int     fForceAlpha;
86    bool    fForceAA;
87    bool    fForceFilter;
88    SkTriState::State  fDither;
89    bool    fHasStrokeWidth;
90    SkScalar strokeWidth;
91};
92
93typedef SkTRegistry<SkBenchmark*, void*> BenchRegistry;
94
95#endif
96