1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/* 2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc. 3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * 4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be 5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file. 6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */ 7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkDebuggerGUI.h" 97def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com#include "SkForceLinking.h" 10bbad34de3b117347bedea619feaf1685586d4202chudy@google.com#include "SkGraphics.h" 11b4467e642e1c0772940cb266cae46f5fda399952scroggo@google.com#include "SkImageDecoder.h" 12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include <QListWidgetItem> 132bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com#include "PictureRenderer.h" 142bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com#include "SkPictureRecord.h" 152bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com#include "SkPicturePlayback.h" 16e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com 177def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com__SK_FORCE_IMAGE_DECODER_LINKING; 187def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com 19e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#if defined(SK_BUILD_FOR_WIN32) 209ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein #include "SysTimer_windows.h" 21e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#elif defined(SK_BUILD_FOR_MAC) 229ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein #include "SysTimer_mach.h" 23e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) 249ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein #include "SysTimer_posix.h" 25e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#else 269ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein #include "SysTimer_c.h" 27e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#endif 28e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com 29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDebuggerGUI::SkDebuggerGUI(QWidget *parent) : 31c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QMainWindow(parent) 32bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org , fCentralSplitter(this) 332d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com , fStatusBar(this) 342d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com , fToolBar(this) 35c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionOpen(this) 36c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionBreakpoint(this) 3757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org , fActionToggleIndexStyle(this) 38d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com , fActionProfile(this) 39c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionCancel(this) 407e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com , fActionClearBreakpoints(this) 41e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com , fActionClearDeletes(this) 42c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionClose(this) 43e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com , fActionCreateBreakpoint(this) 44c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionDelete(this) 45c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionDirectory(this) 46c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionGoToLine(this) 47c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionInspector(this) 482ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com , fActionSettings(this) 49c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionPlay(this) 50e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com , fActionPause(this) 51c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionRewind(this) 520ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com , fActionSave(this) 530ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com , fActionSaveAs(this) 547e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com , fActionShowDeletes(this) 55c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionStepBack(this) 56c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fActionStepForward(this) 57a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com , fActionZoomIn(this) 58a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com , fActionZoomOut(this) 59a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com , fMapper(this) 60bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org , fListWidget(&fCentralSplitter) 61bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org , fDirectoryWidget(&fCentralSplitter) 62607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com , fCanvasWidget(this, &fDebugger) 636dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com , fImageWidget(&fDebugger) 64c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fMenuBar(this) 65c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fMenuFile(this) 66c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fMenuNavigate(this) 67c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com , fMenuView(this) 687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com , fBreakpointsActivated(false) 6957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org , fIndexStyleToggle(false) 707e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com , fDeletesActivated(false) 717e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com , fPause(false) 72d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com , fLoading(false) 73c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com{ 74902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com setupUi(this); 75dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com fListWidget.setSelectionMode(QAbstractItemView::ExtendedSelection); 76ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(registerListClick(QListWidgetItem *))); 77c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionOpen, SIGNAL(triggered()), this, SLOT(openFile())); 78ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fActionDirectory, SIGNAL(triggered()), this, SLOT(toggleDirectory())); 79ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fDirectoryWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(loadFile(QListWidgetItem *))); 80c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete())); 81ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(toggleBreakpoint())); 82c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind())); 83c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionPlay, SIGNAL(triggered()), this, SLOT(actionPlay())); 84c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionStepBack, SIGNAL(triggered()), this, SLOT(actionStepBack())); 85ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fActionStepForward, SIGNAL(triggered()), this, SLOT(actionStepForward())); 86ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fActionBreakpoint, SIGNAL(triggered()), this, SLOT(actionBreakpoints())); 8757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org connect(&fActionToggleIndexStyle, SIGNAL(triggered()), this, SLOT(actionToggleIndexStyle())); 88ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionInspector())); 892ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com connect(&fActionSettings, SIGNAL(triggered()), this, SLOT(actionSettings())); 90ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fFilter, SIGNAL(activated(QString)), this, SLOT(toggleFilter(QString))); 91d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com connect(&fActionProfile, SIGNAL(triggered()), this, SLOT(actionProfile())); 92c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionCancel, SIGNAL(triggered()), this, SLOT(actionCancel())); 937e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com connect(&fActionClearBreakpoints, SIGNAL(triggered()), this, SLOT(actionClearBreakpoints())); 947e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com connect(&fActionClearDeletes, SIGNAL(triggered()), this, SLOT(actionClearDeletes())); 95c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose())); 9622d39332bdba4e2e36aa050220392dcd33d81c19commit-bot@chromium.org connect(&fSettingsWidget, SIGNAL(visibilityFilterChanged()), this, SLOT(actionCommandFilter())); 97e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU 98fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org connect(&fSettingsWidget, SIGNAL(glSettingsChanged()), this, SLOT(actionGLWidget())); 99e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif 10032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com connect(&fSettingsWidget, SIGNAL(texFilterSettingsChanged()), this, SLOT(actionTextureFilter())); 101ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(fSettingsWidget.getRasterCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionRasterWidget(bool))); 102f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com connect(fSettingsWidget.getOverdrawVizCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionOverdrawVizWidget(bool))); 103768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org connect(fSettingsWidget.getMegaVizCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionMegaVizWidget(bool))); 1042a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org connect(fSettingsWidget.getPathOpsCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionPathOpsWidget(bool))); 105ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fActionPause, SIGNAL(toggled(bool)), this, SLOT(pauseDrawing(bool))); 106e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com connect(&fActionCreateBreakpoint, SIGNAL(activated()), this, SLOT(toggleBreakpoint())); 1077e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com connect(&fActionShowDeletes, SIGNAL(triggered()), this, SLOT(showDeletes())); 108ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fCanvasWidget, SIGNAL(hitChanged(int)), this, SLOT(selectCommand(int))); 109ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fCanvasWidget, SIGNAL(hitChanged(int)), &fSettingsWidget, SLOT(updateHit(int))); 110ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fCanvasWidget, SIGNAL(scaleFactorChanged(float)), this, SLOT(actionScale(float))); 111ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com connect(&fCanvasWidget, SIGNAL(commandChanged(int)), &fSettingsWidget, SLOT(updateCommand(int))); 1120ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com connect(&fActionSaveAs, SIGNAL(triggered()), this, SLOT(actionSaveAs())); 1130ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com connect(&fActionSave, SIGNAL(triggered()), this, SLOT(actionSave())); 1147e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 115e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com fMapper.setMapping(&fActionZoomIn, SkCanvasWidget::kIn_ZoomCommand); 116e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com fMapper.setMapping(&fActionZoomOut, SkCanvasWidget::kOut_ZoomCommand); 117a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com 118a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com connect(&fActionZoomIn, SIGNAL(triggered()), &fMapper, SLOT(map())); 119a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com connect(&fActionZoomOut, SIGNAL(triggered()), &fMapper, SLOT(map())); 120e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com connect(&fMapper, SIGNAL(mapped(int)), &fCanvasWidget, SLOT(zoom(int))); 121a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com 1227e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fInspectorWidget.setDisabled(true); 123d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuEdit.setDisabled(true); 124d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuNavigate.setDisabled(true); 125d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuView.setDisabled(true); 126bbad34de3b117347bedea619feaf1685586d4202chudy@google.com 127bbad34de3b117347bedea619feaf1685586d4202chudy@google.com SkGraphics::Init(); 128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 130bbad34de3b117347bedea619feaf1685586d4202chudy@google.comSkDebuggerGUI::~SkDebuggerGUI() { 131bbad34de3b117347bedea619feaf1685586d4202chudy@google.com SkGraphics::Term(); 132bbad34de3b117347bedea619feaf1685586d4202chudy@google.com} 133902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 134902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionBreakpoints() { 1357e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fBreakpointsActivated = !fBreakpointsActivated; 1367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 1377e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com QListWidgetItem *item = fListWidget.item(row); 1387e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com item->setHidden(item->checkState() == Qt::Unchecked && fBreakpointsActivated); 139902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 1407e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com} 141902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 14257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgvoid SkDebuggerGUI::actionToggleIndexStyle() { 14357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org fIndexStyleToggle = !fIndexStyleToggle; 14457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org SkListWidget* list = (SkListWidget*) fListWidget.itemDelegate(); 145db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com list->setIndexStyle(fIndexStyleToggle ? SkListWidget::kIndex_IndexStyle : 14657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org SkListWidget::kOffset_IndexStyle); 14757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org fListWidget.update(); 14857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org} 14957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 1507e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::showDeletes() { 1517e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fDeletesActivated = !fDeletesActivated; 152c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 153c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QListWidgetItem *item = fListWidget.item(row); 15457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org item->setHidden(fDebugger.isCommandVisible(row) && fDeletesActivated); 155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 1582bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com// The timed picture playback uses the SkPicturePlayback's profiling stubs 1592bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com// to time individual commands. The offsets are needed to map SkPicture 1602bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com// offsets to individual commands. 1612bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.comclass SkTimedPicturePlayback : public SkPicturePlayback { 1622bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.compublic: 163e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips static SkTimedPicturePlayback* CreateFromStream(SkStream* stream, const SkPictInfo& info, 16412705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com SkPicture::InstallPixelRefProc proc, 16512705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com const SkTDArray<bool>& deletedCommands) { 16612705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com // Mimics SkPicturePlayback::CreateFromStream 16712705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com SkAutoTDelete<SkTimedPicturePlayback> playback(SkNEW_ARGS(SkTimedPicturePlayback, 168e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips (deletedCommands, info))); 169e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips if (!playback->parseStream(stream, proc)) { 17012705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com return NULL; // we're invalid 17112705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com } 17212705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com return playback.detach(); 17312705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com } 17412705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com 175e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips SkTimedPicturePlayback(const SkTDArray<bool>& deletedCommands, 1768f831f262f5e57665587cb3033860eea39fe1621commit-bot@chromium.org const SkPictInfo& info) 177e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips : INHERITED(info) 178e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com , fSkipCommands(deletedCommands) 179e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com , fTot(0.0) 180e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com , fCurCommand(0) { 1816d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com fTimes.setCount(deletedCommands.count()); 1828a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fTypeTimes.setCount(LAST_DRAWTYPE_ENUM+1); 1838a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com this->resetTimes(); 1848a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 1858a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 1868a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com void resetTimes() { 1876d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com for (int i = 0; i < fTimes.count(); ++i) { 1888a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fTimes[i] = 0.0; 1892bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 1908a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com for (int i = 0; i < fTypeTimes.count(); ++i) { 1918a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fTypeTimes[i] = 0.0f; 1928a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 1938a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fTot = 0.0; 1942bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 1952bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 1962bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com int count() const { return fTimes.count(); } 1972bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 1982bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com double time(int index) const { return fTimes[index] / fTot; } 1992bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2008a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com const SkTDArray<double>* typeTimes() const { return &fTypeTimes; } 2018a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 2028a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com double totTime() const { return fTot; } 2038a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 2042bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.comprotected: 2059ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein SysTimer fTimer; 2065f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com SkTDArray<bool> fSkipCommands; // has the command been deleted in the GUI? 2072bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com SkTDArray<double> fTimes; // sum of time consumed for each command 2088a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkTDArray<double> fTypeTimes; // sum of time consumed for each type of command (e.g., drawPath) 2092bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com double fTot; // total of all times in 'fTimes' 2108a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com int fCurType; 2112bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com int fCurCommand; // the current command being executed/timed 2122bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2136d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com#ifdef SK_DEVELOPER 2146d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com virtual bool preDraw(int opIndex, int type) SK_OVERRIDE { 2156d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com fCurCommand = opIndex; 2162bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2175f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com if (fSkipCommands[fCurCommand]) { 2186d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com return true; 2195f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com } 2205f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com 2218a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fCurType = type; 2228a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // The SkDebugCanvas doesn't recognize these types. This class needs to 2238a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // convert or else we'll wind up with a mismatch between the type counts 2248a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // the debugger displays and the profile times. 2258a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com if (DRAW_POS_TEXT_TOP_BOTTOM == type) { 2268a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fCurType = DRAW_POS_TEXT; 2278a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } else if (DRAW_POS_TEXT_H_TOP_BOTTOM == type) { 2288a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fCurType = DRAW_POS_TEXT_H; 2298a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 2302bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 231e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#if defined(SK_BUILD_FOR_WIN32) 232e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // CPU timer doesn't work well on Windows 233e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com fTimer.startWall(); 234e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#else 235e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com fTimer.startCpu(); 236e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#endif 2375f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com 2386d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com return false; 2392bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 2402bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2416d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com virtual void postDraw(int opIndex) SK_OVERRIDE { 242e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com#if defined(SK_BUILD_FOR_WIN32) 243e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com // CPU timer doesn't work well on Windows 244e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com double time = fTimer.endWall(); 245e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com#else 246e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com double time = fTimer.endCpu(); 247e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com#endif 248e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com 2496d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com SkASSERT(opIndex == fCurCommand); 250e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com SkASSERT(fCurType <= LAST_DRAWTYPE_ENUM); 251e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com 252e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com fTimes[fCurCommand] += time; 253e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com fTypeTimes[fCurType] += time; 254e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com fTot += time; 2552bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 2566d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com#endif 2572bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2582bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.comprivate: 2592bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com typedef SkPicturePlayback INHERITED; 2602bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com}; 2612bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2622bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com// Wrap SkPicture to allow installation of an SkTimedPicturePlayback object 2632bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.comclass SkTimedPicture : public SkPicture { 2642bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.compublic: 265f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com static SkTimedPicture* CreateTimedPicture(SkStream* stream, 266f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com SkPicture::InstallPixelRefProc proc, 267f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com const SkTDArray<bool>& deletedCommands) { 2682bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com SkPictInfo info; 2696f4fb0f1296422a44d5d0dac155d82595dc5ebeccommit-bot@chromium.org if (!InternalOnly_StreamIsSKP(stream, &info)) { 270f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com return NULL; 2712bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 2722bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 273f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com // Check to see if there is a playback to recreate. 2742bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com if (stream->readBool()) { 2758f831f262f5e57665587cb3033860eea39fe1621commit-bot@chromium.org SkTimedPicturePlayback* playback = SkTimedPicturePlayback::CreateFromStream( 276e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips stream, 2778f831f262f5e57665587cb3033860eea39fe1621commit-bot@chromium.org info, proc, 27812705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com deletedCommands); 27912705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com if (NULL == playback) { 28012705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com return NULL; 28112705329d0807863d4d80cac0f02e543c26f24a1scroggo@google.com } 282e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips 283e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips return SkNEW_ARGS(SkTimedPicture, (playback, info.fWidth, info.fHeight)); 2842bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 2852bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 286e26e65e8f831f7a5626c92d11bbb8c2cec1f70derobertphillips return NULL; 2872bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 2882bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2898a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com void resetTimes() { ((SkTimedPicturePlayback*) fPlayback)->resetTimes(); } 2908a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 2912bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com int count() const { return ((SkTimedPicturePlayback*) fPlayback)->count(); } 2922bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2932bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // return the fraction of the total time this command consumed 2942bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com double time(int index) const { return ((SkTimedPicturePlayback*) fPlayback)->time(index); } 2952bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 2968a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com const SkTDArray<double>* typeTimes() const { return ((SkTimedPicturePlayback*) fPlayback)->typeTimes(); } 2978a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 2988a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com double totTime() const { return ((SkTimedPicturePlayback*) fPlayback)->totTime(); } 2998a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3002bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.comprivate: 3018a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // disallow default ctor b.c. we don't have a good way to setup the fPlayback ptr 3028a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkTimedPicture(); 303f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com // Private ctor only used by CreateTimedPicture, which has created the playback. 304f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com SkTimedPicture(SkTimedPicturePlayback* playback, int width, int height) 305f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com : INHERITED(playback, width, height) {} 3068a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // disallow the copy ctor - enabling would require copying code from SkPicture 3078a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkTimedPicture(const SkTimedPicture& src); 3088a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3092bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com typedef SkPicture INHERITED; 3102bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com}; 3112bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3128a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com// This is a simplification of PictureBenchmark's run with the addition of 3138a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com// clearing of the times after the first pass (in resetTimes) 3143458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.comvoid SkDebuggerGUI::run(SkTimedPicture* pict, 3153458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com sk_tools::PictureRenderer* renderer, 3168a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com int repeats) { 3178a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkASSERT(pict); 3188a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com if (NULL == pict) { 3198a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com return; 3208a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 3218a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3228a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkASSERT(renderer != NULL); 3238a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com if (NULL == renderer) { 3248a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com return; 3258a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 3268a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3273f0451772109959fcb79bacf2c9a03e0eb39ff27commit-bot@chromium.org renderer->init(pict, NULL, NULL, NULL, false); 3288a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3298a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com renderer->setup(); 330f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org renderer->render(); 33151c040ed1e8c50bec4297bbe25242f644b40b0b7commit-bot@chromium.org renderer->resetState(true); // flush, swapBuffers and Finish 3328a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3338a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // We throw this away the first batch of times to remove first time effects (such as paging in this program) 3348a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com pict->resetTimes(); 3358a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3368a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com for (int i = 0; i < repeats; ++i) { 3378a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com renderer->setup(); 338f5e315ccf1ae2941f7cf53fa53e5c8c4bb665fe1commit-bot@chromium.org renderer->render(); 33951c040ed1e8c50bec4297bbe25242f644b40b0b7commit-bot@chromium.org renderer->resetState(false); // flush & swapBuffers, but don't Finish 3408a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 34151c040ed1e8c50bec4297bbe25242f644b40b0b7commit-bot@chromium.org renderer->resetState(true); // flush, swapBuffers and Finish 3428a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 3438a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com renderer->end(); 3448a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com} 3458a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 346d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::actionProfile() { 3472bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // In order to profile we pass the command offsets (that were read-in 3482bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // in loadPicture by the SkOffsetPicture) to an SkTimedPlaybackPicture. 349884e60be30e20f38b3466a4697081187d2f1f814skia.committer@gmail.com // The SkTimedPlaybackPicture in turn passes the offsets to an 3502bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // SkTimedPicturePlayback object which uses them to track the performance 3512bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // of individual commands. 3522bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com if (fFileName.isEmpty()) { 3532bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com return; 3542bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 3552bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3562bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com SkFILEStream inputStream; 3572bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3582bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com inputStream.setPath(fFileName.c_str()); 3592bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com if (!inputStream.isValid()) { 3602bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com return; 3612bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 3622bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 363f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com SkAutoTUnref<SkTimedPicture> picture(SkTimedPicture::CreateTimedPicture(&inputStream, 364f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com &SkImageDecoder::DecodeMemory, fSkipCommands)); 365f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com if (NULL == picture.get()) { 3662bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com return; 3672bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 3682bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3698a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // For now this #if allows switching between tiled and simple rendering 3708a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com // modes. Eventually this will be accomplished via the GUI 371e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com#if 0 372e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // With the current batch of SysTimers, profiling in tiled mode 373e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // gets swamped by the timing overhead: 374e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // 375e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // tile mode simple mode 376e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // debugger 64.2ms 12.8ms 377e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // bench_pictures 16.9ms 12.4ms 378e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // 379e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // This is b.c. in tiled mode each command is called many more times 380e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com // but typically does less work on each invocation (due to clipping) 3812bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com sk_tools::TiledPictureRenderer* renderer = NULL; 3822bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3832bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com renderer = SkNEW(sk_tools::TiledPictureRenderer); 3842bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com renderer->setTileWidth(256); 3852bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com renderer->setTileHeight(256); 3868a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com#else 3878a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com sk_tools::SimplePictureRenderer* renderer = NULL; 3882bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 3898a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com renderer = SkNEW(sk_tools::SimplePictureRenderer); 3901447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com 3911447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com#if SK_SUPPORT_GPU 392fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org if (fSettingsWidget.isGLActive()) { 3931447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com renderer->setDeviceType(sk_tools::PictureRenderer::kGPU_DeviceType); 394fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org renderer->setSampleCount(fSettingsWidget.getGLSampleCount()); 3951447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com } 3961447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com#endif 3971447aa3f3b9a4c23ac1fbc70c476828966980c9drobertphillips@google.com 3988a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com#endif 3992bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 400e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com static const int kNumRepeats = 10; 401e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com 402f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com run(picture.get(), renderer, kNumRepeats); 4032bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 404f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com SkASSERT(picture->count() == fListWidget.count()); 4052bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 4062bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com // extract the individual command times from the SkTimedPlaybackPicture 407f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com for (int i = 0; i < picture->count(); ++i) { 408f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com double temp = picture->time(i); 4092bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 4102bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com QListWidgetItem* item = fListWidget.item(i); 4112bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 4122bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com item->setData(Qt::UserRole + 4, 100.0*temp); 4132bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com } 4148a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 415f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com setupOverviewText(picture->typeTimes(), picture->totTime(), kNumRepeats); 4162a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org setupClipStackText(); 417d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com} 418d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com 419902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionCancel() { 420c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 421c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.item(row)->setHidden(false); 422902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 423902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 424902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 4257e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearBreakpoints() { 4267e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 4277e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com QListWidgetItem* item = fListWidget.item(row); 4287e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com item->setCheckState(Qt::Unchecked); 4297e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com item->setData(Qt::DecorationRole, 4308e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com QPixmap(":/blank.png")); 4317e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com } 4327e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com} 4337e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 4347e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearDeletes() { 4357e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 4367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com QListWidgetItem* item = fListWidget.item(row); 4378e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com item->setData(Qt::UserRole + 2, QPixmap(":/blank.png")); 438607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fDebugger.setCommandVisible(row, true); 4395f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com fSkipCommands[row] = false; 4407e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com } 4417e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com if (fPause) { 4427e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fCanvasWidget.drawTo(fPausedRow); 4436dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 4447e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com } else { 4457e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fCanvasWidget.drawTo(fListWidget.currentRow()); 4466dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 4477e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com } 4487e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com} 4497e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 450902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionCommandFilter() { 45122d39332bdba4e2e36aa050220392dcd33d81c19commit-bot@chromium.org fDebugger.highlightCurrentCommand(fSettingsWidget.getVisibilityFilter()); 452c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fCanvasWidget.drawTo(fListWidget.currentRow()); 4536dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 454902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 455902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 456902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionClose() { 457902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com this->close(); 458902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 459902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 460902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionDelete() { 4617e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 462dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com for (int row = 0; row < fListWidget.count(); ++row) { 463dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com QListWidgetItem* item = fListWidget.item(row); 464dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com 465dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com if (!item->isSelected()) { 466dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com continue; 467dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com } 468dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com 469dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com if (fDebugger.isCommandVisible(row)) { 470dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com item->setData(Qt::UserRole + 2, QPixmap(":/delete.png")); 471dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com fDebugger.setCommandVisible(row, false); 472dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com fSkipCommands[row] = true; 473dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com } else { 474dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com item->setData(Qt::UserRole + 2, QPixmap(":/blank.png")); 475dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com fDebugger.setCommandVisible(row, true); 476dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com fSkipCommands[row] = false; 477dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com } 478902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 4797e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 480dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com int currentRow = fListWidget.currentRow(); 481dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com 482e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com if (fPause) { 483e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fCanvasWidget.drawTo(fPausedRow); 4846dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 485e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com } else { 486e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fCanvasWidget.drawTo(currentRow); 4876dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 488e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com } 489902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 490902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 491e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU 492fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.orgvoid SkDebuggerGUI::actionGLWidget() { 493fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org bool isToggled = fSettingsWidget.isGLActive(); 494fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org if (isToggled) { 495fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org fCanvasWidget.setGLSampleCount(fSettingsWidget.getGLSampleCount()); 496fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org } 497ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kGPU_WidgetType, !isToggled); 498ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com} 499e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif 500ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com 501902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionInspector() { 502c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com if (fInspectorWidget.isHidden()) { 503c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fInspectorWidget.setHidden(false); 5046dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.setHidden(false); 505902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } else { 506c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fInspectorWidget.setHidden(true); 5076dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.setHidden(true); 508902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 509902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 510902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 511902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionPlay() { 512c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com for (int row = fListWidget.currentRow() + 1; row < fListWidget.count(); 5137dcae67cae277549accdd38d0496b72d00151239chudy@google.com row++) { 514c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QListWidgetItem *item = fListWidget.item(row); 515902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com if (item->checkState() == Qt::Checked) { 516c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setCurrentItem(item); 517902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com return; 518902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 519902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 520c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setCurrentRow(fListWidget.count() - 1); 521902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 522902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 523ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.comvoid SkDebuggerGUI::actionRasterWidget(bool isToggled) { 524ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kRaster_8888_WidgetType, !isToggled); 525ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com} 526ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com 527f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.comvoid SkDebuggerGUI::actionOverdrawVizWidget(bool isToggled) { 528f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com fDebugger.setOverdrawViz(isToggled); 529f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com fCanvasWidget.update(); 530f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com} 531f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com 532768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.orgvoid SkDebuggerGUI::actionMegaVizWidget(bool isToggled) { 533768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org fDebugger.setMegaViz(isToggled); 534768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org fCanvasWidget.update(); 535768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org} 536768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org 5372a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.orgvoid SkDebuggerGUI::actionPathOpsWidget(bool isToggled) { 5382a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org fDebugger.setPathOps(isToggled); 5392a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org fCanvasWidget.update(); 5402a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org} 5412a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org 54232bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.comvoid SkDebuggerGUI::actionTextureFilter() { 54332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com SkPaint::FilterLevel level; 54432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com bool enabled = fSettingsWidget.getFilterOverride(&level); 54532bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com fDebugger.setTexFilterOverride(enabled, level); 54632bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com fCanvasWidget.update(); 54732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com} 54832bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com 549902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionRewind() { 550e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fListWidget.setCurrentRow(0); 551902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 552902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 5530ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSave() { 554e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com fFileName = fPath.toAscii().data(); 555d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fFileName.append("/"); 556e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com fFileName.append(fDirectoryWidget.currentItem()->text().toAscii().data()); 557d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com saveToFile(fFileName); 5580ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com} 5590ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com 5600ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSaveAs() { 5610ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com QString filename = QFileDialog::getSaveFileName(this, "Save File", "", 5620ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com "Skia Picture (*skp)"); 56338b08ce020f451a66263110b32e70f5022df4f83chudy@google.com if (!filename.endsWith(".skp", Qt::CaseInsensitive)) { 5640ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com filename.append(".skp"); 5650ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com } 566c3c8216949146641222f7d2f7a464340627ae43adjsollen@google.com saveToFile(SkString(filename.toAscii().data())); 5670ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com} 5680ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com 5697dcae67cae277549accdd38d0496b72d00151239chudy@google.comvoid SkDebuggerGUI::actionScale(float scaleFactor) { 570c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fSettingsWidget.setZoomText(scaleFactor); 5717dcae67cae277549accdd38d0496b72d00151239chudy@google.com} 5727dcae67cae277549accdd38d0496b72d00151239chudy@google.com 573902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionSettings() { 574c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com if (fSettingsWidget.isHidden()) { 575c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fSettingsWidget.setHidden(false); 576902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } else { 577c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fSettingsWidget.setHidden(true); 578902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 579902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 580902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 581902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepBack() { 582c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com int currentRow = fListWidget.currentRow(); 583902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com if (currentRow != 0) { 584c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setCurrentRow(currentRow - 1); 585902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 586902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 587902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 588902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepForward() { 589c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com int currentRow = fListWidget.currentRow(); 590902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QString curRow = QString::number(currentRow); 591c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QString curCount = QString::number(fListWidget.count()); 592c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com if (currentRow < fListWidget.count() - 1) { 593c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setCurrentRow(currentRow + 1); 594902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 595902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 596902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 597a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.comvoid SkDebuggerGUI::drawComplete() { 598607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fInspectorWidget.setMatrix(fDebugger.getCurrentMatrix()); 599607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fInspectorWidget.setClip(fDebugger.getCurrentClip()); 600a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com} 601a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com 602d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::saveToFile(const SkString& filename) { 603d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com SkFILEWStream file(filename.c_str()); 60425bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com SkAutoTUnref<SkPicture> copy(fDebugger.copyPicture()); 60525bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com 60625bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com copy->serialize(&file); 6070ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com} 6080ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com 609902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::loadFile(QListWidgetItem *item) { 610902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com if (fDirectoryWidgetActive) { 611e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com fFileName = fPath.toAscii().data(); 6120ac6f168f15393a3213c1c95f8adc4434132dcb2jvanverth@google.com // don't add a '/' to files in the local directory 6130ac6f168f15393a3213c1c95f8adc4434132dcb2jvanverth@google.com if (fFileName.size() > 0) { 6140ac6f168f15393a3213c1c95f8adc4434132dcb2jvanverth@google.com fFileName.append("/"); 6150ac6f168f15393a3213c1c95f8adc4434132dcb2jvanverth@google.com } 616e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com fFileName.append(item->text().toAscii().data()); 617d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com loadPicture(fFileName); 618902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 619902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 620902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 621902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::openFile() { 622d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com QString temp = QFileDialog::getOpenFileName(this, tr("Open File"), "", 6237dcae67cae277549accdd38d0496b72d00151239chudy@google.com tr("Files (*.*)")); 624ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com openFile(temp); 625ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com} 626ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com 627ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::openFile(const QString &filename) { 628902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com fDirectoryWidgetActive = false; 629ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com if (!filename.isEmpty()) { 630ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com QFileInfo pathInfo(filename); 631ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com loadPicture(SkString(filename.toAscii().data())); 632ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com setupDirectoryWidget(pathInfo.path()); 633902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 634902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com fDirectoryWidgetActive = true; 635902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 636902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 637c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.comvoid SkDebuggerGUI::pauseDrawing(bool isPaused) { 638607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fPause = isPaused; 639607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fPausedRow = fListWidget.currentRow(); 640607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fCanvasWidget.drawTo(fPausedRow); 6416dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 6427dcae67cae277549accdd38d0496b72d00151239chudy@google.com} 6437dcae67cae277549accdd38d0496b72d00151239chudy@google.com 644902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::registerListClick(QListWidgetItem *item) { 645d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com if(!fLoading) { 646d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com int currentRow = fListWidget.currentRow(); 647ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com 648ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com if (currentRow != -1) { 649ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com if (!fPause) { 650ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com fCanvasWidget.drawTo(currentRow); 6516dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fImageWidget.draw(); 652ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com } 65397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo( 654ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com currentRow); 655ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com 656ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com /* TODO(chudy): Add command type before parameters. Rename v 657ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com * to something more informative. */ 65897cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com if (currInfo) { 659ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com QString info; 660ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com info.append("<b>Parameters: </b><br/>"); 66197cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com for (int i = 0; i < currInfo->count(); i++) { 66297cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com 66397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com info.append(QString((*currInfo)[i]->c_str())); 664ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com info.append("<br/>"); 665ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com } 6666bd109a39370d21bfd4b48f5a28df8bcfc7f5ba2chudy@google.com fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType); 667ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com fInspectorWidget.setDisabled(false); 668d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com } 6692a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org setupClipStackText(); 670902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 671ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com 672902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 673902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 674902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 6759ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.comvoid SkDebuggerGUI::selectCommand(int command) { 6769ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com if (fPause) { 6779ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com fListWidget.setCurrentRow(command); 6789ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com } 6799ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com} 6809ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com 681902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleBreakpoint() { 682c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QListWidgetItem* item = fListWidget.currentItem(); 683902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com if (item->checkState() == Qt::Unchecked) { 684902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com item->setCheckState(Qt::Checked); 685e565de4fad5598890124daadf385930043269415chudy@google.com item->setData(Qt::DecorationRole, 6868e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com QPixmap(":/breakpoint_16x16.png")); 687902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } else { 688902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com item->setCheckState(Qt::Unchecked); 689e565de4fad5598890124daadf385930043269415chudy@google.com item->setData(Qt::DecorationRole, 6908e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com QPixmap(":/blank.png")); 691902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 692902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 693902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 694902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleDirectory() { 695607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fDirectoryWidget.setHidden(!fDirectoryWidget.isHidden()); 696902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 697902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 698902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleFilter(QString string) { 699c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com for (int row = 0; row < fListWidget.count(); row++) { 700c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QListWidgetItem *item = fListWidget.item(row); 701607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com item->setHidden(item->text() != string); 702902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 703902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 704902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 705902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) { 706902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QIcon windowIcon; 7078e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com windowIcon.addFile(QString::fromUtf8(":/skia.png"), QSize(), 7087dcae67cae277549accdd38d0496b72d00151239chudy@google.com QIcon::Normal, QIcon::Off); 709902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com SkDebuggerGUI->setObjectName(QString::fromUtf8("SkDebuggerGUI")); 710902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com SkDebuggerGUI->resize(1200, 1000); 711902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com SkDebuggerGUI->setWindowIcon(windowIcon); 712c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com SkDebuggerGUI->setWindowTitle("Skia Debugger"); 713902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 714e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionOpen.setShortcuts(QKeySequence::Open); 715c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionOpen.setText("Open"); 716902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 717c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon breakpoint; 7188e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com breakpoint.addFile(QString::fromUtf8(":/breakpoint.png"), 7197dcae67cae277549accdd38d0496b72d00151239chudy@google.com QSize(), QIcon::Normal, QIcon::Off); 720e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B"))); 721c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionBreakpoint.setIcon(breakpoint); 7227e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionBreakpoint.setText("Breakpoints"); 723902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 72457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org fActionToggleIndexStyle.setShortcut(QKeySequence(tr("Ctrl+T"))); 72557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org fActionToggleIndexStyle.setText("Toggle Index Style"); 72657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 727c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon cancel; 7288e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com cancel.addFile(QString::fromUtf8(":/reload.png"), QSize(), 7297dcae67cae277549accdd38d0496b72d00151239chudy@google.com QIcon::Normal, QIcon::Off); 730c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionCancel.setIcon(cancel); 731c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionCancel.setText("Clear Filter"); 732902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 7337e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B"))); 7347e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionClearBreakpoints.setText("Clear Breakpoints"); 7357e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 7367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X"))); 7377e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionClearDeletes.setText("Clear Deletes"); 7387e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 739e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionClose.setShortcuts(QKeySequence::Quit); 740c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionClose.setText("Exit"); 741902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 742e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionCreateBreakpoint.setShortcut(QKeySequence(tr("B"))); 743e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionCreateBreakpoint.setText("Set Breakpoint"); 744e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 745e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionDelete.setShortcut(QKeySequence(tr("X"))); 746c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionDelete.setText("Delete Command"); 747902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 748e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionDirectory.setShortcut(QKeySequence(tr("Ctrl+D"))); 749e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionDirectory.setText("Directory"); 750902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 751d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com QIcon profile; 752d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com profile.addFile(QString::fromUtf8(":/profile.png"), QSize(), 753d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com QIcon::Normal, QIcon::Off); 754d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fActionProfile.setIcon(profile); 755d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fActionProfile.setText("Profile"); 756e099bc403ca85be61cf23e67661e6a795fbcc40arobertphillips@google.com fActionProfile.setDisabled(true); 757d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com 758902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QIcon inspector; 759d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com inspector.addFile(QString::fromUtf8(":/inspector.png"), 7607dcae67cae277549accdd38d0496b72d00151239chudy@google.com QSize(), QIcon::Normal, QIcon::Off); 761e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionInspector.setShortcut(QKeySequence(tr("Ctrl+I"))); 762c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionInspector.setIcon(inspector); 763e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionInspector.setText("Inspector"); 764902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 7652ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com QIcon settings; 7662ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com settings.addFile(QString::fromUtf8(":/inspector.png"), 7672ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com QSize(), QIcon::Normal, QIcon::Off); 7682ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com fActionSettings.setShortcut(QKeySequence(tr("Ctrl+G"))); 7692ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com fActionSettings.setIcon(settings); 7702ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com fActionSettings.setText("Settings"); 7710d55dd7d2c07a77b22478bed9b30ff44ceecad68skia.committer@gmail.com 772c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon play; 773d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com play.addFile(QString::fromUtf8(":/play.png"), QSize(), 7747dcae67cae277549accdd38d0496b72d00151239chudy@google.com QIcon::Normal, QIcon::Off); 775e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionPlay.setShortcut(QKeySequence(tr("Ctrl+P"))); 776c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionPlay.setIcon(play); 777c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionPlay.setText("Play"); 778902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 779e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com QIcon pause; 780d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com pause.addFile(QString::fromUtf8(":/pause.png"), QSize(), 7817dcae67cae277549accdd38d0496b72d00151239chudy@google.com QIcon::Normal, QIcon::Off); 782e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionPause.setShortcut(QKeySequence(tr("Space"))); 783e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionPause.setCheckable(true); 784e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionPause.setIcon(pause); 785e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionPause.setText("Pause"); 786e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 787c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon rewind; 7888e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com rewind.addFile(QString::fromUtf8(":/rewind.png"), QSize(), 789c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon::Normal, QIcon::Off); 790e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionRewind.setShortcut(QKeySequence(tr("Ctrl+R"))); 791c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionRewind.setIcon(rewind); 792c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionRewind.setText("Rewind"); 793902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 7940ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSave.setShortcut(QKeySequence::Save); 7950ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSave.setText("Save"); 7960ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSave.setDisabled(true); 7970ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSaveAs.setShortcut(QKeySequence::SaveAs); 7980ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSaveAs.setText("Save As"); 7990ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSaveAs.setDisabled(true); 8000ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com 8017e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X"))); 8027e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fActionShowDeletes.setText("Deleted Commands"); 8037e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com 804c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon stepBack; 8058e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com stepBack.addFile(QString::fromUtf8(":/previous.png"), QSize(), 8067dcae67cae277549accdd38d0496b72d00151239chudy@google.com QIcon::Normal, QIcon::Off); 807e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionStepBack.setShortcut(QKeySequence(tr("["))); 808c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionStepBack.setIcon(stepBack); 809c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionStepBack.setText("Step Back"); 810902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 811c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QIcon stepForward; 8128e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com stepForward.addFile(QString::fromUtf8(":/next.png"), 813c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QSize(), QIcon::Normal, QIcon::Off); 814e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fActionStepForward.setShortcut(QKeySequence(tr("]"))); 815c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionStepForward.setIcon(stepForward); 816c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionStepForward.setText("Step Forward"); 817c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com 818a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fActionZoomIn.setShortcut(QKeySequence(tr("Ctrl+="))); 819a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fActionZoomIn.setText("Zoom In"); 820a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fActionZoomOut.setShortcut(QKeySequence(tr("Ctrl+-"))); 821a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fActionZoomOut.setText("Zoom Out"); 822a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com 823c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setItemDelegate(new SkListWidget(&fListWidget)); 824c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.setObjectName(QString::fromUtf8("listWidget")); 825bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fListWidget.setMinimumWidth(250); 826902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 827c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fFilter.addItem("--Filter By Available Commands--"); 828902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 829bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fDirectoryWidget.setMinimumWidth(250); 830c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fDirectoryWidget.setStyleSheet("QListWidget::Item {padding: 5px;}"); 831902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 832c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fCanvasWidget.setSizePolicy(QSizePolicy::Expanding, 8337dcae67cae277549accdd38d0496b72d00151239chudy@google.com QSizePolicy::Expanding); 834902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 8351c9c0d37111e6ff7a74a2908bf62a0d3954f2bb5skia.committer@gmail.com fImageWidget.setFixedSize(SkImageWidget::kImageWidgetWidth, 8366dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com SkImageWidget::kImageWidgetHeight); 8376dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com 838c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fInspectorWidget.setSizePolicy(QSizePolicy::Expanding, 8397dcae67cae277549accdd38d0496b72d00151239chudy@google.com QSizePolicy::Expanding); 840c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fInspectorWidget.setMaximumHeight(300); 841c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com 8426dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fSettingsAndImageLayout.setSpacing(6); 8436dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fSettingsAndImageLayout.addWidget(&fSettingsWidget); 8446dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fSettingsAndImageLayout.addWidget(&fImageWidget); 8456dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com 846c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fSettingsWidget.setSizePolicy(QSizePolicy::Expanding, 847c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QSizePolicy::Expanding); 848c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fSettingsWidget.setMaximumWidth(250); 849c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com 850bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fLeftColumnSplitter.addWidget(&fListWidget); 851bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fLeftColumnSplitter.addWidget(&fDirectoryWidget); 852bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fLeftColumnSplitter.setOrientation(Qt::Vertical); 853902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 8546dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fCanvasSettingsAndImageLayout.setSpacing(6); 8556dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fCanvasSettingsAndImageLayout.addWidget(&fCanvasWidget); 8566dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fCanvasSettingsAndImageLayout.addLayout(&fSettingsAndImageLayout); 8576dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com 858c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMainAndRightColumnLayout.setSpacing(6); 8596dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com fMainAndRightColumnLayout.addLayout(&fCanvasSettingsAndImageLayout); 860c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMainAndRightColumnLayout.addWidget(&fInspectorWidget); 861bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fMainAndRightColumnWidget.setLayout(&fMainAndRightColumnLayout); 862902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 863bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fCentralSplitter.addWidget(&fLeftColumnSplitter); 864bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fCentralSplitter.addWidget(&fMainAndRightColumnWidget); 865bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fCentralSplitter.setStretchFactor(0, 0); 866bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org fCentralSplitter.setStretchFactor(1, 1); 867902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 868bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org SkDebuggerGUI->setCentralWidget(&fCentralSplitter); 869c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com SkDebuggerGUI->setStatusBar(&fStatusBar); 870902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 871e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fToolBar.setIconSize(QSize(32, 32)); 872c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.setToolButtonStyle(Qt::ToolButtonTextUnderIcon); 873c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com SkDebuggerGUI->addToolBar(Qt::TopToolBarArea, &fToolBar); 874902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 8750ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 876902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 877c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addAction(&fActionRewind); 878c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addAction(&fActionStepBack); 879e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fToolBar.addAction(&fActionPause); 880c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addAction(&fActionStepForward); 881c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addAction(&fActionPlay); 882c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addSeparator(); 883e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fToolBar.addAction(&fActionInspector); 8842ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com fToolBar.addAction(&fActionSettings); 885c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addSeparator(); 886d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fToolBar.addAction(&fActionProfile); 887d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com 888d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fToolBar.addSeparator(); 8890ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fToolBar.addWidget(&fSpacer); 890c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addWidget(&fFilter); 891c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fToolBar.addAction(&fActionCancel); 892902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 893902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com // TODO(chudy): Remove static call. 894902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com fDirectoryWidgetActive = false; 895d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fFileName = ""; 896ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com setupDirectoryWidget(""); 897902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com fDirectoryWidgetActive = true; 898902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 899902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com // Menu Bar 900c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuFile.setTitle("File"); 901c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuFile.addAction(&fActionOpen); 9020ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fMenuFile.addAction(&fActionSave); 9030ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fMenuFile.addAction(&fActionSaveAs); 904c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuFile.addAction(&fActionClose); 905e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 906e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuEdit.setTitle("Edit"); 907e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuEdit.addAction(&fActionDelete); 9087e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fMenuEdit.addAction(&fActionClearDeletes); 9097e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fMenuEdit.addSeparator(); 910e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuEdit.addAction(&fActionCreateBreakpoint); 9117e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fMenuEdit.addAction(&fActionClearBreakpoints); 912e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 913c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuNavigate.setTitle("Navigate"); 914e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuNavigate.addAction(&fActionRewind); 915e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuNavigate.addAction(&fActionStepBack); 916e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuNavigate.addAction(&fActionStepForward); 917e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuNavigate.addAction(&fActionPlay); 918e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuNavigate.addAction(&fActionPause); 919c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuNavigate.addAction(&fActionGoToLine); 920e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 921c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuView.setTitle("View"); 922e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuView.addAction(&fActionBreakpoint); 9237e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fMenuView.addAction(&fActionShowDeletes); 92457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org fMenuView.addAction(&fActionToggleIndexStyle); 925a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fMenuView.addAction(&fActionZoomIn); 926a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com fMenuView.addAction(&fActionZoomOut); 927e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com 928e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuWindows.setTitle("Window"); 929e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuWindows.addAction(&fActionInspector); 9302ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com fMenuWindows.addAction(&fActionSettings); 931e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuWindows.addAction(&fActionDirectory); 932c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com 933c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionGoToLine.setText("Go to Line..."); 934c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fActionGoToLine.setDisabled(true); 935c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuBar.addAction(fMenuFile.menuAction()); 936e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuBar.addAction(fMenuEdit.menuAction()); 937c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuBar.addAction(fMenuView.menuAction()); 938c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fMenuBar.addAction(fMenuNavigate.menuAction()); 939e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com fMenuBar.addAction(fMenuWindows.menuAction()); 940902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 9417dcae67cae277549accdd38d0496b72d00151239chudy@google.com fPause = false; 9427dcae67cae277549accdd38d0496b72d00151239chudy@google.com 943c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com SkDebuggerGUI->setMenuBar(&fMenuBar); 944902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QMetaObject::connectSlotsByName(SkDebuggerGUI); 945902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 946902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 947ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::setupDirectoryWidget(const QString& path) { 948ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com fPath = path; 949ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com QDir dir(path); 950902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QRegExp r(".skp"); 951c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fDirectoryWidget.clear(); 952c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com const QStringList files = dir.entryList(); 953902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com foreach (QString f, files) { 9547dcae67cae277549accdd38d0496b72d00151239chudy@google.com if (f.contains(r)) 955c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fDirectoryWidget.addItem(f); 956902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 957902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 958902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 959d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::loadPicture(const SkString& fileName) { 960d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com fFileName = fileName; 961d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fLoading = true; 962d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com SkStream* stream = SkNEW_ARGS(SkFILEStream, (fileName.c_str())); 9632d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com 964f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com SkPicture* picture = SkPicture::CreateFromStream(stream); 9652d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com 966f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com if (NULL == picture) { 9672d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com QMessageBox::critical(this, "Error loading file", "Couldn't read file, sorry."); 9682d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com SkSafeUnref(stream); 9692d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com return; 9702d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com } 9712bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 972686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com fCanvasWidget.resetWidgetTransform(); 973607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com fDebugger.loadPicture(picture); 9744c7962e0a866b8416fa7046791c129eb5430b677chudy@google.com 9756d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com fSkipCommands.setCount(fDebugger.getSize()); 9766d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com for (int i = 0; i < fSkipCommands.count(); ++i) { 9775f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com fSkipCommands[i] = false; 9785f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com } 9795f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com 980607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com SkSafeUnref(stream); 981607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com SkSafeUnref(picture); 982607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com 98397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com // Will this automatically clear out due to nature of refcnt? 9848a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com SkTArray<SkString>* commands = fDebugger.getDrawCommandsAsStrings(); 98557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org SkTDArray<size_t>* offsets = fDebugger.getDrawCommandOffsets(); 98657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org SkASSERT(commands->count() == offsets->count()); 987607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com 9886d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com fActionProfile.setDisabled(false); 9892bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com 9907dcae67cae277549accdd38d0496b72d00151239chudy@google.com /* fDebugCanvas is reinitialized every load picture. Need it to retain value 991607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * of the visibility filter. 992607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * TODO(chudy): This should be deprecated since fDebugger is not 993607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * recreated. 994607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * */ 99522d39332bdba4e2e36aa050220392dcd33d81c19commit-bot@chromium.org fDebugger.highlightCurrentCommand(fSettingsWidget.getVisibilityFilter()); 996607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com 99757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org this->setupListWidget(commands, offsets); 99857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org this->setupComboBox(commands); 99957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org this->setupOverviewText(NULL, 0.0, 1); 10007e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com fInspectorWidget.setDisabled(false); 1001e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com fSettingsWidget.setDisabled(false); 1002d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuEdit.setDisabled(false); 1003d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuNavigate.setDisabled(false); 1004d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fMenuView.setDisabled(false); 10050ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSave.setDisabled(false); 10060ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com fActionSaveAs.setDisabled(false); 1007d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com fLoading = false; 1008d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com actionPlay(); 1009902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 1010902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 101157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgvoid SkDebuggerGUI::setupListWidget(SkTArray<SkString>* commands, SkTDArray<size_t>* offsets) { 101257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org SkASSERT(commands->count() == offsets->count()); 1013c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.clear(); 1014902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com int counter = 0; 101530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com int indent = 0; 101657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org for (int i = 0; i < commands->count(); i++) { 1017902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QListWidgetItem *item = new QListWidgetItem(); 101857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org item->setData(Qt::DisplayRole, (*commands)[i].c_str()); 1019902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com item->setData(Qt::UserRole + 1, counter++); 102030d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com 102157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org if (0 == strcmp("Restore", (*commands)[i].c_str()) || 102257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 0 == strcmp("EndCommentGroup", (*commands)[i].c_str()) || 102357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 0 == strcmp("PopCull", (*commands)[i].c_str())) { 102430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com indent -= 10; 102530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com } 102630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com 102730d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com item->setData(Qt::UserRole + 3, indent); 102830d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com 102957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org if (0 == strcmp("Save", (*commands)[i].c_str()) || 103057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 0 == strcmp("Save Layer", (*commands)[i].c_str()) || 103157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 0 == strcmp("BeginCommentGroup", (*commands)[i].c_str()) || 103257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org 0 == strcmp("PushCull", (*commands)[i].c_str())) { 103330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com indent += 10; 103430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com } 103530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com 103657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org item->setData(Qt::UserRole + 4, -1); 103757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org item->setData(Qt::UserRole + 5, (int)(*offsets)[i]); 1038d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com 1039c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fListWidget.addItem(item); 1040902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com } 1041902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 1042902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 104391274b99722d9be62e077ab979c630c23cdd04b1skia.committer@gmail.comvoid SkDebuggerGUI::setupOverviewText(const SkTDArray<double>* typeTimes, 1044e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com double totTime, 1045e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com int numRuns) { 10462d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com SkString overview; 1047e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com fDebugger.getOverviewText(typeTimes, totTime, &overview, numRuns); 10482d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com fInspectorWidget.setText(overview.c_str(), SkInspectorWidget::kOverview_TabType); 10498a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com} 10508a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 10512a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.orgvoid SkDebuggerGUI::setupClipStackText() { 10522a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org SkString clipStack; 10532a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org fDebugger.getClipStackText(&clipStack); 10542a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org fInspectorWidget.setText(clipStack.c_str(), SkInspectorWidget::kClipStack_TabType); 10552a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org} 10562a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org 10578a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.comvoid SkDebuggerGUI::setupComboBox(SkTArray<SkString>* command) { 10588a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fFilter.clear(); 10598a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fFilter.addItem("--Filter By Available Commands--"); 10608a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 10618a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com std::map<std::string, int> map; 10628a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com for (int i = 0; i < command->count(); i++) { 10638a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com map[(*command)[i].c_str()]++; 10648a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 10658a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com 10663458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com for (std::map<std::string, int>::iterator it = map.begin(); it != map.end(); 10678a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com ++it) { 10688a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com fFilter.addItem((it->first).c_str()); 10698a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com } 1070902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com 1071902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com // NOTE(chudy): Makes first item unselectable. 10727dcae67cae277549accdd38d0496b72d00151239chudy@google.com QStandardItemModel* model = qobject_cast<QStandardItemModel*>( 1073c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fFilter.model()); 1074c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com QModelIndex firstIndex = model->index(0, fFilter.modelColumn(), 1075c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com fFilter.rootModelIndex()); 1076902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com QStandardItem* firstItem = model->itemFromIndex(firstIndex); 1077902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com firstItem->setSelectable(false); 1078902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com} 1079