Jose Fonseca | 9653f95 | 2015-05-19 16:32:43 +0100 | [diff] [blame] | 1 | #pragma once |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 2 | |
| 3 | #include "ui_mainwindow.h" |
| 4 | |
José Fonseca | 62997b4 | 2011-11-27 15:16:34 +0000 | [diff] [blame] | 5 | #include "trace_api.hpp" |
Zack Rusin | 8f98c3a | 2011-09-11 18:21:29 -0400 | [diff] [blame] | 6 | #include "apitrace.h" |
| 7 | |
Zack Rusin | 96130ac | 2011-03-27 01:48:36 -0400 | [diff] [blame] | 8 | #include <QMainWindow> |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 9 | #include <QProcess> |
Dan McCabe | 66dfdda | 2012-03-05 17:20:39 -0800 | [diff] [blame] | 10 | #include <QList> |
| 11 | #include <QImage> |
Zack Rusin | 96130ac | 2011-03-27 01:48:36 -0400 | [diff] [blame] | 12 | |
Zack Rusin | f6667d1 | 2011-03-30 11:03:37 -0400 | [diff] [blame] | 13 | class ApiTrace; |
Zack Rusin | cc0b491 | 2011-04-19 01:59:20 -0400 | [diff] [blame] | 14 | class ApiTraceCall; |
Zack Rusin | 581e3ff | 2011-03-31 23:58:07 -0400 | [diff] [blame] | 15 | class ApiTraceEvent; |
| 16 | class ApiTraceFilter; |
Zack Rusin | 2caa06d | 2011-03-30 18:30:20 -0400 | [diff] [blame] | 17 | class ApiTraceFrame; |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 18 | class ApiTraceModel; |
Zack Rusin | f389ae8 | 2011-04-10 19:27:28 -0400 | [diff] [blame] | 19 | class ApiTraceState; |
Zack Rusin | 963102f | 2011-04-15 01:45:05 -0400 | [diff] [blame] | 20 | class ArgumentsEditor; |
Zack Rusin | c52d18a | 2011-04-11 00:15:07 -0400 | [diff] [blame] | 21 | class JumpWidget; |
Zack Rusin | 96130ac | 2011-03-27 01:48:36 -0400 | [diff] [blame] | 22 | class QModelIndex; |
Zack Rusin | de4ea41 | 2011-03-30 11:30:08 -0400 | [diff] [blame] | 23 | class QProgressBar; |
Zack Rusin | d923934 | 2011-04-19 23:43:06 -0400 | [diff] [blame] | 24 | class QTreeWidgetItem; |
Zack Rusin | c97fadc | 2011-04-07 15:16:59 -0400 | [diff] [blame] | 25 | class QUrl; |
Zack Rusin | 10fd477 | 2011-09-14 01:45:12 -0400 | [diff] [blame] | 26 | struct ApiTraceError; |
Zack Rusin | 3acde36 | 2011-04-06 01:11:55 -0400 | [diff] [blame] | 27 | class Retracer; |
Zack Rusin | f04cf8a | 2011-04-12 23:21:52 -0400 | [diff] [blame] | 28 | class SearchWidget; |
Zack Rusin | 7c814f1 | 2011-04-09 19:20:58 -0400 | [diff] [blame] | 29 | class ShadersSourceWidget; |
Zack Rusin | ca16411 | 2011-04-11 02:23:09 -0400 | [diff] [blame] | 30 | class TraceProcess; |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 31 | class TrimProcess; |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 32 | class ProfileDialog; |
Zack Rusin | 8e7a4ff | 2011-04-07 01:15:48 -0400 | [diff] [blame] | 33 | class VertexDataInterpreter; |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 34 | |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 35 | namespace trace { struct Profile; } |
| 36 | |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 37 | class MainWindow : public QMainWindow |
| 38 | { |
| 39 | Q_OBJECT |
| 40 | public: |
Piotr Podsiadły | 654787e | 2016-09-13 09:53:48 +0200 | [diff] [blame] | 41 | struct RecentLaunch |
| 42 | { |
| 43 | QString api; |
| 44 | QString execPath; |
| 45 | QString workingDir; |
| 46 | QStringList args; |
| 47 | }; |
| 48 | |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 49 | MainWindow(); |
Zack Rusin | 11f7e63 | 2011-03-30 22:47:51 -0400 | [diff] [blame] | 50 | ~MainWindow(); |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 51 | |
| 52 | public slots: |
José Fonseca | b7eb152 | 2011-11-27 15:15:33 +0000 | [diff] [blame] | 53 | void loadTrace(const QString &fileName, int callNum = -1); |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 54 | |
Carl Worth | 7257dfc | 2012-08-09 08:21:42 -0700 | [diff] [blame] | 55 | void setRemoteTarget(const QString &host); |
| 56 | |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 57 | private slots: |
Zack Rusin | 96130ac | 2011-03-27 01:48:36 -0400 | [diff] [blame] | 58 | void callItemSelected(const QModelIndex &index); |
José Fonseca | 63d5940 | 2011-10-30 10:56:04 +0000 | [diff] [blame] | 59 | void callItemActivated(const QModelIndex &index); |
Piotr Podsiadły | 654787e | 2016-09-13 09:53:48 +0200 | [diff] [blame] | 60 | void createTrace(const RecentLaunch* optionalLaunch = nullptr); |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 61 | void openTrace(); |
Alexander Trukhin | d99ab92 | 2015-03-27 23:38:01 +0300 | [diff] [blame] | 62 | void saveTrace(); |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 63 | void replayStart(); |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 64 | void replayProfile(); |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 65 | void replayStop(); |
José Fonseca | 126f64b | 2012-03-28 00:13:55 +0100 | [diff] [blame] | 66 | void replayFinished(const QString &message); |
Zack Rusin | ed40bc6 | 2011-08-28 17:11:02 -0400 | [diff] [blame] | 67 | void replayStateFound(ApiTraceState *state); |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 68 | void replayProfileFound(trace::Profile *state); |
Dan McCabe | c6f924e | 2012-06-01 13:40:05 -0700 | [diff] [blame] | 69 | void replayThumbnailsFound(const ImageHash &thumbnails); |
Zack Rusin | 3acde36 | 2011-04-06 01:11:55 -0400 | [diff] [blame] | 70 | void replayError(const QString &msg); |
Jose Fonseca | 8f0846c | 2015-11-10 19:53:55 +0000 | [diff] [blame] | 71 | void loadError(const QString &msg); |
Zack Rusin | de4ea41 | 2011-03-30 11:30:08 -0400 | [diff] [blame] | 72 | void startedLoadingTrace(); |
Zack Rusin | ebf971e | 2011-09-06 17:44:43 -0400 | [diff] [blame] | 73 | void loadProgess(int percent); |
Zack Rusin | de4ea41 | 2011-03-30 11:30:08 -0400 | [diff] [blame] | 74 | void finishedLoadingTrace(); |
Zack Rusin | 2caa06d | 2011-03-30 18:30:20 -0400 | [diff] [blame] | 75 | void lookupState(); |
José Fonseca | e5fa541 | 2012-03-24 09:27:27 +0000 | [diff] [blame] | 76 | void showThumbnails(); |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 77 | void trim(); |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 78 | void showSettings(); |
Jose Fonseca | a20a795 | 2016-01-19 14:16:24 +0000 | [diff] [blame] | 79 | void leakTrace(); |
| 80 | void leakTraceFinished(); |
Zack Rusin | 09ec484 | 2011-04-10 01:57:17 -0400 | [diff] [blame] | 81 | void showSurfacesMenu(const QPoint &pos); |
| 82 | void showSelectedSurface(); |
Zack Rusin | fd638e5 | 2011-06-20 19:46:17 -0400 | [diff] [blame] | 83 | void saveSelectedSurface(); |
Edward Rudd | 14158b9 | 2014-07-07 17:46:05 -0400 | [diff] [blame] | 84 | void exportBufferData(); |
Zack Rusin | c52d18a | 2011-04-11 00:15:07 -0400 | [diff] [blame] | 85 | void slotGoTo(); |
| 86 | void slotJumpTo(int callNum); |
Zack Rusin | ca16411 | 2011-04-11 02:23:09 -0400 | [diff] [blame] | 87 | void createdTrace(const QString &path); |
| 88 | void traceError(const QString &msg); |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 89 | void createdTrim(const QString &path); |
| 90 | void trimError(const QString &msg); |
Zack Rusin | f04cf8a | 2011-04-12 23:21:52 -0400 | [diff] [blame] | 91 | void slotSearch(); |
Ruslan Kabatsayev | 75d6905 | 2019-02-20 13:41:18 +0300 | [diff] [blame] | 92 | void slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity, bool useRegex); |
| 93 | void slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity, bool useRegex); |
Zack Rusin | e2dfa2e | 2011-04-13 01:35:03 -0400 | [diff] [blame] | 94 | void fillState(bool nonDefaults); |
Zack Rusin | fb23ba1 | 2011-04-15 19:29:45 -0400 | [diff] [blame] | 95 | void customContextMenuRequested(QPoint pos); |
| 96 | void editCall(); |
Zack Rusin | 9af5bff | 2011-04-18 01:05:50 -0400 | [diff] [blame] | 97 | void slotStartedSaving(); |
| 98 | void slotSaved(); |
Zack Rusin | 9623daf | 2011-04-18 18:03:34 -0400 | [diff] [blame] | 99 | void slotGoFrameStart(); |
| 100 | void slotGoFrameEnd(); |
Dan McCabe | 10bd424 | 2012-03-05 17:20:40 -0800 | [diff] [blame] | 101 | void slotTraceChanged(ApiTraceEvent *event); |
Zack Rusin | 10fd477 | 2011-09-14 01:45:12 -0400 | [diff] [blame] | 102 | void slotRetraceErrors(const QList<ApiTraceError> &errors); |
Zack Rusin | d923934 | 2011-04-19 23:43:06 -0400 | [diff] [blame] | 103 | void slotErrorSelected(QTreeWidgetItem *current); |
Zack Rusin | ad513b3 | 2011-09-25 14:33:41 -0400 | [diff] [blame] | 104 | void slotSearchResult(const ApiTrace::SearchRequest &request, |
| 105 | ApiTrace::SearchResult result, |
Zack Rusin | 8f98c3a | 2011-09-11 18:21:29 -0400 | [diff] [blame] | 106 | ApiTraceCall *call); |
Zack Rusin | 93e4d15 | 2011-09-13 02:23:39 -0400 | [diff] [blame] | 107 | void slotFoundFrameStart(ApiTraceFrame *frame); |
| 108 | void slotFoundFrameEnd(ApiTraceFrame *frame); |
Zack Rusin | da7579b | 2011-09-13 17:33:05 -0400 | [diff] [blame] | 109 | void slotJumpToResult(ApiTraceCall *call); |
Martin Schulze | b44232b | 2016-04-16 19:06:16 +0200 | [diff] [blame] | 110 | void updateSurfacesView(); |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 111 | |
| 112 | private: |
velorums | 9bef95e | 2020-05-23 21:57:30 +0200 | [diff] [blame] | 113 | void initWindowState(); |
| 114 | void saveWindowState(); |
Zack Rusin | 4667842 | 2011-04-10 12:15:46 -0400 | [diff] [blame] | 115 | void initObjects(); |
| 116 | void initConnections(); |
Alexandr Akulich | 1af9409 | 2012-12-07 16:59:52 +0600 | [diff] [blame] | 117 | void updateActionsState(bool traceLoaded, bool stopped = true); |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 118 | void newTraceFile(const QString &fileName); |
Jose Fonseca | 65d2605 | 2017-07-30 13:48:40 +0100 | [diff] [blame] | 119 | void replayTrace(bool dumpState, bool dumpThumbnails); |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 120 | void trimEvent(); |
Martin Schulze | b44232b | 2016-04-16 19:06:16 +0200 | [diff] [blame] | 121 | void updateSurfacesView(const ApiTraceState &state); |
Zack Rusin | 11f7e63 | 2011-03-30 22:47:51 -0400 | [diff] [blame] | 122 | void fillStateForFrame(); |
Zack Rusin | 8f98c3a | 2011-09-11 18:21:29 -0400 | [diff] [blame] | 123 | |
| 124 | /* there's a difference between selected frame/call and |
| 125 | * current call/frame. the former implies actual selection |
| 126 | * the latter might be just a highlight, e.g. during searching |
| 127 | */ |
| 128 | ApiTraceFrame *selectedFrame() const; |
| 129 | ApiTraceCall *selectedCall() const; |
Zack Rusin | 9623daf | 2011-04-18 18:03:34 -0400 | [diff] [blame] | 130 | ApiTraceFrame *currentFrame() const; |
Zack Rusin | be54773 | 2011-04-23 17:16:34 -0400 | [diff] [blame] | 131 | ApiTraceCall *currentCall() const; |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 132 | |
Dan McCabe | 8893885 | 2012-06-01 13:40:04 -0700 | [diff] [blame] | 133 | static void thumbnailCallback(void *object, int thumbnailIdx); |
| 134 | |
Martin Schulze | 638ec44 | 2015-10-11 12:37:42 +0200 | [diff] [blame] | 135 | void addSurface(const ApiTexture &image, QTreeWidgetItem *parent); |
| 136 | void addSurface(const ApiFramebuffer &image, QTreeWidgetItem *parent); |
Martin Schulze | b44232b | 2016-04-16 19:06:16 +0200 | [diff] [blame] | 137 | void addSurface(const ApiSurface &surface, const QString &label, QTreeWidgetItem *parent); |
Martin Schulze | 638ec44 | 2015-10-11 12:37:42 +0200 | [diff] [blame] | 138 | template <typename Surface> |
| 139 | void addSurfaces(const QList<Surface> &images, const char *label); |
BogDan Vatra | a9f9e64 | 2015-02-10 14:31:17 +0200 | [diff] [blame] | 140 | |
Piotr Podsiadły | 654787e | 2016-09-13 09:53:48 +0200 | [diff] [blame] | 141 | void addRecentLaunch(const RecentLaunch& launch); |
| 142 | QList<RecentLaunch> readRecentLaunches() const; |
| 143 | void updateRecentLaunchesMenu(); |
| 144 | |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 145 | protected: |
Jose Fonseca | 010f996 | 2016-03-05 14:45:41 +0000 | [diff] [blame] | 146 | virtual void closeEvent(QCloseEvent * event) override; |
Zack Rusin | 8f98c3a | 2011-09-11 18:21:29 -0400 | [diff] [blame] | 147 | |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 148 | private: |
| 149 | Ui_MainWindow m_ui; |
Zack Rusin | 7c814f1 | 2011-04-09 19:20:58 -0400 | [diff] [blame] | 150 | ShadersSourceWidget *m_sourcesWidget; |
| 151 | |
José Fonseca | 62997b4 | 2011-11-27 15:16:34 +0000 | [diff] [blame] | 152 | trace::API m_api; |
| 153 | |
Zack Rusin | f6667d1 | 2011-03-30 11:03:37 -0400 | [diff] [blame] | 154 | ApiTrace *m_trace; |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 155 | ApiTraceModel *m_model; |
Zack Rusin | 9106537 | 2011-03-26 01:54:10 -0400 | [diff] [blame] | 156 | ApiTraceFilter *m_proxyModel; |
José Fonseca | b7eb152 | 2011-11-27 15:15:33 +0000 | [diff] [blame] | 157 | int m_initalCallNum; |
Zack Rusin | 27cb2c4 | 2011-03-27 23:53:36 -0400 | [diff] [blame] | 158 | |
Zack Rusin | de4ea41 | 2011-03-30 11:30:08 -0400 | [diff] [blame] | 159 | QProgressBar *m_progressBar; |
| 160 | |
Zack Rusin | 581e3ff | 2011-03-31 23:58:07 -0400 | [diff] [blame] | 161 | ApiTraceEvent *m_selectedEvent; |
Zack Rusin | 11f7e63 | 2011-03-30 22:47:51 -0400 | [diff] [blame] | 162 | |
Zack Rusin | 581e3ff | 2011-03-31 23:58:07 -0400 | [diff] [blame] | 163 | ApiTraceEvent *m_stateEvent; |
Zack Rusin | 11f7e63 | 2011-03-30 22:47:51 -0400 | [diff] [blame] | 164 | |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 165 | ApiTraceEvent *m_trimEvent; |
| 166 | |
Zack Rusin | 3acde36 | 2011-04-06 01:11:55 -0400 | [diff] [blame] | 167 | Retracer *m_retracer; |
Zack Rusin | 8e7a4ff | 2011-04-07 01:15:48 -0400 | [diff] [blame] | 168 | |
| 169 | VertexDataInterpreter *m_vdataInterpreter; |
Zack Rusin | 09ec484 | 2011-04-10 01:57:17 -0400 | [diff] [blame] | 170 | |
Zack Rusin | c52d18a | 2011-04-11 00:15:07 -0400 | [diff] [blame] | 171 | JumpWidget *m_jumpWidget; |
Zack Rusin | f04cf8a | 2011-04-12 23:21:52 -0400 | [diff] [blame] | 172 | SearchWidget *m_searchWidget; |
Zack Rusin | ca16411 | 2011-04-11 02:23:09 -0400 | [diff] [blame] | 173 | |
| 174 | TraceProcess *m_traceProcess; |
Zack Rusin | 963102f | 2011-04-15 01:45:05 -0400 | [diff] [blame] | 175 | |
Dan McCabe | 1c3ddde | 2012-03-21 09:53:45 -0700 | [diff] [blame] | 176 | TrimProcess *m_trimProcess; |
| 177 | |
Zack Rusin | 963102f | 2011-04-15 01:45:05 -0400 | [diff] [blame] | 178 | ArgumentsEditor *m_argsEditor; |
Zack Rusin | 3b7fbd7 | 2011-04-27 23:48:16 -0400 | [diff] [blame] | 179 | |
| 180 | ApiTraceEvent *m_nonDefaultsLookupEvent; |
James Benton | fc4f55a | 2012-08-08 17:09:07 +0100 | [diff] [blame] | 181 | |
| 182 | ProfileDialog* m_profileDialog; |
Zack Rusin | 601e837 | 2011-03-24 22:23:21 -0400 | [diff] [blame] | 183 | }; |