QNX: Fix QML analyzer on pure QNX targets

Change-Id: Ib67b696b7938eb4de1b67b211b7f529651cdb99a
Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
This commit is contained in:
Tobias Nätterlund
2014-02-11 10:55:24 +01:00
committed by Tobias Nätterlund
parent cdc2a0f723
commit e8d4349c37
3 changed files with 33 additions and 2 deletions

View File

@@ -29,13 +29,21 @@
#include "qnxanalyzesupport.h" #include "qnxanalyzesupport.h"
#include "qnxdeviceconfiguration.h"
#include "qnxrunconfiguration.h"
#include "slog2inforunner.h"
#include <analyzerbase/analyzerruncontrol.h> #include <analyzerbase/analyzerruncontrol.h>
#include <analyzerbase/analyzerstartparameters.h> #include <analyzerbase/analyzerstartparameters.h>
#include <projectexplorer/devicesupport/deviceapplicationrunner.h> #include <projectexplorer/devicesupport/deviceapplicationrunner.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/target.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <QFileInfo>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Qnx; using namespace Qnx;
@@ -59,6 +67,16 @@ QnxAnalyzeSupport::QnxAnalyzeSupport(QnxRunConfiguration *runConfig,
SLOT(handleAdapterSetupRequested())); SLOT(handleAdapterSetupRequested()));
connect(&m_outputParser, SIGNAL(waitingForConnectionOnPort(quint16)), connect(&m_outputParser, SIGNAL(waitingForConnectionOnPort(quint16)),
SLOT(remoteIsRunning())); SLOT(remoteIsRunning()));
ProjectExplorer::IDevice::ConstPtr dev = ProjectExplorer::DeviceKitInformation::device(runConfig->target()->kit());
QnxDeviceConfiguration::ConstPtr qnxDevice = dev.dynamicCast<const QnxDeviceConfiguration>();
const QString applicationId = QFileInfo(runConfig->remoteExecutableFilePath()).fileName();
m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this);
connect(m_slog2Info, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(showMessage(QString,Utils::OutputFormat)));
connect(runner, SIGNAL(remoteProcessStarted()), m_slog2Info, SLOT(start()));
if (qnxDevice->qnxVersion() > 0x060500)
connect(m_slog2Info, SIGNAL(commandMissing()), this, SLOT(printMissingWarning()));
} }
void QnxAnalyzeSupport::handleAdapterSetupRequested() void QnxAnalyzeSupport::handleAdapterSetupRequested()
@@ -89,13 +107,15 @@ void QnxAnalyzeSupport::startExecution()
void QnxAnalyzeSupport::handleRemoteProcessFinished(bool success) void QnxAnalyzeSupport::handleRemoteProcessFinished(bool success)
{ {
if (m_runControl || state() == Inactive) if (!m_runControl)
return; return;
if (!success) if (!success)
showMessage(tr("The %1 process closed unexpectedly.").arg(executable()), showMessage(tr("The %1 process closed unexpectedly.").arg(executable()),
Utils::NormalMessageFormat); Utils::NormalMessageFormat);
m_runControl->notifyRemoteFinished(success); m_runControl->notifyRemoteFinished(success);
m_slog2Info->stop();
} }
void QnxAnalyzeSupport::handleProfilingFinished() void QnxAnalyzeSupport::handleProfilingFinished()
@@ -137,3 +157,8 @@ void QnxAnalyzeSupport::showMessage(const QString &msg, Utils::OutputFormat form
m_runControl->logApplicationMessage(msg, format); m_runControl->logApplicationMessage(msg, format);
m_outputParser.processOutput(msg); m_outputParser.processOutput(msg);
} }
void QnxAnalyzeSupport::printMissingWarning()
{
showMessage(tr("Warning: \"slog2info\" is not found on the device, debug output not available!"), Utils::ErrorMessageFormat);
}

View File

@@ -42,6 +42,7 @@ namespace Qnx {
namespace Internal { namespace Internal {
class QnxRunConfiguration; class QnxRunConfiguration;
class Slog2InfoRunner;
class QnxAnalyzeSupport : public QnxAbstractRunSupport class QnxAnalyzeSupport : public QnxAbstractRunSupport
{ {
@@ -60,15 +61,19 @@ private slots:
void handleRemoteOutput(const QByteArray &output); void handleRemoteOutput(const QByteArray &output);
void handleError(const QString &error); void handleError(const QString &error);
void showMessage(const QString &, Utils::OutputFormat);
void printMissingWarning();
void remoteIsRunning(); void remoteIsRunning();
private: private:
void startExecution(); void startExecution();
void showMessage(const QString &, Utils::OutputFormat);
Analyzer::AnalyzerRunControl *m_runControl; Analyzer::AnalyzerRunControl *m_runControl;
QmlDebug::QmlOutputParser m_outputParser; QmlDebug::QmlOutputParser m_outputParser;
int m_qmlPort; int m_qmlPort;
Slog2InfoRunner *m_slog2Info;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -127,6 +127,7 @@ static AnalyzerStartParameters createAnalyzerStartParameters(const QnxRunConfigu
if (mode == QmlProfilerRunMode) if (mode == QmlProfilerRunMode)
params.startMode = StartLocal; params.startMode = StartLocal;
params.runMode = mode;
params.debuggee = runConfig->remoteExecutableFilePath(); params.debuggee = runConfig->remoteExecutableFilePath();
params.debuggeeArgs = runConfig->arguments().join(QLatin1String(" ")); params.debuggeeArgs = runConfig->arguments().join(QLatin1String(" "));
params.connParams = DeviceKitInformation::device(runConfig->target()->kit())->sshParameters(); params.connParams = DeviceKitInformation::device(runConfig->target()->kit())->sshParameters();