blob: 6ff4d4d90c857e870a846810170214055418a3df [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
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#ifndef SKDEBUGGERUI_H
10#define SKDEBUGGERUI_H
11
12
13#include "SkCanvas.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000014#include "SkCanvasWidget.h"
chudy@google.com607357f2012-08-07 16:12:23 +000015#include "SkDebugger.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000016#include "SkGLWidget.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000017#include "SkListWidget.h"
18#include "SkInspectorWidget.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000019#include "SkRasterWidget.h"
kkinnunen63a47022014-12-30 23:03:56 -080020#include "SkDrawCommandGeometryWidget.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000021#include "SkSettingsWidget.h"
kkinnunencfdc0e32015-01-13 22:49:02 -080022#include <QtCore/QSignalMapper>
chudy@google.com902ebe52012-06-29 14:21:22 +000023#include <QtCore/QVariant>
24#include <QtGui/QAction>
25#include <QtGui/QApplication>
26#include <QtGui/QButtonGroup>
27#include <QtGui/QHBoxLayout>
28#include <QtGui/QHeaderView>
29#include <QtGui/QListView>
30#include <QtGui/QListWidget>
31#include <QtGui/QMainWindow>
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +000032#include <QtGui/QSplitter>
chudy@google.com902ebe52012-06-29 14:21:22 +000033#include <QtGui/QStatusBar>
34#include <QtGui/QToolBar>
35#include <QtGui/QVBoxLayout>
36#include <QtGui/QWidget>
37#include <QtGui/QMenu>
38#include <QtGui/QMenuBar>
39#include <vector>
40
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000041class SkTimedPicture;
42namespace sk_tools {
43 class PictureRenderer;
44}
45
chudy@google.com902ebe52012-06-29 14:21:22 +000046/** \class SkDebuggerGUI
47
48 Container for the UI and it's functions.
49 */
50class SkDebuggerGUI : public QMainWindow {
51 Q_OBJECT
52
53public:
54 /**
55 Constructs the view of the application.
56 @param parent The parent container of this widget.
57 */
58 SkDebuggerGUI(QWidget *parent = 0);
59
robertphillips@google.comff6e6ba2013-01-28 17:43:26 +000060 /**
61 Updates the directory widget with the latest directory path stored in
62 the global class variable fPath.
63 */
64 void setupDirectoryWidget(const QString& path);
65
66 /**
67 Loads the specified file.
68 */
69 void openFile(const QString& filename);
70
chudy@google.com7dcae672012-07-09 20:26:53 +000071signals:
72 void commandChanged(int command);
73
chudy@google.com902ebe52012-06-29 14:21:22 +000074private slots:
75 /**
76 Toggles breakpoint view in the list widget.
77 */
78 void actionBreakpoints();
79
80 /**
robertphillips@google.comd26c7062012-11-12 20:42:12 +000081 Profile the commands
82 */
83 void actionProfile();
84
85 /**
chudy@google.com902ebe52012-06-29 14:21:22 +000086 Cancels the command filter in the list widget.
87 */
88 void actionCancel();
89
90 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000091 Clears the breakpoint state off of all commands marked as breakpoints.
92 */
93 void actionClearBreakpoints();
94
95 /**
96 Clears the deleted state off of all commands marked as deleted.
97 */
98 void actionClearDeletes();
99
100 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000101 Closes the application.
102 */
103 void actionClose();
104
105 /**
106 Deletes the command in question.
107 */
108 void actionDelete();
109
robertphillips@google.come8fe4bc2013-02-13 13:26:13 +0000110#if SK_SUPPORT_GPU
chudy@google.com902ebe52012-06-29 14:21:22 +0000111 /**
commit-bot@chromium.orgfde1e7c2013-08-02 13:59:50 +0000112 Updates the visibility of the GL canvas widget and sample count of the GL surface.
chudy@google.comea5488b2012-07-26 19:38:22 +0000113 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800114 void actionGLSettingsChanged();
robertphillips@google.come8fe4bc2013-02-13 13:26:13 +0000115#endif
chudy@google.comea5488b2012-07-26 19:38:22 +0000116
117 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000118 Toggles the visibility of the inspector widget.
119 */
120 void actionInspector();
121
122 /**
123 Plays from the current step to the next breakpoint if it exists, otherwise
124 executes all remaining draw commands.
125 */
126 void actionPlay();
127
128 /**
kkinnunen41c79cc2014-12-30 22:49:58 -0800129 Sets the visibility of the raster canvas widget according to the settings widget.
chudy@google.comea5488b2012-07-26 19:38:22 +0000130 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800131 void actionRasterSettingsChanged();
chudy@google.comea5488b2012-07-26 19:38:22 +0000132
133 /**
kkinnunen41c79cc2014-12-30 22:49:58 -0800134 Sets the visualization settings according to the settings widget.
robertphillips@google.comf4741c12013-02-06 20:13:54 +0000135 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800136 void actionVisualizationsChanged();
commit-bot@chromium.org2a67e122014-05-19 13:53:10 +0000137
138 /**
robertphillips@google.com32bbcf82013-10-17 17:56:10 +0000139 Applies the new texture filter override
140 */
141 void actionTextureFilter();
142
143 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000144 Rewinds from the current step back to the start of the commands.
145 */
146 void actionRewind();
147
148 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000149 Saves the current SKP with all modifications.
150 */
151 void actionSave();
152
153 /**
154 Saves the current SKP under a different name and/or location.
155 */
156 void actionSaveAs();
157
158 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000159 Sends the scale factor information to the settings widget.
160 */
161 void actionScale(float scaleFactor);
162
163 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000164 Toggles the settings widget visibility.
165 */
166 void actionSettings();
167
168 /**
169 Steps forward to the next draw command.
170 */
171 void actionStepBack();
172
173 /**
174 Steps backwards to the next draw command.
175 */
176 void actionStepForward();
177
178 /**
chudy@google.coma9e937c2012-08-03 17:32:05 +0000179 Called when the canvas is done being drawn to by SkCanvasWidget.
180 */
181 void drawComplete();
182
183 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000184 Loads an skpicture selected from the directory.
185 */
186 void loadFile(QListWidgetItem *item);
187
188 /**
189 Toggles a dialog with a file browser for navigating to a skpicture. Loads
robertphillips@google.comff6e6ba2013-01-28 17:43:26 +0000190 the selected file.
chudy@google.com902ebe52012-06-29 14:21:22 +0000191 */
192 void openFile();
193
194 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000195 Toggles whether drawing to a new command requires a double click
196 or simple focus.
197 */
chudy@google.come504de02012-07-16 18:35:23 +0000198 void pauseDrawing(bool isPaused = true);
chudy@google.com7dcae672012-07-09 20:26:53 +0000199
200 /**
kkinnunen0cfeaf32015-01-07 07:33:46 -0800201 Updates the UI based on the selected command.
chudy@google.com902ebe52012-06-29 14:21:22 +0000202 */
kkinnunen0cfeaf32015-01-07 07:33:46 -0800203 void updateDrawCommandInfo();
chudy@google.com902ebe52012-06-29 14:21:22 +0000204
205 /**
chudy@google.com9ca9bfe2012-07-12 21:58:14 +0000206 Sets the command to active in the list widget.
207 */
208 void selectCommand(int command);
209
210 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000211 Toggles the exclusive listing of commands set as deleted.
212 */
213 void showDeletes();
214
215 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000216 Toggles a breakpoint on the current step in the list widget.
217 */
218 void toggleBreakpoint();
219
220 /**
221 Toggles the visibility of the directory widget.
222 */
223 void toggleDirectory();
224
225 /**
226 Filters the list widgets command visibility based on the currently
227 active selection.
228 */
229 void toggleFilter(QString string);
230
kkinnunen41c79cc2014-12-30 22:49:58 -0800231 void updateHit(int newHit);
kkinnunencfdc0e32015-01-13 22:49:02 -0800232
233 void updateImage();
chudy@google.com902ebe52012-06-29 14:21:22 +0000234private:
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +0000235 QSplitter fCentralSplitter;
chudy@google.com2d537a12012-07-31 12:49:52 +0000236 QStatusBar fStatusBar;
237 QToolBar fToolBar;
238
chudy@google.comc432f002012-07-10 13:19:25 +0000239 QAction fActionOpen;
240 QAction fActionBreakpoint;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000241 QAction fActionProfile;
chudy@google.comc432f002012-07-10 13:19:25 +0000242 QAction fActionCancel;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000243 QAction fActionClearBreakpoints;
chudy@google.come504de02012-07-16 18:35:23 +0000244 QAction fActionClearDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000245 QAction fActionClose;
chudy@google.come504de02012-07-16 18:35:23 +0000246 QAction fActionCreateBreakpoint;
chudy@google.comc432f002012-07-10 13:19:25 +0000247 QAction fActionDelete;
248 QAction fActionDirectory;
249 QAction fActionGoToLine;
250 QAction fActionInspector;
bungeman@google.com2ff6d1d2013-07-01 14:24:12 +0000251 QAction fActionSettings;
chudy@google.comc432f002012-07-10 13:19:25 +0000252 QAction fActionPlay;
chudy@google.come504de02012-07-16 18:35:23 +0000253 QAction fActionPause;
chudy@google.comc432f002012-07-10 13:19:25 +0000254 QAction fActionRewind;
chudy@google.com0ab03392012-07-28 20:16:11 +0000255 QAction fActionSave;
256 QAction fActionSaveAs;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000257 QAction fActionShowDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000258 QAction fActionStepBack;
259 QAction fActionStepForward;
chudy@google.coma1226312012-07-26 20:26:44 +0000260 QAction fActionZoomIn;
261 QAction fActionZoomOut;
262 QSignalMapper fMapper;
chudy@google.com2d537a12012-07-31 12:49:52 +0000263
chudy@google.com0ab03392012-07-28 20:16:11 +0000264 QWidget fSpacer;
chudy@google.comc432f002012-07-10 13:19:25 +0000265 QComboBox fFilter;
chudy@google.com902ebe52012-06-29 14:21:22 +0000266
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +0000267 QSplitter fLeftColumnSplitter;
268 QWidget fMainAndRightColumnWidget;
chudy@google.comc432f002012-07-10 13:19:25 +0000269 QVBoxLayout fMainAndRightColumnLayout;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000270 QHBoxLayout fCanvasSettingsAndImageLayout;
271 QVBoxLayout fSettingsAndImageLayout;
chudy@google.com902ebe52012-06-29 14:21:22 +0000272
chudy@google.comc432f002012-07-10 13:19:25 +0000273 QListWidget fListWidget;
274 QListWidget fDirectoryWidget;
chudy@google.com902ebe52012-06-29 14:21:22 +0000275
chudy@google.com607357f2012-08-07 16:12:23 +0000276 SkDebugger fDebugger;
chudy@google.comc432f002012-07-10 13:19:25 +0000277 SkCanvasWidget fCanvasWidget;
kkinnunen63a47022014-12-30 23:03:56 -0800278
chudy@google.comc432f002012-07-10 13:19:25 +0000279 SkInspectorWidget fInspectorWidget;
280 SkSettingsWidget fSettingsWidget;
chudy@google.comc432f002012-07-10 13:19:25 +0000281
kkinnunen41c79cc2014-12-30 22:49:58 -0800282 QFrame fViewStateFrame;
283 QVBoxLayout fViewStateFrameLayout;
284 QGroupBox fViewStateGroup;
285 QFormLayout fViewStateLayout;
286 QLineEdit fCurrentCommandBox;
287 QLineEdit fCommandHitBox;
288 QLineEdit fZoomBox;
kkinnunen63a47022014-12-30 23:03:56 -0800289 SkDrawCommandGeometryWidget fDrawCommandGeometryWidget;
kkinnunen41c79cc2014-12-30 22:49:58 -0800290
chudy@google.com902ebe52012-06-29 14:21:22 +0000291 QString fPath;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000292 SkString fFileName;
robertphillips@google.com5f971142012-12-07 20:48:56 +0000293 SkTDArray<bool> fSkipCommands; // has a specific command been deleted?
chudy@google.com902ebe52012-06-29 14:21:22 +0000294 bool fDirectoryWidgetActive;
chudy@google.com902ebe52012-06-29 14:21:22 +0000295
chudy@google.comc432f002012-07-10 13:19:25 +0000296 QMenuBar fMenuBar;
297 QMenu fMenuFile;
chudy@google.come504de02012-07-16 18:35:23 +0000298 QMenu fMenuEdit;
chudy@google.comc432f002012-07-10 13:19:25 +0000299 QMenu fMenuNavigate;
300 QMenu fMenuView;
chudy@google.come504de02012-07-16 18:35:23 +0000301 QMenu fMenuWindows;
chudy@google.com902ebe52012-06-29 14:21:22 +0000302
chudy@google.comd3058f52012-07-19 13:41:27 +0000303 bool fLoading;
chudy@google.com2d537a12012-07-31 12:49:52 +0000304 int fPausedRow;
chudy@google.com902ebe52012-06-29 14:21:22 +0000305
306 /**
307 Creates the entire UI.
308 */
309 void setupUi(QMainWindow *SkDebuggerGUI);
310
311 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000312 Pipes a QString in with the location of the filename, proceeds to updating
313 the listwidget, combowidget and inspectorwidget.
314 */
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000315 void loadPicture(const SkString& fileName);
chudy@google.com902ebe52012-06-29 14:21:22 +0000316
317 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000318 Creates a picture of the current canvas.
319 */
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000320 void saveToFile(const SkString& filename);
chudy@google.com0ab03392012-07-28 20:16:11 +0000321
322 /**
kkinnunen5037e9d2014-12-30 07:22:58 -0800323 Populates the list widget with the debugger draw command info.
chudy@google.com902ebe52012-06-29 14:21:22 +0000324 */
kkinnunen5037e9d2014-12-30 07:22:58 -0800325 void setupListWidget();
chudy@google.com902ebe52012-06-29 14:21:22 +0000326
327 /**
kkinnunen5037e9d2014-12-30 07:22:58 -0800328 Populates the combo box widget with with the debugger draw command info.
chudy@google.com902ebe52012-06-29 14:21:22 +0000329 */
kkinnunen5037e9d2014-12-30 07:22:58 -0800330 void setupComboBox();
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000331
332 /**
333 Fills in the overview pane with text
334 */
robertphillips@google.com20beb482013-03-07 19:32:45 +0000335 void setupOverviewText(const SkTDArray<double>* typeTimes, double totTime, int numRuns);
chudy@google.com902ebe52012-06-29 14:21:22 +0000336
commit-bot@chromium.org2a67e122014-05-19 13:53:10 +0000337
338 /**
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000339 Render the supplied picture several times tracking the time consumed
340 by each command.
341 */
robertphillipsce4dd3d2014-07-07 13:46:35 -0700342 void run(const SkPicture* pict,
skia.committer@gmail.com34587162012-11-20 02:01:23 +0000343 sk_tools::PictureRenderer* renderer,
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000344 int repeats);
kkinnunenf3a9e992015-01-05 01:14:11 -0800345
346 bool isPaused() const {
347 return fActionPause.isChecked();
348 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000349};
350
351#endif // SKDEBUGGERUI_H