1607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
2607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com/*
3607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * Copyright 2012 Google Inc.
4607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com *
5607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * Use of this source code is governed by a BSD-style license that can be
6607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * found in the LICENSE file.
7607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com */
8607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
9607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
10607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#ifndef SKDEBUGGER_H_
11607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#define SKDEBUGGER_H_
12607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
13607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#include "SkDebugCanvas.h"
14607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#include "SkPicture.h"
158a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com#include "SkTArray.h"
16607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
172d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.comclass SkString;
182d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com
19607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.comclass SkDebugger {
20607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.compublic:
21607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkDebugger();
22607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
23607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    ~SkDebugger();
24607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
25607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void setIndex(int index) {
26607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fIndex = index;
27607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
28607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void draw(SkCanvas* canvas) {
295a2315e750f65a8b61faa509a65840c622f04424kkinnunen        if (fIndex >= 0) {
30607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            fDebugCanvas->drawTo(canvas, fIndex);
31607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
32607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
33607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
34607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void step();
35607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void stepBack();
36607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void play();
37607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void rewind();
38607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
39607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    bool isCommandVisible(int index) {
40607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getDrawCommandVisibilityAt(index);
41607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
42607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
43607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void setCommandVisible(int index, bool isVisible) {
44607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugCanvas->toggleCommand(index, isVisible);
45607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
46607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
475037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    SkDrawCommand* getDrawCommandAt(int index) {
485037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        return fDebugCanvas->getDrawCommandAt(index);
4957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    }
5057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
518a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    const SkTDArray<SkDrawCommand*>& getDrawCommands() const {
528a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com        return fDebugCanvas->getDrawCommands();
538a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
548a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
55607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void highlightCurrentCommand(bool on) {
56607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugCanvas->toggleFilter(on);
57607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
58607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
59607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    void loadPicture(SkPicture* picture);
60607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
6125bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com    SkPicture* copyPicture();
62607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
635037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    int getSize() const {
64607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getSize();
65607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
66607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
67e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix userMatrix) {
68607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        // Should this live in debugger instead?
69e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fDebugCanvas->setUserMatrix(userMatrix);
70607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
71607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
72607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    int getCommandAtPoint(int x, int y, int index) {
73607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getCommandAtPoint(x, y, index);
74607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
75607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
768c89c528f31dff25bce74aabe28abe23a772cb1efmalita    const SkTDArray<SkString*>* getCommandInfo(int index) const {
77607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getCommandInfo(index);
78607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
79607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
80607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    const SkMatrix& getCurrentMatrix() {
81607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getCurrentMatrix();
82607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
83607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
84607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    const SkIRect& getCurrentClip() {
85607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fDebugCanvas->getCurrentClip();
86607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
87607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
88a8d7f0b13cd4c6d773fcf055fe17db75d260fa05robertphillips    SkRect pictureCull() const   {
89a8d7f0b13cd4c6d773fcf055fe17db75d260fa05robertphillips        return NULL == fPicture ? SkRect::MakeEmpty() : fPicture->cullRect();
90607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
91607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
92607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    int index() {
93607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return fIndex;
94607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
95607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
96f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    void setOverdrawViz(bool overDrawViz) {
9749f085dddff10473b6ebf832a974288300224e60bsalomon        if (fDebugCanvas) {
98f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com            fDebugCanvas->setOverdrawViz(overDrawViz);
99f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com        }
100f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    }
101f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
1022a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void setPathOps(bool pathOps) {
10349f085dddff10473b6ebf832a974288300224e60bsalomon        if (fDebugCanvas) {
1042a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org            fDebugCanvas->setAllowSimplifyClip(pathOps);
1052a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org        }
1062a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    }
1072a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
108768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void setMegaViz(bool megaViz) {
10949f085dddff10473b6ebf832a974288300224e60bsalomon        if (fDebugCanvas) {
110768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org            fDebugCanvas->setMegaVizMode(megaViz);
111768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org        }
112768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    }
113768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
114e7903c7397c694e343c2c0fcc5cabea351212f23reed    void setTexFilterOverride(bool texFilterOverride, SkFilterQuality quality) {
11549f085dddff10473b6ebf832a974288300224e60bsalomon        if (fDebugCanvas) {
116e7903c7397c694e343c2c0fcc5cabea351212f23reed            fDebugCanvas->overrideTexFiltering(texFilterOverride, quality);
11732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com        }
11832bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    }
11932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
12091274b99722d9be62e077ab979c630c23cdd04b1skia.committer@gmail.com    void getOverviewText(const SkTDArray<double>* typeTimes, double totTime,
121e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com                         SkString* overview, int numRuns);
122f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
1232a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void getClipStackText(SkString* clipStack);
1242a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
125607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.comprivate:
126607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkDebugCanvas* fDebugCanvas;
127607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkPicture* fPicture;
128607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
129607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    int fIndex;
130607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com};
131607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
132607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
133607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com#endif /* SKDEBUGGER_H_ */
134