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