SkDebugger.h revision e428f9b1132c12299c204a333192495d7e748511
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2012 Google Inc.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SKDEBUGGER_H_
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SKDEBUGGER_H_
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkDebugCanvas.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkPicture.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkTArray.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkString;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkDebugger {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkDebugger();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~SkDebugger();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void setIndex(int index) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fIndex = index;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void draw(SkCanvas* canvas) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (fIndex > 0) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            fDebugCanvas->drawTo(canvas, fIndex);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void step();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void stepBack();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void play();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void rewind();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool isCommandVisible(int index) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getDrawCommandVisibilityAt(index);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void setCommandVisible(int index, bool isVisible) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fDebugCanvas->toggleCommand(index, isVisible);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkTArray<SkString>* getDrawCommandsAsStrings() {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getDrawCommandsAsStrings();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const SkTDArray<SkDrawCommand*>& getDrawCommands() const {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getDrawCommands();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void highlightCurrentCommand(bool on) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fDebugCanvas->toggleFilter(on);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void resize(int width, int height) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fDebugCanvas->setBounds(width, height);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void loadPicture(SkPicture* picture);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkPicture* copyPicture();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int getSize() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getSize();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void setUserMatrix(SkMatrix userMatrix) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Should this live in debugger instead?
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fDebugCanvas->setUserMatrix(userMatrix);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int getCommandAtPoint(int x, int y, int index) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getCommandAtPoint(x, y, index);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkTDArray<SkString*>* getCommandInfo(int index) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getCommandInfo(index);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const SkMatrix& getCurrentMatrix() {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return fDebugCanvas->getCurrentMatrix();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
87
88    const SkIRect& getCurrentClip() {
89        return fDebugCanvas->getCurrentClip();
90    }
91
92    int pictureHeight() {
93        return fPictureHeight;
94    }
95
96    int pictureWidth() {
97        return fPictureWidth;
98    }
99
100    int index() {
101        return fIndex;
102    }
103
104    void setOverdrawViz(bool overDrawViz) {
105        if (NULL != fDebugCanvas) {
106            fDebugCanvas->setOverdrawViz(overDrawViz);
107        }
108    }
109
110    void getOverviewText(const SkTDArray<double>* typeTimes, double totTime,
111                         SkString* overview, int numRuns);
112
113private:
114    SkDebugCanvas* fDebugCanvas;
115    SkPicture* fPicture;
116
117    int fPictureWidth;
118    int fPictureHeight;
119    int fIndex;
120};
121
122
123#endif /* SKDEBUGGER_H_ */
124