forked from qt-creator/qt-creator
QmlDebug: Allow retrieval of blocked engines from EngineControl
Also, don't accidentally add engines to the list on engineAdded() and engineRemoved(). Change-Id: Ida4362eb003b85282dad17afbf0116c82f024288 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -65,6 +65,11 @@ void QmlEngineControlClient::releaseEngine(int engineId)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<int> QmlEngineControlClient::blockedEngines() const
|
||||||
|
{
|
||||||
|
return m_blockedEngines.keys();
|
||||||
|
}
|
||||||
|
|
||||||
void QmlEngineControlClient::messageReceived(const QByteArray &data)
|
void QmlEngineControlClient::messageReceived(const QByteArray &data)
|
||||||
{
|
{
|
||||||
QPacket stream(dataStreamVersion(), data);
|
QPacket stream(dataStreamVersion(), data);
|
||||||
@@ -77,30 +82,36 @@ void QmlEngineControlClient::messageReceived(const QByteArray &data)
|
|||||||
if (!stream.atEnd())
|
if (!stream.atEnd())
|
||||||
stream >> name;
|
stream >> name;
|
||||||
|
|
||||||
EngineState &state = m_blockedEngines[id];
|
auto handleWaiting = [&](CommandType command, std::function<void()> emitter) {
|
||||||
QTC_ASSERT(state.blockers == 0 && state.releaseCommand == InvalidCommand, /**/);
|
EngineState &state = m_blockedEngines[id];
|
||||||
|
QTC_CHECK(state.blockers == 0);
|
||||||
|
QTC_CHECK(state.releaseCommand == InvalidCommand);
|
||||||
|
state.releaseCommand = command;
|
||||||
|
emitter();
|
||||||
|
if (state.blockers == 0) {
|
||||||
|
sendCommand(state.releaseCommand, id);
|
||||||
|
m_blockedEngines.remove(id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
switch (message) {
|
switch (message) {
|
||||||
case EngineAboutToBeAdded:
|
case EngineAboutToBeAdded:
|
||||||
state.releaseCommand = StartWaitingEngine;
|
handleWaiting(StartWaitingEngine, [&](){
|
||||||
emit engineAboutToBeAdded(id, name);
|
emit engineAboutToBeAdded(id, name);
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
case EngineAdded:
|
case EngineAdded:
|
||||||
emit engineAdded(id, name);
|
emit engineAdded(id, name);
|
||||||
break;
|
break;
|
||||||
case EngineAboutToBeRemoved:
|
case EngineAboutToBeRemoved:
|
||||||
state.releaseCommand = StopWaitingEngine;
|
handleWaiting(StopWaitingEngine, [&](){
|
||||||
emit engineAboutToBeRemoved(id, name);
|
emit engineAboutToBeRemoved(id, name);
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
case EngineRemoved:
|
case EngineRemoved:
|
||||||
emit engineRemoved(id, name);
|
emit engineRemoved(id, name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.blockers == 0 && state.releaseCommand != InvalidCommand) {
|
|
||||||
sendCommand(state.releaseCommand, id);
|
|
||||||
m_blockedEngines.remove(id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlEngineControlClient::sendCommand(QmlEngineControlClient::CommandType command, int engineId)
|
void QmlEngineControlClient::sendCommand(QmlEngineControlClient::CommandType command, int engineId)
|
||||||
|
@@ -52,6 +52,8 @@ public:
|
|||||||
void blockEngine(int engineId);
|
void blockEngine(int engineId);
|
||||||
void releaseEngine(int engineId);
|
void releaseEngine(int engineId);
|
||||||
|
|
||||||
|
QList<int> blockedEngines() const;
|
||||||
|
|
||||||
void messageReceived(const QByteArray &) override;
|
void messageReceived(const QByteArray &) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
Reference in New Issue
Block a user