1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc.
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SKDEBUGGER_H_
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SKDEBUGGER_H_
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDebugCanvas.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPicture.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTArray.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkString;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkDebugger {
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDebugger();
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~SkDebugger();
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setIndex(int index) {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fIndex = index;
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void draw(SkCanvas* canvas) {
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fIndex >= 0) {
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDebugCanvas->drawTo(canvas, fIndex);
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void step();
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void stepBack();
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void play();
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void rewind();
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool isCommandVisible(int index) {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getDrawCommandVisibilityAt(index);
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setCommandVisible(int index, bool isVisible) {
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fDebugCanvas->toggleCommand(index, isVisible);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDrawCommand* getDrawCommandAt(int index) {
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getDrawCommandAt(index);
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkTDArray<SkDrawCommand*>& getDrawCommands() const {
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getDrawCommands();
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void highlightCurrentCommand(bool on) {
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fDebugCanvas->toggleFilter(on);
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void loadPicture(SkPicture* picture);
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPicture> copyPicture();
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getSize() const {
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getSize();
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setUserMatrix(SkMatrix userMatrix) {
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        // Should this live in debugger instead?
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fDebugCanvas->setUserMatrix(userMatrix);
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getCommandAtPoint(int x, int y, int index) {
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getCommandAtPoint(x, y, index);
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkTDArray<SkString*>* getCommandInfo(int index) const {
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getCommandInfo(index);
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkMatrix& getCurrentMatrix() {
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getCurrentMatrix();
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkIRect& getCurrentClip() {
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fDebugCanvas->getCurrentClip();
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRect pictureCull() const   {
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fPicture ? fPicture->cullRect() : SkRect::MakeEmpty();
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int index() {
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fIndex;
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setOverdrawViz(bool overDrawViz) {
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDebugCanvas) {
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDebugCanvas->setOverdrawViz(overDrawViz);
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setPathOps(bool pathOps) {
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDebugCanvas) {
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDebugCanvas->setAllowSimplifyClip(pathOps);
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setMegaViz(bool megaViz) {
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDebugCanvas) {
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDebugCanvas->setMegaVizMode(megaViz);
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setTexFilterOverride(bool texFilterOverride, SkFilterQuality quality) {
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDebugCanvas) {
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDebugCanvas->overrideTexFiltering(texFilterOverride, quality);
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void getOverviewText(const SkTDArray<double>* typeTimes, double totTime,
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         SkString* overview, int numRuns);
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void getClipStackText(SkString* clipStack);
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkDebugCanvas>  fDebugCanvas;
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPicture>                fPicture;
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int fIndex;
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif /* SKDEBUGGER_H_ */
134