From e6620167fc573c2a39ee81dd41530ab188585e6c Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Tue, 12 Apr 2011 17:24:56 +0200 Subject: [PATCH] QmlProfiler: Enable on Windows Replace use of sleep() call with a timer. --- src/plugins/plugins.pro | 12 ++++---- src/plugins/qmlprofiler/qmlprofiler.pro | 2 -- src/plugins/qmlprofiler/qmlprofilerengine.cpp | 6 ---- src/plugins/qmlprofiler/qmlprofilertool.cpp | 29 ++++++++++++++++++- src/plugins/qmlprofiler/qmlprofilertool.h | 3 ++ 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 6a7590626ac..58825e73b65 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -64,7 +64,7 @@ contains(QT_CONFIG, declarative) { minQtVersion(4, 7, 1) { SUBDIRS += plugin_qmldesigner - !win32:SUBDIRS += plugin_qmlprofiler + SUBDIRS += plugin_qmlprofiler } else { warning() warning("QmlDesigner plugin has been disabled.") @@ -269,13 +269,13 @@ plugin_analyzerbase.depends += plugin_projectexplorer plugin_callgrind.depends = plugin_coreplugin plugin_callgrind.depends += plugin_analyzerbase plugin_callgrind.depends += plugin_valgrindtoolbase - - plugin_qmlprofiler.subdir = qmlprofiler - plugin_qmlprofiler.depends = plugin_coreplugin - plugin_qmlprofiler.depends += plugin_analyzerbase - plugin_qmlprofiler.depends += plugin_qmlprojectmanager } +plugin_qmlprofiler.subdir = qmlprofiler +plugin_qmlprofiler.depends = plugin_coreplugin +plugin_qmlprofiler.depends += plugin_analyzerbase +plugin_qmlprofiler.depends += plugin_qmlprojectmanager + plugin_qmljstools.subdir = qmljstools plugin_qmljstools.depends = plugin_projectexplorer plugin_qmljstools.depends += plugin_coreplugin diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro index ff399c98966..92fe11f0de9 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.pro +++ b/src/plugins/qmlprofiler/qmlprofiler.pro @@ -8,11 +8,9 @@ include(../../plugins/coreplugin/coreplugin.pri) include(../../plugins/analyzerbase/analyzerbase.pri) include(../../plugins/qmlprojectmanager/qmlprojectmanager.pri) - QT += network script declarative include(canvas/canvas.pri) -#include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) SOURCES += \ qmlprofilerplugin.cpp \ diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index 2862dd184f9..edcfb468237 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -52,9 +52,6 @@ #include <QProcess> -#ifdef Q_OS_UNIX -#include <unistd.h> // sleep -#endif using namespace QmlProfiler::Internal; @@ -176,9 +173,6 @@ bool QmlProfilerEngine::QmlProfilerEnginePrivate::launchperfmonitor() connect(m_process,SIGNAL(finished(int)),q,SLOT(spontaneousStop())); m_process->start(m_params.debuggee, arguments); - // give the process time to start - sleep(1); - if (!m_process->waitForStarted()) { if (QmlProfilerPlugin::debugOutput) qWarning("QmlProfiler: %s failed to start", qPrintable(m_params.displayName)); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 8e592e6a883..cebc1fa4c4e 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -109,6 +109,8 @@ public: QmlProfilerTool *q; QDeclarativeDebugConnection *m_client; + QTimer m_connectionTimer; + int m_connectionAttempts; TraceWindow *m_traceWindow; QTabWidget *m_tabbed; QmlProfilerSummaryView *m_summary; @@ -128,6 +130,7 @@ QmlProfilerTool::QmlProfilerTool(QObject *parent) : IAnalyzerTool(parent), d(new QmlProfilerToolPrivate(this)) { d->m_client = 0; + d->m_connectionAttempts = 0; d->m_traceWindow = 0; d->m_outputPaneAdapter = 0; d->m_project = 0; @@ -135,6 +138,9 @@ QmlProfilerTool::QmlProfilerTool(QObject *parent) d->m_isAttached = false; d->m_attachAction = 0; d->m_recordingEnabled = true; + + d->m_connectionTimer.setInterval(200); + connect(&d->m_connectionTimer, SIGNAL(timeout()), SLOT(tryToConnect())); } QmlProfilerTool::~QmlProfilerTool() @@ -190,7 +196,7 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp return engine; } -void QmlProfilerTool::initialize(ExtensionSystem::IPlugin */*plugin*/) +void QmlProfilerTool::initialize(ExtensionSystem::IPlugin * /*plugin*/) { qmlRegisterType<Canvas>("Monitor", 1, 0, "Canvas"); qmlRegisterType<TiledCanvas>("Monitor", 1, 0, "TiledCanvas"); @@ -286,6 +292,11 @@ QWidget *QmlProfilerTool::createTimeLineWidget() } void QmlProfilerTool::connectClient() +{ + d->m_connectionTimer.start(); +} + +void QmlProfilerTool::connectToClient() { QDeclarativeDebugConnection *newClient = new QDeclarativeDebugConnection; d->m_traceWindow->reset(newClient); @@ -419,3 +430,19 @@ void QmlProfilerTool::updateAttachAction() d->m_attachAction->setEnabled(Analyzer::AnalyzerManager::instance()->currentTool() == this); } +void QmlProfilerTool::tryToConnect() +{ + ++d->m_connectionAttempts; + + if (d->m_client->isConnected()) { + d->m_connectionTimer.stop(); + d->m_connectionAttempts = 0; + } else if (d->m_connectionAttempts == 50) { + d->m_connectionTimer.stop(); + d->m_connectionAttempts = 0; + // TODO: Warn user that connection failed + //emit connectionStartupFailed(); + } else { + connectToClient(); + } +} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index a59361929e0..58a6242b1a5 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -85,8 +85,11 @@ private slots: void updateProjectFileList(); void attach(); void updateAttachAction(); + void tryToConnect(); private: + void connectToClient(); + class QmlProfilerToolPrivate; QmlProfilerToolPrivate *d; }; -- GitLab