multi threaded fix for upgrader

Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
chcurran
2021-08-31 18:38:39 -07:00
parent 205c09e200
commit f277cf59dc
2 changed files with 60 additions and 44 deletions
@@ -185,6 +185,50 @@ namespace ScriptCanvasEditor
break;
case ProcessState::Upgrade:
{
AZStd::lock_guard<AZStd::recursive_mutex> lock(m_mutex);
if (m_upgradeComplete)
{
m_inProgress = false;
if (m_scriptCanvasEntity)
{
m_scriptCanvasEntity->Deactivate();
m_scriptCanvasEntity = nullptr;
}
GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage);
if (!m_isUpgradingSingleGraph)
{
if (m_inProgressAsset != m_assetsToUpgrade.end())
{
m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset);
}
if (m_inProgressAsset == m_assetsToUpgrade.end())
{
FinalizeUpgrade();
}
}
else
{
m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset);
m_inProgress = false;
m_state = ProcessState::Inactive;
AZ::SystemTickBus::Handler::BusDisconnect();
AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
}
m_isUpgradingSingleGraph = false;
if (m_assetsToUpgrade.empty())
{
m_ui->upgradeAllButton->setEnabled(false);
}
m_upgradeComplete = false;
}
if (!IsUpgrading())
{
@@ -215,7 +259,7 @@ namespace ScriptCanvasEditor
}
break;
}
default:
break;
}
@@ -329,7 +373,7 @@ namespace ScriptCanvasEditor
void VersionExplorer::UpgradeGraph(const AZ::Data::Asset<AZ::Data::AssetData>& asset)
{
m_inProgress = true;
m_upgradeComplete = false;
Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str());
m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str()));
m_scriptCanvasEntity = nullptr;
@@ -492,7 +536,7 @@ namespace ScriptCanvasEditor
});
}
void VersionExplorer::PerformMove(AZ::Data::Asset<AZ::Data::AssetData> asset, const AZStd::string& source, const AZStd::string& target
void VersionExplorer::PerformMove(AZ::Data::Asset<AZ::Data::AssetData> asset, AZStd::string source, AZStd::string target
, size_t remainingAttempts)
{
VersionExplorerCpp::FileEventHandler fileEventHandler;
@@ -508,7 +552,7 @@ namespace ScriptCanvasEditor
auto streamer = AZ::Interface<AZ::IO::IStreamer>::Get();
AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches();
streamer->SetRequestCompleteCallback(flushRequest
, [this, asset, remainingAttempts, &source, &target]([[maybe_unused]] AZ::IO::FileRequestHandle request)
, [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request)
{
// Continue saving.
AZ::SystemTickBus::QueueFunction(
@@ -535,7 +579,7 @@ namespace ScriptCanvasEditor
AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str());
auto streamer = AZ::Interface<AZ::IO::IStreamer>::Get();
AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str());
streamer->SetRequestCompleteCallback(flushRequest, [this, asset, &source, &target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request)
streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request)
{
// Continue saving.
AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); });
@@ -548,43 +592,11 @@ namespace ScriptCanvasEditor
void VersionExplorer::GraphUpgradeComplete
(const AZ::Data::Asset<AZ::Data::AssetData> asset, OperationResult result, AZStd::string_view message)
{
m_inProgress = false;
if (m_scriptCanvasEntity)
{
m_scriptCanvasEntity->Deactivate();
m_scriptCanvasEntity = nullptr;
}
GraphUpgradeCompleteUIUpdate(asset, result, message);
if (!m_isUpgradingSingleGraph)
{
if (m_inProgressAsset != m_assetsToUpgrade.end())
{
m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset);
}
if (m_inProgressAsset == m_assetsToUpgrade.end())
{
FinalizeUpgrade();
}
}
else
{
m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset);
m_inProgress = false;
m_state = ProcessState::Inactive;
AZ::SystemTickBus::Handler::BusDisconnect();
AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
}
m_isUpgradingSingleGraph = false;
if (m_assetsToUpgrade.empty())
{
m_ui->upgradeAllButton->setEnabled(false);
}
AZStd::lock_guard<AZStd::recursive_mutex> lock(m_mutex);
m_upgradeComplete = true;
m_upgradeResult = result;
m_upgradeMessage = message;
m_upgradeAsset = asset;
}
void VersionExplorer::GraphUpgradeCompleteUIUpdate
@@ -84,7 +84,7 @@ namespace ScriptCanvasEditor
Inactive,
Backup,
Scan,
Upgrade
Upgrade,
};
ProcessState m_state = ProcessState::Inactive;
@@ -135,6 +135,10 @@ namespace ScriptCanvasEditor
AZStd::unique_ptr<Ui::VersionExplorer> m_ui;
AZStd::recursive_mutex m_mutex;
bool m_upgradeComplete = false;
AZ::Data::Asset<AZ::Data::AssetData> m_upgradeAsset;
OperationResult m_upgradeResult;
AZStd::string m_upgradeMessage;
AZStd::unique_ptr<EditorKeepAlive> m_keepEditorAlive;
@@ -163,7 +167,7 @@ namespace ScriptCanvasEditor
void closeEvent(QCloseEvent* event) override;
bool m_overwriteAll = false;
void PerformMove(AZ::Data::Asset<AZ::Data::AssetData> asset, const AZStd::string& source, const AZStd::string& target, size_t remainingAttempts);
void PerformMove(AZ::Data::Asset<AZ::Data::AssetData> asset, AZStd::string source, AZStd::string target, size_t remainingAttempts);
void Log(const char* format, ...);
};