SkDebugger.h revision 2a67e123a3e559774a16a58cbe5106bc0fb86740
1
2/*
3 * Copyright 2012 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
9
10#ifndef SKDEBUGGER_H_
11#define SKDEBUGGER_H_
12
13#include "SkDebugCanvas.h"
14#include "SkPicture.h"
15#include "SkTArray.h"
16
17class SkString;
18
19class SkDebugger {
20public:
21    SkDebugger();
22
23    ~SkDebugger();
24
25    void setIndex(int index) {
26        fIndex = index;
27    }
28    void draw(SkCanvas* canvas) {
29        if (fIndex > 0) {
30            fDebugCanvas->drawTo(canvas, fIndex);
31        }
32    }
33
34    void step();
35    void stepBack();
36    void play();
37    void rewind();
38
39    bool isCommandVisible(int index) {
40        return fDebugCanvas->getDrawCommandVisibilityAt(index);
41    }
42
43    void setCommandVisible(int index, bool isVisible) {
44        fDebugCanvas->toggleCommand(index, isVisible);
45    }
46
47    SkTArray<SkString>* getDrawCommandsAsStrings() {
48        return fDebugCanvas->getDrawCommandsAsStrings();
49    }
50
51    SkTDArray<size_t>* getDrawCommandOffsets() {
52        return fDebugCanvas->getDrawCommandOffsets();
53    }
54
55    const SkTDArray<SkDrawCommand*>& getDrawCommands() const {
56        return fDebugCanvas->getDrawCommands();
57    }
58
59    void highlightCurrentCommand(bool on) {
60        fDebugCanvas->toggleFilter(on);
61    }
62
63    void resize(int width, int height) {
64        fDebugCanvas->setBounds(width, height);
65    }
66
67    void loadPicture(SkPicture* picture);
68
69    SkPicture* copyPicture();
70
71    int getSize() {
72        return fDebugCanvas->getSize();
73    }
74
75    void setUserMatrix(SkMatrix userMatrix) {
76        // Should this live in debugger instead?
77        fDebugCanvas->setUserMatrix(userMatrix);
78    }
79
80    int getCommandAtPoint(int x, int y, int index) {
81        return fDebugCanvas->getCommandAtPoint(x, y, index);
82    }
83
84    SkTDArray<SkString*>* getCommandInfo(int index) {
85        return fDebugCanvas->getCommandInfo(index);
86    }
87
88    const SkMatrix& getCurrentMatrix() {
89        return fDebugCanvas->getCurrentMatrix();
90    }
91
92    const SkIRect& getCurrentClip() {
93        return fDebugCanvas->getCurrentClip();
94    }
95
96    int pictureHeight() {
97        return fPictureHeight;
98    }
99
100    int pictureWidth() {
101        return fPictureWidth;
102    }
103
104    int index() {
105        return fIndex;
106    }
107
108    void setOverdrawViz(bool overDrawViz) {
109        if (NULL != fDebugCanvas) {
110            fDebugCanvas->setOverdrawViz(overDrawViz);
111        }
112    }
113
114    void setPathOps(bool pathOps) {
115        if (NULL != fDebugCanvas) {
116            fDebugCanvas->setAllowSimplifyClip(pathOps);
117        }
118    }
119
120    void setMegaViz(bool megaViz) {
121        if (NULL != fDebugCanvas) {
122            fDebugCanvas->setMegaVizMode(megaViz);
123        }
124    }
125
126    void setTexFilterOverride(bool texFilterOverride, SkPaint::FilterLevel level) {
127        if (NULL != fDebugCanvas) {
128            fDebugCanvas->overrideTexFiltering(texFilterOverride, level);
129        }
130    }
131
132    void getOverviewText(const SkTDArray<double>* typeTimes, double totTime,
133                         SkString* overview, int numRuns);
134
135    void getClipStackText(SkString* clipStack);
136
137private:
138    SkDebugCanvas* fDebugCanvas;
139    SkPicture* fPicture;
140
141    int fPictureWidth;
142    int fPictureHeight;
143    int fIndex;
144};
145
146
147#endif /* SKDEBUGGER_H_ */
148