diff --git a/src/plugins/ctfvisualizer/ctfvisualizertool.cpp b/src/plugins/ctfvisualizer/ctfvisualizertool.cpp index d41b3d45029..51290be1ec3 100644 --- a/src/plugins/ctfvisualizer/ctfvisualizertool.cpp +++ b/src/plugins/ctfvisualizer/ctfvisualizertool.cpp @@ -29,6 +29,7 @@ using namespace Core; using namespace CtfVisualizer::Constants; +using namespace Tasking; using namespace Utils; namespace CtfVisualizer::Internal { @@ -77,6 +78,33 @@ CtfVisualizerTool::CtfVisualizerTool(QObject *parent) this, &CtfVisualizerTool::toggleThreadRestriction); m_perspective.addToolBarWidget(m_restrictToThreadsButton); + + connect(&m_taskTreeRunner, &TaskTreeRunner::aboutToStart, this, [](TaskTree *taskTree) { + auto progress = new TaskProgress(taskTree); + progress->setDisplayName(Tr::tr("Loading CTF File")); + }); + connect(&m_taskTreeRunner, &TaskTreeRunner::done, this, [this](DoneWith result) { + if (result == DoneWith::Success) { + m_traceManager->updateStatistics(); + if (m_traceManager->isEmpty()) { + QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), + Tr::tr("The file does not contain any trace data.")); + } else if (!m_traceManager->errorString().isEmpty()) { + QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), + m_traceManager->errorString()); + } else { + m_traceManager->finalize(); + m_perspective.select(); + const auto end = m_traceManager->traceEnd() + m_traceManager->traceDuration() / 20; + zoomControl()->setTrace(m_traceManager->traceBegin(), end); + zoomControl()->setRange(m_traceManager->traceBegin(), end); + } + setAvailableThreads(m_traceManager->getSortedThreads()); + } else { + QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), + Tr::tr("Cannot read the CTF file.")); + } + }); } CtfVisualizerTool::~CtfVisualizerTool() = default; @@ -208,9 +236,7 @@ static void load(QPromise &promise, const QString &fileName) void CtfVisualizerTool::loadJson(const QString &fileName) { - using namespace Tasking; - - if (m_loader || fileName.isEmpty()) + if (m_taskTreeRunner.isRunning() || fileName.isEmpty()) return; const auto onSetup = [this, fileName](Async &async) { @@ -220,36 +246,7 @@ void CtfVisualizerTool::loadJson(const QString &fileName) m_traceManager->addEvent(asyncPtr->resultAt(index)); }); }; - const auto onDone = [this](DoneWith result) { - if (result == DoneWith::Success) { - m_traceManager->updateStatistics(); - if (m_traceManager->isEmpty()) { - QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), - Tr::tr("The file does not contain any trace data.")); - } else if (!m_traceManager->errorString().isEmpty()) { - QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), - m_traceManager->errorString()); - } else { - m_traceManager->finalize(); - m_perspective.select(); - const auto end = m_traceManager->traceEnd() + m_traceManager->traceDuration() / 20; - zoomControl()->setTrace(m_traceManager->traceBegin(), end); - zoomControl()->setRange(m_traceManager->traceBegin(), end); - } - setAvailableThreads(m_traceManager->getSortedThreads()); - } else { - QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("CTF Visualizer"), - Tr::tr("Cannot read the CTF file.")); - } - m_loader.release()->deleteLater(); - }; - - const Group recipe { AsyncTask(onSetup) }; - m_loader.reset(new TaskTree(recipe)); - connect(m_loader.get(), &TaskTree::done, this, onDone); - auto progress = new TaskProgress(m_loader.get()); - progress->setDisplayName(Tr::tr("Loading CTF File")); - m_loader->start(); + m_taskTreeRunner.start({AsyncTask(onSetup)}); } void setupCtfVisualizerTool(QObject *guard) diff --git a/src/plugins/ctfvisualizer/ctfvisualizertool.h b/src/plugins/ctfvisualizer/ctfvisualizertool.h index 7937767c079..cfeae52cb67 100644 --- a/src/plugins/ctfvisualizer/ctfvisualizertool.h +++ b/src/plugins/ctfvisualizer/ctfvisualizertool.h @@ -7,14 +7,14 @@ #include +#include + #include #include #include #include -namespace Tasking { class TaskTree; } - namespace CtfVisualizer::Internal { class CtfTraceManager; @@ -50,7 +50,7 @@ private: QCoreApplication::translate("QtC::CtfVisualizer", "Chrome Trace Format Visualizer")}; - std::unique_ptr m_loader; + Tasking::TaskTreeRunner m_taskTreeRunner; QScopedPointer m_loadJson; CtfVisualizerTraceView *m_traceView = nullptr;