From 64d784ec9a78e4b39160c410abde868e6a35b5e8 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 29 Sep 2017 09:24:06 +0200 Subject: Qnx: Fix Qml profiler startup This essentially replicates the RemoteLinux setup with the additional Slog2Info runner. Verified to work with Qt 5.9.2 on a BD-SL i.MX6Q_Sabre-Lite_Board armle running QNX 6.6.0 2014/02/22-19:07:53EST Task-number: QTCREATORBUG-18954 Change-Id: Iffea289b7c7f25d23472c9e12b5e45c460c93795 Reviewed-by: Eike Ziller Reviewed-by: Ulf Hermann --- src/plugins/qnx/qnxanalyzesupport.cpp | 76 +++++++++++++---------------------- src/plugins/qnx/qnxanalyzesupport.h | 6 ++- 2 files changed, 32 insertions(+), 50 deletions(-) diff --git a/src/plugins/qnx/qnxanalyzesupport.cpp b/src/plugins/qnx/qnxanalyzesupport.cpp index f5e182a8e3..f42d3ecc56 100644 --- a/src/plugins/qnx/qnxanalyzesupport.cpp +++ b/src/plugins/qnx/qnxanalyzesupport.cpp @@ -36,76 +36,54 @@ #include #include + #include #include +#include + using namespace ProjectExplorer; using namespace Utils; namespace Qnx { namespace Internal { -class QnxAnalyzeeRunner : public SimpleTargetRunner -{ -public: - QnxAnalyzeeRunner(RunControl *runControl, PortsGatherer *portsGatherer) - : SimpleTargetRunner(runControl), m_portsGatherer(portsGatherer) - { - setDisplayName("QnxAnalyzeeRunner"); - } - -private: - void start() override - { - Utils::Port port = m_portsGatherer->findPort(); - - auto r = runnable().as(); - if (!r.commandLineArguments.isEmpty()) - r.commandLineArguments += ' '; - r.commandLineArguments += - QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, port); - - setRunnable(r); - - SimpleTargetRunner::start(); - } - - PortsGatherer *m_portsGatherer; -}; - - -// QnxDebugSupport - QnxQmlProfilerSupport::QnxQmlProfilerSupport(RunControl *runControl) - : RunWorker(runControl) + : SimpleTargetRunner(runControl) { - runControl->createWorker(runControl->runMode()); - - setDisplayName("QnxAnalyzeSupport"); + setDisplayName("QnxQmlProfilerSupport"); appendMessage(tr("Preparing remote side..."), Utils::LogMessageFormat); - auto portsGatherer = new PortsGatherer(runControl); - - auto debuggeeRunner = new QnxAnalyzeeRunner(runControl, portsGatherer); - debuggeeRunner->addStartDependency(portsGatherer); + m_portsGatherer = new PortsGatherer(runControl); + addStartDependency(m_portsGatherer); auto slog2InfoRunner = new Slog2InfoRunner(runControl); - slog2InfoRunner->addStartDependency(debuggeeRunner); - addStartDependency(slog2InfoRunner); - // QmlDebug::QmlOutputParser m_outputParser; - // FIXME: m_outputParser needs to be fed with application output - // connect(&m_outputParser, &QmlDebug::QmlOutputParser::waitingForConnectionOnPort, - // this, &QnxAnalyzeSupport::remoteIsRunning); - - // m_outputParser.processOutput(msg); + m_profiler = runControl->createWorker(runControl->runMode()); + m_profiler->addStartDependency(this); + addStopDependency(m_profiler); } void QnxQmlProfilerSupport::start() { - // runControl()->notifyRemoteSetupDone(m_qmlPort); - reportStarted(); + Port qmlPort = m_portsGatherer->findPort(); + + QUrl serverUrl; + serverUrl.setHost(device()->sshParameters().host); + serverUrl.setPort(qmlPort.number()); + serverUrl.setScheme("tcp"); + m_profiler->recordData("QmlServerUrl", serverUrl); + + QString args = QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, qmlPort); + auto r = runnable().as(); + if (!r.commandLineArguments.isEmpty()) + r.commandLineArguments.append(' '); + r.commandLineArguments += args; + + setRunnable(r); + + SimpleTargetRunner::start(); } } // namespace Internal diff --git a/src/plugins/qnx/qnxanalyzesupport.h b/src/plugins/qnx/qnxanalyzesupport.h index 9fbd11d0fe..415459e3c1 100644 --- a/src/plugins/qnx/qnxanalyzesupport.h +++ b/src/plugins/qnx/qnxanalyzesupport.h @@ -25,12 +25,13 @@ #pragma once +#include #include namespace Qnx { namespace Internal { -class QnxQmlProfilerSupport : public ProjectExplorer::RunWorker +class QnxQmlProfilerSupport : public ProjectExplorer::SimpleTargetRunner { Q_OBJECT @@ -39,6 +40,9 @@ public: private: void start() override; + + ProjectExplorer::PortsGatherer *m_portsGatherer; + ProjectExplorer::RunWorker *m_profiler; }; } // namespace Internal -- cgit v1.2.1