aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/tracing/timelinetracemanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/tracing/timelinetracemanager.cpp')
-rw-r--r--src/libs/tracing/timelinetracemanager.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/libs/tracing/timelinetracemanager.cpp b/src/libs/tracing/timelinetracemanager.cpp
index 96eb147519..98f333da91 100644
--- a/src/libs/tracing/timelinetracemanager.cpp
+++ b/src/libs/tracing/timelinetracemanager.cpp
@@ -6,12 +6,10 @@
#include "timelinetracemanager.h"
#include "tracingtr.h"
+#include <utils/async.h>
#include <utils/qtcassert.h>
-#include <utils/temporaryfile.h>
-#include <utils/runextensions.h>
#include <QFile>
-#include <QDataStream>
#include <memory>
@@ -223,8 +221,11 @@ QFuture<void> TimelineTraceManager::save(const QString &filename)
connect(writer, &QObject::destroyed, this, &TimelineTraceManager::saveFinished);
connect(writer, &TimelineTraceFile::error, this, &TimelineTraceManager::error);
- return Utils::runAsync([filename, writer] (QFutureInterface<void> &future) {
- writer->setFuture(future);
+ QFutureInterface<void> fi;
+ fi.reportStarted();
+ writer->setFuture(fi);
+
+ Utils::asyncRun([filename, writer, fi] {
QFile file(filename);
if (file.open(QIODevice::WriteOnly))
@@ -232,10 +233,13 @@ QFuture<void> TimelineTraceManager::save(const QString &filename)
else
writer->fail(Tr::tr("Could not open %1 for writing.").arg(filename));
- if (future.isCanceled())
+ if (fi.isCanceled())
file.remove();
writer->deleteLater();
+ QFutureInterface fiCopy = fi;
+ fiCopy.reportFinished();
});
+ return fi.future();
}
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, &TimelineTraceFile::error, this, &TimelineTraceManager::error);
- QFuture<void> future = Utils::runAsync([filename, reader] (QFutureInterface<void> &future) {
- reader->setFuture(future);
+ QFutureInterface<void> fi;
+ fi.reportStarted();
+ reader->setFuture(fi);
+ Utils::asyncRun([filename, reader, fi] {
QFile file(filename);
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->deleteLater();
+ QFutureInterface fiCopy = fi;
+ fiCopy.reportFinished();
});
QFutureWatcher<void> *watcher = new QFutureWatcher<void>(reader);
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->traceStart() >= 0)
decreaseTraceStart(reader->traceStart());
@@ -272,9 +280,8 @@ QFuture<void> TimelineTraceManager::load(const QString &filename)
finalize();
}
});
- watcher->setFuture(future);
-
- return future;
+ watcher->setFuture(fi.future());
+ return fi.future();
}
qint64 TimelineTraceManager::traceStart() const
@@ -366,10 +373,9 @@ void TimelineTraceManager::restrictByFilter(TraceEventFilter filter)
QFutureInterface<void> future;
replayEvents(filter(std::bind(&TimelineTraceManagerPrivate::dispatch, d,
- std::placeholders::_1, std::placeholders::_2)),
- [this]() {
+ std::placeholders::_1, std::placeholders::_2)), [this] {
initialize();
- }, [this]() {
+ }, [this] {
if (d->notesModel)
d->notesModel->restore();
finalize();