From 4cf8a6ad7189991ff6852f4096fa8673ffa98bf0 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 16 Dec 2013 15:30:22 +0100 Subject: Parse source location for signal handling functions Previously the source location of signal handlers was always line 0 and column 0. This poses problems when trying to extract meaningful profiling information. The change assigns the source location of the statement declaring the function as the function's source location. Task-number: QTCREATORBUG-11100 Change-Id: I4bb8682b35147a7cfe4ecec342d4a00623bb1e0d Reviewed-by: Simon Hausmann --- .../data/signalSourceLocation.qml | 9 +++++++ .../qqmlprofilerservice/qqmlprofilerservice.pro | 3 ++- .../tst_qqmlprofilerservice.cpp | 30 ++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/auto/qml/debugger/qqmlprofilerservice/data/signalSourceLocation.qml (limited to 'tests/auto/qml/debugger/qqmlprofilerservice') diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/data/signalSourceLocation.qml b/tests/auto/qml/debugger/qqmlprofilerservice/data/signalSourceLocation.qml new file mode 100644 index 0000000000..25e63669c4 --- /dev/null +++ b/tests/auto/qml/debugger/qqmlprofilerservice/data/signalSourceLocation.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 + +Rectangle { + width: 400 + height: 400 + + onWidthChanged: console.log(width); + Component.onCompleted: width = 500; +} diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro index a83927e720..d08ed31e8b 100644 --- a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro +++ b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro @@ -15,4 +15,5 @@ DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 OTHER_FILES += \ data/pixmapCacheTest.qml \ - data/controlFromJS.qml + data/controlFromJS.qml \ + data/signalSourceLocation.qml diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp index acbc62807b..276dcf5d29 100644 --- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp +++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp @@ -181,6 +181,7 @@ private slots: void scenegraphData(); void profileOnExit(); void controlFromJS(); + void signalSourceLocation(); }; void QQmlProfilerClient::messageReceived(const QByteArray &message) @@ -513,6 +514,35 @@ void tst_QQmlProfilerService::controlFromJS() QCOMPARE(m_client->traceMessages.last().detailType, (int)QQmlProfilerClient::EndTrace); } +void tst_QQmlProfilerService::signalSourceLocation() +{ + connect(true, "signalSourceLocation.qml"); + QVERIFY(m_client); + QTRY_COMPARE(m_client->state(), QQmlDebugClient::Enabled); + + m_client->setTraceState(true); + while (!(m_process->output().contains(QLatin1String("500")))) + QVERIFY(QQmlDebugTest::waitForSignal(m_process, SIGNAL(readyReadStandardOutput()))); + m_client->setTraceState(false); + QVERIFY2(QQmlDebugTest::waitForSignal(m_client, SIGNAL(complete())), "No trace received in time."); + + // must start with "StartTrace" + QCOMPARE(m_client->traceMessages.first().messageType, (int)QQmlProfilerClient::Event); + QCOMPARE(m_client->traceMessages.first().detailType, (int)QQmlProfilerClient::StartTrace); + + QVERIFY(m_client->traceMessages[14].detailData.endsWith("signalSourceLocation.qml")); + QVERIFY(m_client->traceMessages[14].line == 8); + QVERIFY(m_client->traceMessages[14].column == 28); + + QVERIFY(m_client->traceMessages[16].detailData.endsWith("signalSourceLocation.qml")); + QVERIFY(m_client->traceMessages[16].line == 7); + QVERIFY(m_client->traceMessages[16].column == 21); + + // must end with "EndTrace" + QCOMPARE(m_client->traceMessages.last().messageType, (int)QQmlProfilerClient::Event); + QCOMPARE(m_client->traceMessages.last().detailType, (int)QQmlProfilerClient::EndTrace); +} + QTEST_MAIN(tst_QQmlProfilerService) #include "tst_qqmlprofilerservice.moc" -- cgit v1.2.3