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 Core;
|
||||||
using namespace CtfVisualizer::Constants;
|
using namespace CtfVisualizer::Constants;
|
||||||
|
using namespace Tasking;
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
namespace CtfVisualizer::Internal {
|
namespace CtfVisualizer::Internal {
|
||||||
@@ -77,6 +78,33 @@ CtfVisualizerTool::CtfVisualizerTool(QObject *parent)
|
|||||||
this, &CtfVisualizerTool::toggleThreadRestriction);
|
this, &CtfVisualizerTool::toggleThreadRestriction);
|
||||||
|
|
||||||
m_perspective.addToolBarWidget(m_restrictToThreadsButton);
|
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;
|
CtfVisualizerTool::~CtfVisualizerTool() = default;
|
||||||
@@ -208,9 +236,7 @@ static void load(QPromise<json> &promise, const QString &fileName)
|
|||||||
|
|
||||||
void CtfVisualizerTool::loadJson(const QString &fileName)
|
void CtfVisualizerTool::loadJson(const QString &fileName)
|
||||||
{
|
{
|
||||||
using namespace Tasking;
|
if (m_taskTreeRunner.isRunning() || fileName.isEmpty())
|
||||||
|
|
||||||
if (m_loader || fileName.isEmpty())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto onSetup = [this, fileName](Async<json> &async) {
|
const auto onSetup = [this, fileName](Async<json> &async) {
|
||||||
@@ -220,36 +246,7 @@ void CtfVisualizerTool::loadJson(const QString &fileName)
|
|||||||
m_traceManager->addEvent(asyncPtr->resultAt(index));
|
m_traceManager->addEvent(asyncPtr->resultAt(index));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
const auto onDone = [this](DoneWith result) {
|
m_taskTreeRunner.start({AsyncTask<json>(onSetup)});
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupCtfVisualizerTool(QObject *guard)
|
void setupCtfVisualizerTool(QObject *guard)
|
||||||
|
@@ -7,14 +7,14 @@
|
|||||||
|
|
||||||
#include <debugger/debuggermainwindow.h>
|
#include <debugger/debuggermainwindow.h>
|
||||||
|
|
||||||
|
#include <solutions/tasking/tasktreerunner.h>
|
||||||
|
|
||||||
#include <tracing/timelinemodelaggregator.h>
|
#include <tracing/timelinemodelaggregator.h>
|
||||||
#include <tracing/timelinezoomcontrol.h>
|
#include <tracing/timelinezoomcontrol.h>
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
|
||||||
namespace Tasking { class TaskTree; }
|
|
||||||
|
|
||||||
namespace CtfVisualizer::Internal {
|
namespace CtfVisualizer::Internal {
|
||||||
|
|
||||||
class CtfTraceManager;
|
class CtfTraceManager;
|
||||||
@@ -50,7 +50,7 @@ private:
|
|||||||
QCoreApplication::translate("QtC::CtfVisualizer",
|
QCoreApplication::translate("QtC::CtfVisualizer",
|
||||||
"Chrome Trace Format Visualizer")};
|
"Chrome Trace Format Visualizer")};
|
||||||
|
|
||||||
std::unique_ptr<Tasking::TaskTree> m_loader;
|
Tasking::TaskTreeRunner m_taskTreeRunner;
|
||||||
QScopedPointer<QAction> m_loadJson;
|
QScopedPointer<QAction> m_loadJson;
|
||||||
|
|
||||||
CtfVisualizerTraceView *m_traceView = nullptr;
|
CtfVisualizerTraceView *m_traceView = nullptr;
|
||||||
|
Reference in New Issue
Block a user