forked from qt-creator/qt-creator
Valgrind: Split parse() into setIODevice() and start()
Make the API more TaskTree friendly. Change-Id: I5119e38b5fc3cce234395fc5db5c73cf0c474ac0 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -1065,7 +1065,8 @@ void MemcheckToolPrivate::loadXmlLogFile(const QString &filePath)
|
|||||||
parser->deleteLater();
|
parser->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
parser->parse(logFile); // ThreadedParser owns the file
|
parser->setIODevice(logFile);
|
||||||
|
parser->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemcheckToolPrivate::parserError(const Error &error)
|
void MemcheckToolPrivate::parserError(const Error &error)
|
||||||
|
@@ -68,7 +68,8 @@ void ValgrindRunner::Private::xmlSocketConnected()
|
|||||||
QTcpSocket *socket = m_xmlServer.nextPendingConnection();
|
QTcpSocket *socket = m_xmlServer.nextPendingConnection();
|
||||||
QTC_ASSERT(socket, return);
|
QTC_ASSERT(socket, return);
|
||||||
m_xmlServer.close();
|
m_xmlServer.close();
|
||||||
m_parser.parse(socket);
|
m_parser.setIODevice(socket);
|
||||||
|
m_parser.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValgrindRunner::Private::logSocketConnected()
|
void ValgrindRunner::Private::logSocketConnected()
|
||||||
|
@@ -41,9 +41,17 @@ bool ThreadedParser::isRunning() const
|
|||||||
return m_parserThread ? m_parserThread->isRunning() : false;
|
return m_parserThread ? m_parserThread->isRunning() : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadedParser::parse(QIODevice *device)
|
void ThreadedParser::setIODevice(QIODevice *device)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(device, return);
|
||||||
|
QTC_ASSERT(device->isOpen(), return);
|
||||||
|
m_device.reset(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThreadedParser::start()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!m_parserThread, return);
|
QTC_ASSERT(!m_parserThread, return);
|
||||||
|
QTC_ASSERT(m_device, return);
|
||||||
|
|
||||||
auto parser = new Parser;
|
auto parser = new Parser;
|
||||||
qRegisterMetaType<Status>();
|
qRegisterMetaType<Status>();
|
||||||
@@ -54,10 +62,10 @@ void ThreadedParser::parse(QIODevice *device)
|
|||||||
|
|
||||||
m_parserThread = new Thread;
|
m_parserThread = new Thread;
|
||||||
connect(m_parserThread.get(), &QThread::finished, m_parserThread.get(), &QObject::deleteLater);
|
connect(m_parserThread.get(), &QThread::finished, m_parserThread.get(), &QObject::deleteLater);
|
||||||
device->setParent(nullptr);
|
m_device->setParent(nullptr);
|
||||||
device->moveToThread(m_parserThread);
|
m_device->moveToThread(m_parserThread);
|
||||||
parser->moveToThread(m_parserThread);
|
parser->moveToThread(m_parserThread);
|
||||||
m_parserThread->m_device = device;
|
m_parserThread->m_device = m_device.release();
|
||||||
m_parserThread->m_parser = parser;
|
m_parserThread->m_parser = parser;
|
||||||
m_parserThread->start();
|
m_parserThread->start();
|
||||||
}
|
}
|
||||||
|
@@ -31,8 +31,10 @@ public:
|
|||||||
bool waitForFinished();
|
bool waitForFinished();
|
||||||
bool isRunning() const;
|
bool isRunning() const;
|
||||||
|
|
||||||
|
// The passed device needs to be open. The parser takes ownership of the passed device.
|
||||||
|
void setIODevice(QIODevice *device);
|
||||||
///@warning will move @p stream to a different thread and take ownership of it
|
///@warning will move @p stream to a different thread and take ownership of it
|
||||||
void parse(QIODevice *stream);
|
void start();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void status(const Status &status);
|
void status(const Status &status);
|
||||||
@@ -40,6 +42,7 @@ signals:
|
|||||||
void done(bool success, const QString &errorString);
|
void done(bool success, const QString &errorString);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::unique_ptr<QIODevice> m_device;
|
||||||
QPointer<Thread> m_parserThread;
|
QPointer<Thread> m_parserThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user