aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmldebug
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-11-01 10:58:31 +0100
committerUlf Hermann <ulf.hermann@qt.io>2018-11-15 14:21:54 +0000
commit71645c45b9880d1a349c9a41a73d455f31c9de75 (patch)
treef3c0474e66697573ef5debefd653e777677b54a8 /src/qmldebug
parent0647853c1659515684da1fb0f44d12eac993dc69 (diff)
Qml Tooling: Correctly sort debug messages into traces
Debug messages are sent from a different debug service and generally arrive before they are "due". Therefore we buffer them and pass them on when the trace has advanced to their position. However, we forgot some places where we needed to check if there are pending debug messages to be sent. Change-Id: Ia6263086a9d06ae7c77c9e2afa85e6e1d8c8a19b Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src/qmldebug')
-rw-r--r--src/qmldebug/qqmlprofilerclient.cpp16
-rw-r--r--src/qmldebug/qqmlprofilerclient_p_p.h1
2 files changed, 12 insertions, 5 deletions
diff --git a/src/qmldebug/qqmlprofilerclient.cpp b/src/qmldebug/qqmlprofilerclient.cpp
index 73db2ad94d..5477af89d4 100644
--- a/src/qmldebug/qqmlprofilerclient.cpp
+++ b/src/qmldebug/qqmlprofilerclient.cpp
@@ -95,11 +95,16 @@ int QQmlProfilerClientPrivate::resolveStackTop()
void QQmlProfilerClientPrivate::forwardEvents(const QQmlProfilerEvent &last)
{
+ forwardDebugMessages(last.timestamp());
+ eventReceiver->addEvent(last);
+}
+
+void QQmlProfilerClientPrivate::forwardDebugMessages(qint64 untilTimestamp)
+{
while (!pendingDebugMessages.isEmpty()
- && pendingDebugMessages.front().timestamp() <= last.timestamp()) {
+ && pendingDebugMessages.front().timestamp() <= untilTimestamp) {
eventReceiver->addEvent(pendingDebugMessages.dequeue());
}
- eventReceiver->addEvent(last);
}
void QQmlProfilerClientPrivate::processCurrentEvent()
@@ -142,7 +147,7 @@ void QQmlProfilerClientPrivate::processCurrentEvent()
int typeIndex = resolveType(currentEvent);
currentEvent.event.setTypeIndex(typeIndex);
if (rangesInProgress.isEmpty())
- eventReceiver->addEvent(currentEvent.event);
+ forwardEvents(currentEvent.event);
else
pendingMessages.enqueue(currentEvent.event);
break;
@@ -228,8 +233,7 @@ void QQmlProfilerClientPrivate::finalize()
currentEvent.event.setTimestamp(maximumTime);
processCurrentEvent();
}
- while (!pendingDebugMessages.isEmpty())
- eventReceiver->addEvent(pendingDebugMessages.dequeue());
+ forwardDebugMessages(std::numeric_limits<qint64>::max());
}
@@ -345,12 +349,14 @@ void QQmlProfilerClient::messageReceived(const QByteArray &data)
&& d->currentEvent.type.detailType() == StartTrace) {
const QList<int> engineIds = d->currentEvent.event.numbers<QList<int>, qint32>();
d->trackedEngines.append(engineIds);
+ d->forwardDebugMessages(d->currentEvent.event.timestamp());
emit traceStarted(d->currentEvent.event.timestamp(), engineIds);
} else if (d->currentEvent.type.message() == Event
&& d->currentEvent.type.detailType() == EndTrace) {
const QList<int> engineIds = d->currentEvent.event.numbers<QList<int>, qint32>();
for (int engineId : engineIds)
d->trackedEngines.removeAll(engineId);
+ d->forwardDebugMessages(d->currentEvent.event.timestamp());
emit traceFinished(d->currentEvent.event.timestamp(), engineIds);
} else if (d->updateFeatures(d->currentEvent.type.feature())) {
d->processCurrentEvent();
diff --git a/src/qmldebug/qqmlprofilerclient_p_p.h b/src/qmldebug/qqmlprofilerclient_p_p.h
index df73209858..52d42eae82 100644
--- a/src/qmldebug/qqmlprofilerclient_p_p.h
+++ b/src/qmldebug/qqmlprofilerclient_p_p.h
@@ -86,6 +86,7 @@ public:
int resolveType(const QQmlProfilerTypedEvent &type);
int resolveStackTop();
void forwardEvents(const QQmlProfilerEvent &last);
+ void forwardDebugMessages(qint64 untilTimestamp);
void processCurrentEvent();
void finalize();