forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.5'
Conflicts: src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp src/plugins/qmlprofiler/qmlprofilertraceclient.cpp Change-Id: I94647f59d7a9df48168ac066555afe80f5f9b91f
This commit is contained in:
@@ -56,6 +56,7 @@ public:
|
||||
bool updateFeatures(ProfileFeature feature);
|
||||
int resolveType(const QmlTypedEvent &type);
|
||||
int resolveStackTop();
|
||||
void forwardEvents(const QmlEvent &last);
|
||||
void processCurrentEvent();
|
||||
|
||||
QmlProfilerTraceClient *q;
|
||||
@@ -74,6 +75,7 @@ public:
|
||||
QHash<qint64, int> serverTypeIds;
|
||||
QStack<QmlTypedEvent> rangesInProgress;
|
||||
QQueue<QmlEvent> pendingMessages;
|
||||
QQueue<QmlEvent> pendingDebugMessages;
|
||||
};
|
||||
|
||||
int QmlProfilerTraceClientPrivate::resolveType(const QmlTypedEvent &event)
|
||||
@@ -117,12 +119,21 @@ int QmlProfilerTraceClientPrivate::resolveStackTop()
|
||||
typedEvent.event.setTypeIndex(typeIndex);
|
||||
while (!pendingMessages.isEmpty()
|
||||
&& pendingMessages.head().timestamp() < typedEvent.event.timestamp()) {
|
||||
modelManager->addEvent(pendingMessages.dequeue());
|
||||
forwardEvents(pendingMessages.dequeue());
|
||||
}
|
||||
modelManager->addEvent(typedEvent.event);
|
||||
forwardEvents(typedEvent.event);
|
||||
return typeIndex;
|
||||
}
|
||||
|
||||
void QmlProfilerTraceClientPrivate::forwardEvents(const QmlEvent &last)
|
||||
{
|
||||
while (!pendingDebugMessages.isEmpty()
|
||||
&& pendingDebugMessages.front().timestamp() <= last.timestamp()) {
|
||||
modelManager->addEvent(pendingDebugMessages.dequeue());
|
||||
}
|
||||
modelManager->addEvent(last);
|
||||
}
|
||||
|
||||
void QmlProfilerTraceClientPrivate::processCurrentEvent()
|
||||
{
|
||||
// RangeData and RangeLocation always apply to the range on the top of the stack. Furthermore,
|
||||
@@ -142,8 +153,8 @@ void QmlProfilerTraceClientPrivate::processCurrentEvent()
|
||||
break;
|
||||
currentEvent.event.setTypeIndex(typeIndex);
|
||||
while (!pendingMessages.isEmpty())
|
||||
modelManager->addEvent(pendingMessages.dequeue());
|
||||
modelManager->addEvent(currentEvent.event);
|
||||
forwardEvents(pendingMessages.dequeue());
|
||||
forwardEvents(currentEvent.event);
|
||||
rangesInProgress.pop();
|
||||
break;
|
||||
}
|
||||
@@ -155,11 +166,15 @@ void QmlProfilerTraceClientPrivate::processCurrentEvent()
|
||||
if (!rangesInProgress.isEmpty())
|
||||
rangesInProgress.top().type.setLocation(currentEvent.type.location());
|
||||
break;
|
||||
case DebugMessage:
|
||||
currentEvent.event.setTypeIndex(resolveType(currentEvent));
|
||||
pendingDebugMessages.enqueue(currentEvent.event);
|
||||
break;
|
||||
default: {
|
||||
int typeIndex = resolveType(currentEvent);
|
||||
currentEvent.event.setTypeIndex(typeIndex);
|
||||
if (rangesInProgress.isEmpty())
|
||||
modelManager->addEvent(currentEvent.event);
|
||||
forwardEvents(currentEvent.event);
|
||||
else
|
||||
pendingMessages.enqueue(currentEvent.event);
|
||||
break;
|
||||
@@ -204,6 +219,7 @@ void QmlProfilerTraceClient::clear()
|
||||
d->eventTypeIds.clear();
|
||||
d->rangesInProgress.clear();
|
||||
d->pendingMessages.clear();
|
||||
d->pendingDebugMessages.clear();
|
||||
if (d->recordedFeatures != 0) {
|
||||
d->recordedFeatures = 0;
|
||||
emit recordedFeaturesChanged(0);
|
||||
@@ -248,7 +264,7 @@ void QmlProfilerTraceClient::setRequestedFeatures(quint64 features)
|
||||
[this](QtMsgType type, const QString &text,
|
||||
const QmlDebug::QDebugContextInfo &context)
|
||||
{
|
||||
d->updateFeatures(ProfileDebugMessages);
|
||||
QTC_ASSERT(d->updateFeatures(ProfileDebugMessages), return);
|
||||
d->currentEvent.event.setTimestamp(context.timestamp > 0 ? context.timestamp : 0);
|
||||
d->currentEvent.event.setTypeIndex(-1);
|
||||
d->currentEvent.event.setString(text);
|
||||
@@ -299,6 +315,10 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
|
||||
d->currentEvent.event.setTimestamp(d->maximumTime);
|
||||
d->processCurrentEvent();
|
||||
}
|
||||
QTC_CHECK(d->pendingMessages.isEmpty());
|
||||
while (!d->pendingDebugMessages.isEmpty())
|
||||
d->modelManager->addEvent(d->pendingDebugMessages.dequeue());
|
||||
|
||||
emit complete(d->maximumTime);
|
||||
} else if (d->currentEvent.type.message() == Event
|
||||
&& d->currentEvent.type.detailType() == StartTrace) {
|
||||
|
||||
Reference in New Issue
Block a user