CtfVisualizer: Reuse TaskTreeRunner

Change-Id: If893cdd260943a5e72b05595f15c3133e4340f8f
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2024-01-13 17:08:43 +01:00
parent 0f67bbf872
commit 4c0541ce2f
2 changed files with 33 additions and 36 deletions

View File

@@ -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<json> &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<json> &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<json>(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<json>(onSetup)});
}
void setupCtfVisualizerTool(QObject *guard)

View File

@@ -7,14 +7,14 @@
#include <debugger/debuggermainwindow.h>
#include <solutions/tasking/tasktreerunner.h>
#include <tracing/timelinemodelaggregator.h>
#include <tracing/timelinezoomcontrol.h>
#include <QCoreApplication>
#include <QScopedPointer>
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<Tasking::TaskTree> m_loader;
Tasking::TaskTreeRunner m_taskTreeRunner;
QScopedPointer<QAction> m_loadJson;
CtfVisualizerTraceView *m_traceView = nullptr;