diff --git a/BUILD.gn b/BUILD.gn index cd0a7c6ac9..21c3bb8837 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -2900,67 +2900,6 @@ if (skia_enable_tools) { } } - if (skia_qt_path != "" && (is_win || is_linux || is_mac)) { - action_foreach("generate_mocs") { - script = "gn/call.py" - sources = [ "tools/mdbviz/MainWindow.h" ] - outputs = [ "$target_gen_dir/mdbviz/{{source_name_part}}_moc.cpp" ] - args = [ - "$skia_qt_path" + "/bin/moc", - "{{source}}", - "-o", - "gen/mdbviz/{{source_name_part}}_moc.cpp", - ] - } - action_foreach("generate_resources") { - script = "gn/call.py" - sources = [ "tools/mdbviz/resources.qrc" ] - outputs = [ "$target_gen_dir/mdbviz/{{source_name_part}}_res.cpp" ] - args = [ - "$skia_qt_path" + "/bin/rcc", - "{{source}}", - "-o", - "gen/mdbviz/{{source_name_part}}_res.cpp", - ] - } - test_app("mdbviz") { - if (is_win) { - # on Windows we need to disable some exception handling warnings due to the Qt headers - cflags = [ "/Wv:18" ] # 18 -> VS2013, 19 -> VS2015, 1910 -> VS2017 - } - sources = [ - "tools/UrlDataManager.cpp", - "tools/debugger/DebugCanvas.cpp", - "tools/debugger/DebugLayerManager.cpp", - "tools/debugger/DrawCommand.cpp", - "tools/debugger/JsonWriteBuffer.cpp", - "tools/mdbviz/MainWindow.cpp", - "tools/mdbviz/Model.cpp", - "tools/mdbviz/main.cpp", - - # generated files - "$target_gen_dir/mdbviz/MainWindow_moc.cpp", - "$target_gen_dir/mdbviz/resources_res.cpp", - ] - lib_dirs = [ "$skia_qt_path/lib" ] - libs = [ - "Qt5Core.lib", - "Qt5Gui.lib", - "Qt5Widgets.lib", - ] - include_dirs = [ - "$skia_qt_path/include", - "$skia_qt_path/include/QtCore", - "$skia_qt_path/include/QtWidgets", - ] - deps = [ - ":generate_mocs", - ":generate_resources", - ":skia", - ] - } - } - if (is_android && defined(ndk) && ndk != "") { copy("gdbserver") { sources = [ "$ndk/$ndk_gdbserver" ] diff --git a/gn/skia.gni b/gn/skia.gni index f6ed7a8c0f..7267d2a309 100644 --- a/gn/skia.gni +++ b/gn/skia.gni @@ -36,7 +36,6 @@ declare_args() { skia_include_multiframe_procs = false skia_lex = false skia_libgifcodec_path = "third_party/externals/libgifcodec" - skia_qt_path = getenv("QT_PATH") skia_tools_require_resources = false skia_update_fuchsia_sdk = false skia_use_angle = false diff --git a/tools/check-headers-self-sufficient b/tools/check-headers-self-sufficient index ae4f0203ae..abdce76292 100755 --- a/tools/check-headers-self-sufficient +++ b/tools/check-headers-self-sufficient @@ -56,7 +56,6 @@ ignore = re.compile('|'.join([ r'third_party/.*', r'tools/fiddle/.*', r'tools/gpu/vk/.*', - r'tools/mdbviz/.*', r'tools/sk_app/.*', r'tools/viewer/.*', ])) diff --git a/tools/mdbviz/BUILD.bazel b/tools/mdbviz/BUILD.bazel deleted file mode 100644 index 1c75571c84..0000000000 --- a/tools/mdbviz/BUILD.bazel +++ /dev/null @@ -1,47 +0,0 @@ -load("//bazel:macros.bzl", "generated_cc_atom") - -licenses(["notice"]) - -generated_cc_atom( - name = "Model_hdr", - hdrs = ["Model.h"], - visibility = ["//:__subpackages__"], - deps = [ - "//include/core:SkBitmap_hdr", - "//include/private:SkTDArray_hdr", - ], -) - -generated_cc_atom( - name = "Model_src", - srcs = ["Model.cpp"], - visibility = ["//:__subpackages__"], - deps = [ - ":Model_hdr", - "//include/core:SkBitmap_hdr", - "//include/core:SkCanvas_hdr", - "//include/core:SkPicture_hdr", - "//include/core:SkStream_hdr", - "//tools/debugger:DebugCanvas_hdr", - ], -) - -generated_cc_atom( - name = "main_src", - srcs = ["main.cpp"], - visibility = ["//:__subpackages__"], - deps = [":mainwindow_hdr"], -) - -generated_cc_atom( - name = "mainwindow_hdr", - hdrs = ["mainwindow.h"], - visibility = ["//:__subpackages__"], - deps = [":Model_hdr"], -) - -generated_cc_atom( - name = "mainwindow_src", - srcs = ["mainwindow.cpp"], - visibility = ["//:__subpackages__"], -) diff --git a/tools/mdbviz/Model.cpp b/tools/mdbviz/Model.cpp deleted file mode 100644 index 0243d00797..0000000000 --- a/tools/mdbviz/Model.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include - -#include "tools/mdbviz/Model.h" - -#include "include/core/SkBitmap.h" -#include "include/core/SkCanvas.h" -#include "include/core/SkPicture.h" -#include "include/core/SkStream.h" -#include "tools/debugger/DebugCanvas.h" - -Model::Model() : fCurOp(0) { - SkImageInfo ii = SkImageInfo::MakeN32Premul(1024, 1024); - fBM.allocPixels(ii, 0); -} - -Model::~Model() { - this->resetOpsTask(); -} - -Model::ErrorCode Model::load(const char* filename) { - std::unique_ptr stream = SkStream::MakeFromFile(filename); - if (!stream) { - return ErrorCode::kCouldntOpenFile; - } - sk_sp pic(SkPicture::MakeFromStream(stream.get())); - if (!pic) { - return ErrorCode::kCouldntDecodeSKP; - } - - { - std::unique_ptr temp( - new DebugCanvas(SkScalarCeilToInt(pic->cullRect().width()), - SkScalarCeilToInt(pic->cullRect().height()))); - - temp->setPicture(pic.get()); - pic->playback(temp.get()); - temp->setPicture(nullptr); - this->resetOpsTask(); - temp->detachCommands(&fOps); - } - - this->setCurOp(fOps.count()-1); - - return ErrorCode::kOK; -} - -const char* Model::ErrorString(ErrorCode err) { - static const char* kStrings[] = { - "OK", - "Couldn't read file", - "Couldn't decode picture" - }; - - return kStrings[(int)err]; -} - -const char* Model::getOpName(int index) const { - return DrawCommand::GetCommandString(fOps[index]->getType()); -} - -bool Model::isHierarchyPush(int index) const { - DrawCommand::OpType type = fOps[index]->getType(); - - return DrawCommand::kSave_OpType == type || DrawCommand::kSaveLayer_OpType == type || - DrawCommand::kBeginDrawPicture_OpType == type; -} - -bool Model::isHierarchyPop(int index) const { - DrawCommand::OpType type = fOps[index]->getType(); - - return DrawCommand::kRestore_OpType == type || DrawCommand::kEndDrawPicture_OpType == type; -} - -void Model::setCurOp(int curOp) { - SkASSERT(curOp < fOps.count()); - - if (curOp == fCurOp) { - return; // the render state is already up to date - } - - fCurOp = curOp; - this->drawTo(fCurOp); -} - -void Model::drawTo(int index) { - SkASSERT(index < fOps.count()); - - SkCanvas canvas(fBM); - - int saveCount = canvas.save(); - - for (int i = 0; i <= index; ++i) { - if (fOps[i]->isVisible()) { - fOps[i]->execute(&canvas); - } - } - - canvas.restoreToCount(saveCount); -} - -void Model::resetOpsTask() { - for (int i = 0; i < fOps.count(); ++i) { - delete fOps[i]; - } - fOps.reset(); - fCurOp = 0; -} diff --git a/tools/mdbviz/Model.h b/tools/mdbviz/Model.h deleted file mode 100644 index f3bc99dcae..0000000000 --- a/tools/mdbviz/Model.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "include/core/SkBitmap.h" -#include "include/private/SkTDArray.h" - -class DrawCommand; - -// This class encapsulates the both the in-memory representation of the draw ops -// and the state of Skia/Ganesh's rendering. It should never have any Qt intrusions. -class Model { -public: - enum class ErrorCode { - kOK, - kCouldntOpenFile, - kCouldntDecodeSKP - }; - - Model(); - ~Model(); - - static const char* ErrorString(ErrorCode); - - // Replace the list of draw ops by reading the provided skp filename and - // reset the Skia draw state. It is up to the view portion to update itself - // after this call (i.e., rebuild the opsTask view). - ErrorCode load(const char* filename); - - // Update the rendering state to the provided op - void setCurOp(int curOp); - int curOp() const { return fCurOp; } - - int numOps() const { return fOps.count(); } - const char* getOpName(int index) const; - - bool isHierarchyPush(int index) const; - bool isHierarchyPop(int index) const; - - // Get the bits visually representing the current rendering state - void* getPixels() const { return fBM.getPixels(); } - int width() const { return fBM.width(); } - int height() const { return fBM.height(); } - -protected: - // draw the ops up to (and including) the index-th op - void drawTo(int index); - void resetOpsTask(); - -private: - SkTDArray fOps; - int fCurOp; // The current op the rendering state is at - SkBitmap fBM; -}; diff --git a/tools/mdbviz/images/open.png b/tools/mdbviz/images/open.png deleted file mode 100644 index 6043f4bdc0..0000000000 Binary files a/tools/mdbviz/images/open.png and /dev/null differ diff --git a/tools/mdbviz/main.cpp b/tools/mdbviz/main.cpp deleted file mode 100644 index 6679871d09..0000000000 --- a/tools/mdbviz/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include - -#include "tools/mdbviz/mainwindow.h" - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - QCoreApplication::setOrganizationName("Google"); - QCoreApplication::setApplicationName("MDB Viz"); - QCoreApplication::setApplicationVersion("0.0"); - - QCommandLineParser parser; - parser.setApplicationDescription(QCoreApplication::applicationName()); - parser.addVersionOption(); - parser.process(app); - - MainWindow mainWin; - mainWin.show(); - - return app.exec(); -} - - diff --git a/tools/mdbviz/mainwindow.cpp b/tools/mdbviz/mainwindow.cpp deleted file mode 100644 index e36f81aee4..0000000000 --- a/tools/mdbviz/mainwindow.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include - -#include "MainWindow.h" - -MainWindow::MainWindow() { - this->createActions(); - this->createStatusBar(); - this->createDockWindows(); - - this->setWindowTitle("MDB Viz"); - - this->readSettings(); - this->setUnifiedTitleAndToolBarOnMac(true); -} - -void MainWindow::openFile() { - QString fileName = QFileDialog::getOpenFileName(this); - if (!fileName.isEmpty()) { - this->loadFile(fileName); - } -} - -void MainWindow::setupOpsTaskWidget() { - fOpsTaskWidget->clear(); - - QTreeWidgetItem* item = nullptr; - SkTDArray parents; - - for (int i = 0; i < fModel.numOps(); i++) { - item = new QTreeWidgetItem(); - - item->setText(0, QString::number(i)); - item->setData(0, Qt::UserRole, i); - item->setText(1, fModel.getOpName(i)); - - if (fModel.isHierarchyPop(i)) { - parents.pop(); - } - - if (parents.isEmpty()) { - fOpsTaskWidget->addTopLevelItem(item); - } else { - parents.top()->addChild(item); - } - - if (fModel.isHierarchyPush(i)) { - *parents.push() = item; - } - } - - fOpsTaskWidget->setCurrentItem(item); - fOpsTaskWidget->expandToDepth(100); -} - -void MainWindow::presentCurrentRenderState() { - fImage = QImage((uchar*)fModel.getPixels(), fModel.width(), fModel.height(), - QImage::Format_RGBA8888); - fImageLabel->setPixmap(QPixmap::fromImage(fImage)); -} - -void MainWindow::loadFile(const QString &fileName) { - QFile file(fileName); - if (!file.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::warning(this, tr("MDB Viz"), - tr("Cannot read file %1:\n%2.") - .arg(QDir::toNativeSeparators(fileName), file.errorString())); - return; - } - - QTextStream in(&file); -#ifndef QT_NO_CURSOR - QApplication::setOverrideCursor(Qt::WaitCursor); -#endif - - std::string str = file.fileName().toLocal8Bit().constData(); - - Model::ErrorCode err = fModel.load(str.c_str()); - if (Model::ErrorCode::kOK != err) { - this->statusBar()->showMessage(Model::ErrorString(err)); - return; - } - - this->setupOpsTaskWidget(); - this->presentCurrentRenderState(); - -#ifndef QT_NO_CURSOR - QApplication::restoreOverrideCursor(); -#endif -} - - -void MainWindow::about() { - QMessageBox::about(this, "About MDB Viz", "Visualize MDB"); -} - -void MainWindow::createActions() { - - // File menu - QMenu* fileMenu = this->menuBar()->addMenu(tr("&File")); - QToolBar* fileToolBar = this->addToolBar(tr("File")); - - const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png")); - QAction* openAct = new QAction(openIcon, tr("&Open..."), this); - openAct->setShortcuts(QKeySequence::Open); - openAct->setStatusTip(tr("Open an existing file")); - connect(openAct, &QAction::triggered, this, &MainWindow::openFile); - fileMenu->addAction(openAct); - fileToolBar->addAction(openAct); - - fileMenu->addSeparator(); - - const QIcon exitIcon = QIcon::fromTheme("application-exit"); - QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), this, &QWidget::close); - exitAct->setShortcuts(QKeySequence::Quit); - exitAct->setStatusTip(tr("Exit the application")); - - // View menu - fViewMenu = this->menuBar()->addMenu(tr("&View")); - - // Help menu - this->menuBar()->addSeparator(); - - QMenu* helpMenu = this->menuBar()->addMenu(tr("&Help")); - - QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about); - aboutAct->setStatusTip(tr("Show the application's About box")); -} - -void MainWindow::onCurrentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* /* prev */) { - int currentRow = cur->data(0, Qt::UserRole).toInt(); - fModel.setCurOp(currentRow); - this->presentCurrentRenderState(); -} - -void MainWindow::createStatusBar() { - this->statusBar()->showMessage(tr("Ready")); -} - -void MainWindow::createDockWindows() { - - // Op List Window - { - QDockWidget* opsTaskDock = new QDockWidget("Ops", this); - opsTaskDock->setAllowedAreas(Qt::LeftDockWidgetArea); - - fOpsTaskWidget = new QTreeWidget(opsTaskDock); - - QTreeWidgetItem* headerItem = new QTreeWidgetItem; - headerItem->setText(0, "Index"); - headerItem->setText(1, "Op Name"); - fOpsTaskWidget->setHeaderItem(headerItem); - - fOpsTaskWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - fOpsTaskWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); - - opsTaskDock->setWidget(fOpsTaskWidget); - this->addDockWidget(Qt::LeftDockWidgetArea, opsTaskDock); - - fViewMenu->addAction(opsTaskDock->toggleViewAction()); - - connect(fOpsTaskWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), - this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); - } - - // Main canvas Window - { - QDockWidget* mainCanvasDock = new QDockWidget("Main Canvas", this); - mainCanvasDock->setAllowedAreas(Qt::RightDockWidgetArea); - - fImageLabel = new QLabel(mainCanvasDock); - - fImage = QImage(1024, 1024, QImage::Format_RGBA8888); - fImage.fill(0); - fImageLabel->setPixmap(QPixmap::fromImage(fImage)); - - mainCanvasDock->setWidget(fImageLabel); - this->addDockWidget(Qt::RightDockWidgetArea, mainCanvasDock); - - fViewMenu->addAction(mainCanvasDock->toggleViewAction()); - } -} - -void MainWindow::readSettings() { - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray(); - if (geometry.isEmpty()) { - const QRect availableGeometry = QApplication::desktop()->availableGeometry(this); - resize(availableGeometry.width() / 3, availableGeometry.height() / 2); - move((availableGeometry.width() - width()) / 2, - (availableGeometry.height() - height()) / 2); - } else { - this->restoreGeometry(geometry); - } -} - -void MainWindow::writeSettings() { - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - settings.setValue("geometry", this->saveGeometry()); -} diff --git a/tools/mdbviz/mainwindow.h b/tools/mdbviz/mainwindow.h deleted file mode 100644 index f80b1576c5..0000000000 --- a/tools/mdbviz/mainwindow.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef MainWindow_DEFINED -#define MainWindow_DEFINED - -#include -#include - -#include "tools/mdbviz/Model.h" - -class QLabel; -class QMenu; -class QTreeWidget; -class QTreeWidgetItem; - - -class MainWindow : public QMainWindow { - Q_OBJECT - -public: - MainWindow(); - -private slots: - void openFile(); - void about(); - void onCurrentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* prev); - -private: - void loadFile(const QString &fileName); - void setupOpsTaskWidget(); - void presentCurrentRenderState(); - - - void createActions(); - void createStatusBar(); - void createDockWindows(); - - void readSettings(); - void writeSettings(); - - QImage fImage; - QLabel* fImageLabel; - - QTreeWidget* fOpsTaskWidget; - - QMenu* fViewMenu; - - Model fModel; -}; - -#endif diff --git a/tools/mdbviz/resources.qrc b/tools/mdbviz/resources.qrc deleted file mode 100644 index e3e2dc0007..0000000000 --- a/tools/mdbviz/resources.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - images/open.png - - \ No newline at end of file