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)
|
||||
{
|
||||
QPacket stream(dataStreamVersion(), data);
|
||||
@@ -77,30 +82,36 @@ void QmlEngineControlClient::messageReceived(const QByteArray &data)
|
||||
if (!stream.atEnd())
|
||||
stream >> name;
|
||||
|
||||
auto handleWaiting = [&](CommandType command, std::function<void()> emitter) {
|
||||
EngineState &state = m_blockedEngines[id];
|
||||
QTC_ASSERT(state.blockers == 0 && state.releaseCommand == InvalidCommand, /**/);
|
||||
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) {
|
||||
case EngineAboutToBeAdded:
|
||||
state.releaseCommand = StartWaitingEngine;
|
||||
handleWaiting(StartWaitingEngine, [&](){
|
||||
emit engineAboutToBeAdded(id, name);
|
||||
});
|
||||
break;
|
||||
case EngineAdded:
|
||||
emit engineAdded(id, name);
|
||||
break;
|
||||
case EngineAboutToBeRemoved:
|
||||
state.releaseCommand = StopWaitingEngine;
|
||||
handleWaiting(StopWaitingEngine, [&](){
|
||||
emit engineAboutToBeRemoved(id, name);
|
||||
});
|
||||
break;
|
||||
case EngineRemoved:
|
||||
emit engineRemoved(id, name);
|
||||
break;
|
||||
}
|
||||
|
||||
if (state.blockers == 0 && state.releaseCommand != InvalidCommand) {
|
||||
sendCommand(state.releaseCommand, id);
|
||||
m_blockedEngines.remove(id);
|
||||
}
|
||||
}
|
||||
|
||||
void QmlEngineControlClient::sendCommand(QmlEngineControlClient::CommandType command, int engineId)
|
||||
|
@@ -52,6 +52,8 @@ public:
|
||||
void blockEngine(int engineId);
|
||||
void releaseEngine(int engineId);
|
||||
|
||||
QList<int> blockedEngines() const;
|
||||
|
||||
void messageReceived(const QByteArray &) override;
|
||||
|
||||
signals:
|
||||
|
Reference in New Issue
Block a user