forked from qt-creator/qt-creator
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:
@@ -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)
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user