Tracing: Use QtConcurrent invocation for async run

Change-Id: I40dea7276ed9d54c7ce898f0463df05929576648
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Jarek Kobus
2023-03-10 15:57:40 +01:00
parent e060f82fa5
commit d558741985

View File

@@ -6,12 +6,10 @@
#include "timelinetracemanager.h" #include "timelinetracemanager.h"
#include "tracingtr.h" #include "tracingtr.h"
#include <utils/asynctask.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/temporaryfile.h>
#include <utils/runextensions.h>
#include <QFile> #include <QFile>
#include <QDataStream>
#include <memory> #include <memory>
@@ -223,8 +221,11 @@ QFuture<void> TimelineTraceManager::save(const QString &filename)
connect(writer, &QObject::destroyed, this, &TimelineTraceManager::saveFinished); connect(writer, &QObject::destroyed, this, &TimelineTraceManager::saveFinished);
connect(writer, &TimelineTraceFile::error, this, &TimelineTraceManager::error); connect(writer, &TimelineTraceFile::error, this, &TimelineTraceManager::error);
return Utils::runAsync([filename, writer] (QFutureInterface<void> &future) { QFutureInterface<void> fi;
writer->setFuture(future); fi.reportStarted();
writer->setFuture(fi);
Utils::asyncRun([filename, writer, fi] {
QFile file(filename); QFile file(filename);
if (file.open(QIODevice::WriteOnly)) if (file.open(QIODevice::WriteOnly))
@@ -232,10 +233,13 @@ QFuture<void> TimelineTraceManager::save(const QString &filename)
else else
writer->fail(Tr::tr("Could not open %1 for writing.").arg(filename)); writer->fail(Tr::tr("Could not open %1 for writing.").arg(filename));
if (future.isCanceled()) if (fi.isCanceled())
file.remove(); file.remove();
writer->deleteLater(); writer->deleteLater();
QFutureInterface fiCopy = fi;
fiCopy.reportFinished();
}); });
return fi.future();
} }
QFuture<void> TimelineTraceManager::load(const QString &filename) QFuture<void> TimelineTraceManager::load(const QString &filename)
@@ -249,8 +253,10 @@ QFuture<void> TimelineTraceManager::load(const QString &filename)
connect(reader, &QObject::destroyed, this, &TimelineTraceManager::loadFinished); connect(reader, &QObject::destroyed, this, &TimelineTraceManager::loadFinished);
connect(reader, &TimelineTraceFile::error, this, &TimelineTraceManager::error); connect(reader, &TimelineTraceFile::error, this, &TimelineTraceManager::error);
QFuture<void> future = Utils::runAsync([filename, reader] (QFutureInterface<void> &future) { QFutureInterface<void> fi;
reader->setFuture(future); fi.reportStarted();
reader->setFuture(fi);
Utils::asyncRun([filename, reader, fi] {
QFile file(filename); QFile file(filename);
if (file.open(QIODevice::ReadOnly)) if (file.open(QIODevice::ReadOnly))
@@ -259,11 +265,13 @@ QFuture<void> TimelineTraceManager::load(const QString &filename)
reader->fail(Tr::tr("Could not open %1 for reading.").arg(filename)); reader->fail(Tr::tr("Could not open %1 for reading.").arg(filename));
reader->deleteLater(); reader->deleteLater();
QFutureInterface fiCopy = fi;
fiCopy.reportFinished();
}); });
QFutureWatcher<void> *watcher = new QFutureWatcher<void>(reader); QFutureWatcher<void> *watcher = new QFutureWatcher<void>(reader);
connect(watcher, &QFutureWatcherBase::canceled, this, &TimelineTraceManager::clearAll); connect(watcher, &QFutureWatcherBase::canceled, this, &TimelineTraceManager::clearAll);
connect(watcher, &QFutureWatcherBase::finished, this, [this, reader]() { connect(watcher, &QFutureWatcherBase::finished, this, [this, reader] {
if (!reader->isCanceled()) { if (!reader->isCanceled()) {
if (reader->traceStart() >= 0) if (reader->traceStart() >= 0)
decreaseTraceStart(reader->traceStart()); decreaseTraceStart(reader->traceStart());
@@ -272,9 +280,8 @@ QFuture<void> TimelineTraceManager::load(const QString &filename)
finalize(); finalize();
} }
}); });
watcher->setFuture(future); watcher->setFuture(fi.future());
return fi.future();
return future;
} }
qint64 TimelineTraceManager::traceStart() const qint64 TimelineTraceManager::traceStart() const
@@ -366,10 +373,9 @@ void TimelineTraceManager::restrictByFilter(TraceEventFilter filter)
QFutureInterface<void> future; QFutureInterface<void> future;
replayEvents(filter(std::bind(&TimelineTraceManagerPrivate::dispatch, d, replayEvents(filter(std::bind(&TimelineTraceManagerPrivate::dispatch, d,
std::placeholders::_1, std::placeholders::_2)), std::placeholders::_1, std::placeholders::_2)), [this] {
[this]() {
initialize(); initialize();
}, [this]() { }, [this] {
if (d->notesModel) if (d->notesModel)
d->notesModel->restore(); d->notesModel->restore();
finalize(); finalize();