forked from qt-creator/qt-creator
Don't create a QProcess object every second.
Creating a QProcess every second is very VERY expensive, making the QtCreator UI experience pretty bad, the UI was not responsive when debugging or even when running an Android application from QtCreator. Thanks to Intel's VTUNE I could spot and fix the problem in minutes. Change-Id: I6d3dc71db93e91d9846101a1877bab017df41aba Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -249,15 +249,13 @@ static int extractPid(const QString &exeName, const QByteArray &psOutput)
|
|||||||
|
|
||||||
QByteArray AndroidRunner::runPs()
|
QByteArray AndroidRunner::runPs()
|
||||||
{
|
{
|
||||||
QProcess psProc;
|
QByteArray psLine("ps");
|
||||||
QStringList args = m_selector;
|
|
||||||
args << _("shell") << _("ps");
|
|
||||||
if (m_isBusyBox)
|
if (m_isBusyBox)
|
||||||
args << _("-w");
|
psLine += " -w";
|
||||||
|
psLine += '\n';
|
||||||
psProc.start(m_adb, args);
|
m_psProc.write(psLine);
|
||||||
psProc.waitForFinished();
|
m_psProc.waitForBytesWritten(psLine.size());
|
||||||
return psProc.readAll();
|
return m_psProc.readAllStandardOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidRunner::checkPID()
|
void AndroidRunner::checkPID()
|
||||||
@@ -322,6 +320,7 @@ void AndroidRunner::forceStop()
|
|||||||
void AndroidRunner::start()
|
void AndroidRunner::start()
|
||||||
{
|
{
|
||||||
m_adbLogcatProcess.start(m_adb, selector() << _("logcat"));
|
m_adbLogcatProcess.start(m_adb, selector() << _("logcat"));
|
||||||
|
m_psProc.start(m_adb, selector() << _("shell"));
|
||||||
Utils::runAsync(&AndroidRunner::asyncStart, this);
|
Utils::runAsync(&AndroidRunner::asyncStart, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,6 +550,8 @@ void AndroidRunner::stop()
|
|||||||
//QObject::disconnect(&m_adbLogcatProcess, 0, this, 0);
|
//QObject::disconnect(&m_adbLogcatProcess, 0, this, 0);
|
||||||
m_adbLogcatProcess.kill();
|
m_adbLogcatProcess.kill();
|
||||||
m_adbLogcatProcess.waitForFinished();
|
m_adbLogcatProcess.waitForFinished();
|
||||||
|
m_psProc.kill();
|
||||||
|
m_psProc.waitForFinished();
|
||||||
foreach (const QStringList &entry, m_androidRunnable.afterFinishADBCommands) {
|
foreach (const QStringList &entry, m_androidRunnable.afterFinishADBCommands) {
|
||||||
QProcess adb;
|
QProcess adb;
|
||||||
adb.start(m_adb, selector() << entry);
|
adb.start(m_adb, selector() << entry);
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QProcess m_adbLogcatProcess;
|
QProcess m_adbLogcatProcess;
|
||||||
|
QProcess m_psProc;
|
||||||
QTimer m_checkPIDTimer;
|
QTimer m_checkPIDTimer;
|
||||||
bool m_wasStarted;
|
bool m_wasStarted;
|
||||||
int m_tries;
|
int m_tries;
|
||||||
|
|||||||
Reference in New Issue
Block a user