summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2016-01-19 17:25:18 +0100
committerhjk <hjk@theqtcompany.com>2016-01-20 16:08:07 +0000
commit5dad96e3b71bb852f47477382ff0f9ac2f40b646 (patch)
tree4299a151d4aa4d3cfdf9f951be0b44414d0b623e /src
parente214eda80ef22abee1c9b1955289a1af9f7ff3bf (diff)
downloadqt-creator-5dad96e3b71bb852f47477382ff0f9ac2f40b646.tar.gz
QmlProfiler: Adapt QmlProfilerRunControlFactory to Analyzer changes
Change-Id: I8047cdb3fc65df2139c1a5770218c48e83ef5f5a Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmlprofiler/localqmlprofilerrunner.cpp56
-rw-r--r--src/plugins/qmlprofiler/localqmlprofilerrunner.h19
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerplugin.cpp4
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp11
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerruncontrol.h6
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp64
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertool.cpp43
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertool.h7
8 files changed, 100 insertions, 110 deletions
diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
index 385c2edc62..36c12f6901 100644
--- a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
+++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
@@ -27,9 +27,6 @@
#include "qmlprofilerplugin.h"
#include "qmlprofilerruncontrol.h"
-#include <analyzerbase/analyzermanager.h>
-#include <analyzerbase/analyzerruncontrol.h>
-#include <analyzerbase/analyzerstartparameters.h>
#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/localapplicationrunconfiguration.h>
#include <projectexplorer/environmentaspect.h>
@@ -44,51 +41,6 @@
using namespace QmlProfiler;
using namespace ProjectExplorer;
-Analyzer::AnalyzerRunControl *LocalQmlProfilerRunner::createLocalRunControl(
- RunConfiguration *runConfiguration,
- const Analyzer::AnalyzerStartParameters &sp,
- QString *errorMessage)
-{
- // only desktop device is supported
- const IDevice::ConstPtr device = DeviceKitInformation::device(
- runConfiguration->target()->kit());
- QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return 0);
-
- Analyzer::AnalyzerRunControl *rc = Analyzer::AnalyzerManager::createRunControl(
- sp, runConfiguration, ProjectExplorer::Constants::QML_PROFILER_RUN_MODE);
- QmlProfilerRunControl *engine = qobject_cast<QmlProfilerRunControl *>(rc);
- if (!engine) {
- delete rc;
- return 0;
- }
-
- Configuration conf;
- conf.executable = sp.debuggee;
- conf.executableArguments = sp.debuggeeArgs;
- conf.workingDirectory = rc->workingDirectory();
- conf.socket = sp.analyzerSocket;
- if (EnvironmentAspect *environment = runConfiguration->extraAspect<EnvironmentAspect>())
- conf.environment = environment->environment();
- conf.port = sp.analyzerPort;
-
- if (conf.executable.isEmpty()) {
- if (errorMessage)
- *errorMessage = tr("No executable file to launch.");
- return 0;
- }
-
- LocalQmlProfilerRunner *runner = new LocalQmlProfilerRunner(conf, engine);
-
- QObject::connect(runner, &LocalQmlProfilerRunner::stopped,
- engine, &QmlProfilerRunControl::notifyRemoteFinished);
- QObject::connect(runner, &LocalQmlProfilerRunner::appendMessage,
- engine, &QmlProfilerRunControl::logApplicationMessage);
- QObject::connect(engine, &Analyzer::AnalyzerRunControl::starting,
- runner, &LocalQmlProfilerRunner::start);
- QObject::connect(rc, &RunControl::finished, runner, &LocalQmlProfilerRunner::stop);
- return rc;
-}
-
QString LocalQmlProfilerRunner::findFreeSocket()
{
QTemporaryFile file;
@@ -120,6 +72,14 @@ LocalQmlProfilerRunner::LocalQmlProfilerRunner(const Configuration &configuratio
{
connect(&m_launcher, &ApplicationLauncher::appendMessage,
this, &LocalQmlProfilerRunner::appendMessage);
+ connect(this, &LocalQmlProfilerRunner::stopped,
+ engine, &QmlProfilerRunControl::notifyRemoteFinished);
+ connect(this, &LocalQmlProfilerRunner::appendMessage,
+ engine, &QmlProfilerRunControl::logApplicationMessage);
+ connect(engine, &Analyzer::AnalyzerRunControl::starting,
+ this, &LocalQmlProfilerRunner::start);
+ connect(engine, &RunControl::finished,
+ this, &LocalQmlProfilerRunner::stop);
}
LocalQmlProfilerRunner::~LocalQmlProfilerRunner()
diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.h b/src/plugins/qmlprofiler/localqmlprofilerrunner.h
index ecb676615f..785bb331cf 100644
--- a/src/plugins/qmlprofiler/localqmlprofilerrunner.h
+++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.h
@@ -30,12 +30,6 @@
#include <utils/environment.h>
#include <projectexplorer/applicationlauncher.h>
-namespace ProjectExplorer { class RunConfiguration; }
-namespace Analyzer {
- class AnalyzerStartParameters;
- class AnalyzerRunControl;
-}
-
namespace QmlProfiler {
class QmlProfilerRunControl;
@@ -53,29 +47,22 @@ public:
Utils::Environment environment;
};
- static Analyzer::AnalyzerRunControl *createLocalRunControl(
- ProjectExplorer::RunConfiguration *runConfiguration,
- const Analyzer::AnalyzerStartParameters &sp,
- QString *errorMessage);
+ LocalQmlProfilerRunner(const Configuration &configuration, QmlProfilerRunControl *engine);
+ ~LocalQmlProfilerRunner();
static quint16 findFreePort(QString &host);
static QString findFreeSocket();
- ~LocalQmlProfilerRunner();
-
signals:
void started();
void stopped();
void appendMessage(const QString &message, Utils::OutputFormat format);
-private slots:
+private:
void spontaneousStop(int exitCode, QProcess::ExitStatus status);
void start();
void stop();
-private:
- LocalQmlProfilerRunner(const Configuration &configuration, QmlProfilerRunControl *engine);
-
Configuration m_configuration;
ProjectExplorer::ApplicationLauncher m_launcher;
QmlProfilerRunControl *m_engine;
diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
index c59cccf309..248582e2f1 100644
--- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp
@@ -54,9 +54,9 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS
auto tool = new QmlProfilerTool(this);
auto widgetCreator = [tool] { return tool->createWidgets(); };
- auto runControlCreator = [tool](const AnalyzerStartParameters &sp,
+ auto runControlCreator = [tool](const AnalyzerStartParameters &,
ProjectExplorer::RunConfiguration *runConfiguration, Core::Id) {
- return tool->createRunControl(sp, runConfiguration);
+ return tool->createRunControl(runConfiguration);
};
AnalyzerAction *action = 0;
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
index 77cc54c398..7ab6f16336 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
@@ -26,6 +26,7 @@
#include "qmlprofilerruncontrol.h"
#include "localqmlprofilerrunner.h"
+#include "qmlprofilertool.h"
#include <analyzerbase/analyzermanager.h>
#include <coreplugin/icore.h>
@@ -61,6 +62,7 @@ namespace QmlProfiler {
class QmlProfilerRunControl::QmlProfilerRunControlPrivate
{
public:
+ Internal::QmlProfilerTool *m_tool = 0;
QmlProfilerStateManager *m_profilerState = 0;
QTimer m_noDebugOutputTimer;
QmlDebug::QmlOutputParser m_outputParser;
@@ -71,10 +73,12 @@ public:
// QmlProfilerRunControl
//
-QmlProfilerRunControl::QmlProfilerRunControl(RunConfiguration *runConfiguration)
+QmlProfilerRunControl::QmlProfilerRunControl(RunConfiguration *runConfiguration,
+ Internal::QmlProfilerTool *tool)
: AnalyzerRunControl(runConfiguration, ProjectExplorer::Constants::QML_PROFILER_RUN_MODE)
, d(new QmlProfilerRunControlPrivate)
{
+ d->m_tool = tool;
// Only wait 4 seconds for the 'Waiting for connection' on application output, then just try to connect
// (application output might be redirected / blocked)
d->m_noDebugOutputTimer.setSingleShot(true);
@@ -248,6 +252,11 @@ void QmlProfilerRunControl::registerProfilerStateManager( QmlProfilerStateManage
this, &QmlProfilerRunControl::profilerStateChanged);
}
+void QmlProfilerRunControl::finalizeSetup()
+{
+ d->m_tool->finalizeRunControl(this);
+}
+
void QmlProfilerRunControl::profilerStateChanged()
{
switch (d->m_profilerState->currentState()) {
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrol.h b/src/plugins/qmlprofiler/qmlprofilerruncontrol.h
index 989f85afcd..5430a0ede6 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrol.h
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrol.h
@@ -33,15 +33,19 @@
namespace QmlProfiler {
+namespace Internal { class QmlProfilerTool; }
+
class QmlProfilerRunControl : public Analyzer::AnalyzerRunControl
{
Q_OBJECT
public:
- QmlProfilerRunControl(ProjectExplorer::RunConfiguration *runConfiguration);
+ QmlProfilerRunControl(ProjectExplorer::RunConfiguration *runConfiguration,
+ Internal::QmlProfilerTool *tool);
~QmlProfilerRunControl();
void registerProfilerStateManager( QmlProfilerStateManager *profilerState );
+ void finalizeSetup();
void notifyRemoteSetupDone(quint16 port);
StopResult stop();
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
index bf754e6efd..8c615ce25a 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
@@ -29,6 +29,8 @@
#include "qmlprofilerrunconfigurationaspect.h"
#include <analyzerbase/ianalyzertool.h>
+#include <analyzerbase/analyzerruncontrol.h>
+#include <analyzerbase/analyzermanager.h>
#include <debugger/debuggerrunconfigurationaspect.h>
@@ -61,38 +63,60 @@ bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, Co
&& (qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration));
}
-static AnalyzerStartParameters createQmlProfilerStartParameters(RunConfiguration *runConfiguration)
+RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, Core::Id mode, QString *errorMessage)
{
- AnalyzerStartParameters sp;
+ QTC_ASSERT(canRun(runConfiguration, mode), return 0);
+ Kit *kit = runConfiguration->target()->kit();
// FIXME: This is only used to communicate the connParams settings.
- auto rc = qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
- QTC_ASSERT(rc, return sp);
- sp.debuggee = rc->executable();
- sp.debuggeeArgs = rc->commandLineArguments();
-
- const QtSupport::BaseQtVersion *version =
- QtSupport::QtKitInformation::qtVersion(runConfiguration->target()->kit());
+ auto localRunConfiguration = qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
+ QTC_ASSERT(localRunConfiguration, return 0);
+ AnalyzerRunnable runnable;
+ runnable.debuggee = localRunConfiguration->executable();
+ runnable.debuggeeArgs = localRunConfiguration->commandLineArguments();
+
+ AnalyzerConnection connection;
+ const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
if (version) {
QtSupport::QtVersionNumber versionNumber = version->qtVersion();
if (versionNumber.majorVersion >= 5 && versionNumber.minorVersion >= 6)
- sp.analyzerSocket = LocalQmlProfilerRunner::findFreeSocket();
+ connection.analyzerSocket = LocalQmlProfilerRunner::findFreeSocket();
else
- sp.analyzerPort = LocalQmlProfilerRunner::findFreePort(sp.analyzerHost);
+ connection.analyzerPort = LocalQmlProfilerRunner::findFreePort(connection.analyzerHost);
} else {
qWarning() << "Running QML profiler on Kit without Qt version??";
- sp.analyzerPort = LocalQmlProfilerRunner::findFreePort(sp.analyzerHost);
+ connection.analyzerPort = LocalQmlProfilerRunner::findFreePort(connection.analyzerHost);
}
- return sp;
-}
-
-RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, Core::Id mode, QString *errorMessage)
-{
- QTC_ASSERT(canRun(runConfiguration, mode), return 0);
+ // only desktop device is supported
+ const IDevice::ConstPtr device = DeviceKitInformation::device(kit);
+ QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return 0);
+
+ auto runControl = qobject_cast<QmlProfilerRunControl *>
+ (AnalyzerManager::createRunControl(runConfiguration, mode));
+ QTC_ASSERT(runControl, return 0);
+
+ runControl->setRunnable(runnable);
+ runControl->setConnection(connection);
+ runControl->finalizeSetup();
+
+ LocalQmlProfilerRunner::Configuration conf;
+ conf.executable = runnable.debuggee;
+ conf.executableArguments = runnable.debuggeeArgs;
+ conf.workingDirectory = runControl->workingDirectory();
+ conf.socket = connection.analyzerSocket;
+ if (EnvironmentAspect *environment = runConfiguration->extraAspect<EnvironmentAspect>())
+ conf.environment = environment->environment();
+ conf.port = connection.analyzerPort;
+
+ if (conf.executable.isEmpty()) {
+ if (errorMessage)
+ *errorMessage = tr("No executable file to launch.");
+ return 0;
+ }
- AnalyzerStartParameters sp = createQmlProfilerStartParameters(runConfiguration);
- return LocalQmlProfilerRunner::createLocalRunControl(runConfiguration, sp, errorMessage);
+ (void) new LocalQmlProfilerRunner(conf, runControl);
+ return runControl;
}
ProjectExplorer::IRunConfigurationAspect *
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index 742d219502..58da7cbc3d 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -201,8 +201,7 @@ static QString sysroot(RunConfiguration *runConfig)
return QString();
}
-AnalyzerRunControl *QmlProfilerTool::createRunControl(const AnalyzerStartParameters &sp,
- RunConfiguration *runConfiguration)
+AnalyzerRunControl *QmlProfilerTool::createRunControl(RunConfiguration *runConfiguration)
{
QmlProfilerRunConfigurationAspect *aspect = static_cast<QmlProfilerRunConfigurationAspect *>(
runConfiguration->extraAspect(Constants::SETTINGS));
@@ -215,22 +214,25 @@ AnalyzerRunControl *QmlProfilerTool::createRunControl(const AnalyzerStartParamet
settings->flushInterval() : 0);
d->m_profilerConnections->setAggregateTraces(settings->aggregateTraces());
- QmlProfilerRunControl *engine = new QmlProfilerRunControl(runConfiguration);
- engine->setRunnable(AnalyzerRunnable(sp));
- engine->setConnection(AnalyzerConnection(sp));
+ return new QmlProfilerRunControl(runConfiguration, this);
+}
- engine->registerProfilerStateManager(d->m_profilerState);
+void QmlProfilerTool::finalizeRunControl(QmlProfilerRunControl *runControl)
+{
+ runControl->registerProfilerStateManager(d->m_profilerState);
// FIXME: Check that there's something sensible in sp.connParams
- if (!sp.analyzerSocket.isEmpty())
- d->m_profilerConnections->setLocalSocket(sp.analyzerSocket);
+ auto &connection = runControl->connection();
+ if (!connection.analyzerSocket.isEmpty())
+ d->m_profilerConnections->setLocalSocket(connection.analyzerSocket);
else
- d->m_profilerConnections->setTcpConnection(sp.analyzerHost, sp.analyzerPort);
+ d->m_profilerConnections->setTcpConnection(connection.analyzerHost, connection.analyzerPort);
//
// Initialize m_projectFinder
//
+ RunConfiguration *runConfiguration = runControl->runConfiguration();
QString projectDirectory;
if (runConfiguration) {
Project *project = runConfiguration->target()->project();
@@ -239,13 +241,11 @@ AnalyzerRunControl *QmlProfilerTool::createRunControl(const AnalyzerStartParamet
populateFileFinder(projectDirectory, sysroot(runConfiguration));
- if (sp.analyzerSocket.isEmpty())
- connect(engine, &QmlProfilerRunControl::processRunning,
+ if (connection.analyzerSocket.isEmpty())
+ connect(runControl, &QmlProfilerRunControl::processRunning,
d->m_profilerConnections, &QmlProfilerClientManager::connectTcpClient);
connect(d->m_profilerConnections, &QmlProfilerClientManager::connectionFailed,
- engine, &QmlProfilerRunControl::cancelProcess);
-
- return engine;
+ runControl, &QmlProfilerRunControl::cancelProcess);
}
QWidget *QmlProfilerTool::createWidgets()
@@ -516,17 +516,20 @@ void QmlProfilerTool::startRemoteTool()
settings->setValue(QLatin1String("AnalyzerQmlAttachDialog/port"), port);
}
- AnalyzerStartParameters sp;
+ AnalyzerConnection connection;
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
if (device) {
- sp.connParams = device->sshParameters();
- sp.analyzerHost = device->qmlProfilerHost();
+ connection.connParams = device->sshParameters();
+ connection.analyzerHost = device->qmlProfilerHost();
}
- sp.analyzerPort = port;
+ connection.analyzerPort = port;
+
+ auto runControl = qobject_cast<QmlProfilerRunControl *>(createRunControl(0));
+ runControl->setConnection(connection);
+ runControl->finalizeSetup();
- AnalyzerRunControl *rc = createRunControl(sp, 0);
- ProjectExplorerPlugin::startRunControl(rc, ProjectExplorer::Constants::QML_PROFILER_RUN_MODE);
+ ProjectExplorerPlugin::startRunControl(runControl, ProjectExplorer::Constants::QML_PROFILER_RUN_MODE);
}
void QmlProfilerTool::logState(const QString &msg)
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h
index f60853bd80..71944aa65f 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.h
+++ b/src/plugins/qmlprofiler/qmlprofilertool.h
@@ -38,6 +38,9 @@ class QMessageBox;
QT_END_NAMESPACE
namespace QmlProfiler {
+
+class QmlProfilerRunControl;
+
namespace Internal {
class QMLPROFILER_EXPORT QmlProfilerTool : public QObject
@@ -48,8 +51,8 @@ public:
explicit QmlProfilerTool(QObject *parent);
~QmlProfilerTool();
- Analyzer::AnalyzerRunControl *createRunControl(const Analyzer::AnalyzerStartParameters &sp,
- ProjectExplorer::RunConfiguration *runConfiguration = 0);
+ Analyzer::AnalyzerRunControl *createRunControl(ProjectExplorer::RunConfiguration *runConfiguration = 0);
+ void finalizeRunControl(QmlProfilerRunControl *runControl);
QWidget *createWidgets();
bool prepareTool();