Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / gm / gm.h
1 /*
2  * Copyright 2011 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #ifndef skiagm_DEFINED
9 #define skiagm_DEFINED
10
11 #include "SkBitmap.h"
12 #include "SkCanvas.h"
13 #include "SkPaint.h"
14 #include "SkSize.h"
15 #include "SkString.h"
16 #include "SkTRegistry.h"
17 #include "sk_tool_utils.h"
18
19 #if SK_SUPPORT_GPU
20 #include "GrContext.h"
21 #endif
22
23 #define DEF_GM(code) \
24     static skiagm::GM*          SK_MACRO_APPEND_LINE(F_)(void*) { code; } \
25     static skiagm::GMRegistry   SK_MACRO_APPEND_LINE(R_)(SK_MACRO_APPEND_LINE(F_));
26
27 namespace skiagm {
28
29     class GM {
30     public:
31         GM();
32         virtual ~GM();
33
34         enum Flags {
35             kSkipPDF_Flag               = 1 << 0,
36             kSkipPicture_Flag           = 1 << 1,
37             kSkipPipe_Flag              = 1 << 2,
38             kSkipPipeCrossProcess_Flag  = 1 << 3,
39             kSkipTiled_Flag             = 1 << 4,
40             kSkip565_Flag               = 1 << 5,
41             kSkipScaledReplay_Flag      = 1 << 6,
42             kSkipGPU_Flag               = 1 << 7,
43             kSkipPDFRasterization_Flag  = 1 << 8,
44
45             kGPUOnly_Flag               = 1 << 9,
46
47             kAsBench_Flag               = 1 << 10, // Run the GM as a benchmark in the bench tool
48
49             kNoBBH_Flag                 = 1 << 11, // May draw wrong using a bounding-box hierarchy
50         };
51
52         enum Mode {
53             kGM_Mode,
54             kSample_Mode,
55             kBench_Mode,
56         };
57
58         void setMode(Mode mode) { fMode = mode; }
59         Mode getMode() const { return fMode; }
60
61         void draw(SkCanvas*);
62         void drawBackground(SkCanvas*);
63         void drawContent(SkCanvas*);
64
65         SkISize getISize() { return this->onISize(); }
66         const char* getName();
67
68         uint32_t getFlags() const {
69             return this->onGetFlags();
70         }
71
72         SkScalar width() {
73             return SkIntToScalar(this->getISize().width());
74         }
75         SkScalar height() {
76             return SkIntToScalar(this->getISize().height());
77         }
78
79         // TODO(vandebo) Instead of exposing this, we should run all the GMs
80         // with and without an initial transform.
81         // Most GMs will return the identity matrix, but some PDFs tests
82         // require setting the initial transform.
83         SkMatrix getInitialTransform() const {
84             SkMatrix matrix = fStarterMatrix;
85             matrix.preConcat(this->onGetInitialTransform());
86             return matrix;
87         }
88
89         SkColor getBGColor() const { return fBGColor; }
90         void setBGColor(SkColor);
91
92         // helper: fill a rect in the specified color based on the
93         // GM's getISize bounds.
94         void drawSizeBounds(SkCanvas*, SkColor);
95
96         bool isCanvasDeferred() const { return fCanvasIsDeferred; }
97         void setCanvasIsDeferred(bool isDeferred) {
98             fCanvasIsDeferred = isDeferred;
99         }
100
101         const SkMatrix& getStarterMatrix() { return fStarterMatrix; }
102         void setStarterMatrix(const SkMatrix& matrix) {
103             fStarterMatrix = matrix;
104         }
105
106     protected:
107         virtual void onOnceBeforeDraw() {}
108         virtual void onDraw(SkCanvas*) = 0;
109         virtual void onDrawBackground(SkCanvas*);
110         virtual SkISize onISize() = 0;
111         virtual SkString onShortName() = 0;
112         virtual uint32_t onGetFlags() const { return 0; }
113         virtual SkMatrix onGetInitialTransform() const { return SkMatrix::I(); }
114
115     private:
116         Mode     fMode;
117         SkString fShortName;
118         SkColor  fBGColor;
119         bool     fCanvasIsDeferred; // work-around problem in srcmode.cpp
120         bool     fHaveCalledOnceBeforeDraw;
121         SkMatrix fStarterMatrix;
122     };
123
124     typedef SkTRegistry<GM*(*)(void*)> GMRegistry;
125 }
126
127 #endif