summaryrefslogtreecommitdiff
path: root/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp')
-rw-r--r--plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp81
1 files changed, 61 insertions, 20 deletions
diff --git a/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
index 6e3ab3ff6a..86f0583e81 100644
--- a/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
+++ b/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Kläralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
@@ -37,11 +37,22 @@
#include <analyzerbase/analyzerruncontrol.h>
#include <analyzerbase/analyzersettings.h>
+#include <debugger/debuggerrunconfigurationaspect.h>
+
+#include <projectexplorer/environmentaspect.h>
#include <projectexplorer/kitinformation.h>
+#include <projectexplorer/localapplicationrunconfiguration.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/session.h>
#include <projectexplorer/target.h>
+#include <qmlprojectmanager/qmlprojectrunconfiguration.h>
+
#include <utils/qtcassert.h>
+#include <QTcpServer>
+
using namespace Analyzer;
using namespace ProjectExplorer;
@@ -55,35 +66,65 @@ QmlProfilerRunControlFactory::QmlProfilerRunControlFactory(QObject *parent) :
bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, RunMode mode) const
{
- if (mode != QmlProfilerRunMode)
- return false;
- IAnalyzerTool *tool = AnalyzerManager::toolFromRunMode(mode);
- if (tool)
- return tool->canRun(runConfiguration, mode);
- return false;
+ return mode == QmlProfilerRunMode
+ && (qobject_cast<QmlProjectManager::QmlProjectRunConfiguration *>(runConfiguration)
+ || qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration));
}
-RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, RunMode mode, QString *errorMessage)
+static AnalyzerStartParameters createQmlProfilerStartParameters(RunConfiguration *runConfiguration)
{
- IAnalyzerTool *tool = AnalyzerManager::toolFromRunMode(mode);
- if (!tool) {
- if (errorMessage)
- *errorMessage = tr("No analyzer tool selected"); // never happens
- return 0;
+ AnalyzerStartParameters sp;
+ EnvironmentAspect *environment = runConfiguration->extraAspect<EnvironmentAspect>();
+
+ // FIXME: This is only used to communicate the connParams settings.
+ if (QmlProjectManager::QmlProjectRunConfiguration *rc1 =
+ qobject_cast<QmlProjectManager::QmlProjectRunConfiguration *>(runConfiguration)) {
+ // This is a "plain" .qmlproject.
+ if (environment)
+ sp.environment = environment->environment();
+ sp.workingDirectory = rc1->workingDirectory();
+ sp.debuggee = rc1->observerPath();
+ sp.debuggeeArgs = rc1->viewerArguments();
+ sp.displayName = rc1->displayName();
+ } else if (LocalApplicationRunConfiguration *rc2 =
+ qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration)) {
+ if (environment)
+ sp.environment = environment->environment();
+ sp.workingDirectory = rc2->workingDirectory();
+ sp.debuggee = rc2->executable();
+ sp.debuggeeArgs = rc2->commandLineArguments();
+ sp.displayName = rc2->displayName();
+ } else {
+ // What could that be?
+ QTC_ASSERT(false, return sp);
+ }
+ const IDevice::ConstPtr device = DeviceKitInformation::device(runConfiguration->target()->kit());
+ if (device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
+ QTcpServer server;
+ if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) {
+ qWarning() << "Cannot open port on host for QML profiling.";
+ return sp;
+ }
+ sp.analyzerHost = server.serverAddress().toString();
+ sp.analyzerPort = server.serverPort();
}
+ sp.startMode = StartLocal;
+ return sp;
+}
+RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, RunMode mode, QString *errorMessage)
+{
QTC_ASSERT(canRun(runConfiguration, mode), return 0);
- AnalyzerStartParameters sp = tool->createStartParameters(runConfiguration, mode);
- sp.toolId = tool->id();
+ AnalyzerStartParameters sp = createQmlProfilerStartParameters(runConfiguration);
+ sp.runMode = mode;
// only desktop device is supported
- const ProjectExplorer::IDevice::ConstPtr device =
- ProjectExplorer::DeviceKitInformation::device(runConfiguration->target()->kit());
+ const IDevice::ConstPtr device = DeviceKitInformation::device(runConfiguration->target()->kit());
QTC_ASSERT(device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE, return 0);
- AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration);
- QmlProfilerEngine *engine = qobject_cast<QmlProfilerEngine *>(rc->engine());
+ AnalyzerRunControl *rc = AnalyzerManager::createRunControl(sp, runConfiguration);
+ QmlProfilerRunControl *engine = qobject_cast<QmlProfilerRunControl *>(rc);
if (!engine) {
delete rc;
return 0;
@@ -94,7 +135,7 @@ RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfigurat
connect(runner, SIGNAL(stopped()), engine, SLOT(notifyRemoteFinished()));
connect(runner, SIGNAL(appendMessage(QString,Utils::OutputFormat)),
engine, SLOT(logApplicationMessage(QString,Utils::OutputFormat)));
- connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), runner,
+ connect(engine, SIGNAL(starting(const Analyzer::AnalyzerRunControl*)), runner,
SLOT(start()));
connect(rc, SIGNAL(finished()), runner, SLOT(stop()));
return rc;