diff --git a/Gems/ExpressionEvaluation/Code/Source/ElementInformationSerializer.inl b/Gems/ExpressionEvaluation/Code/Source/ElementInformationSerializer.inl index 8d297571ad..9796bbb39b 100644 --- a/Gems/ExpressionEvaluation/Code/Source/ElementInformationSerializer.inl +++ b/Gems/ExpressionEvaluation/Code/Source/ElementInformationSerializer.inl @@ -28,7 +28,7 @@ namespace AZ private: using ElementInformation = ExpressionEvaluation::ElementInformation; - static const char* EmptyAnyIdentifier; + static constexpr AZStd::string_view EmptyAnyIdentifier = "Empty AZStd::any"; static bool IsEmptyAny(const rapidjson::Value& typeId) { @@ -43,7 +43,7 @@ namespace AZ JsonSerializationResult::Result Load ( void* outputValue - , const Uuid& outputValueTypeId + , [[maybe_unused]] const Uuid& outputValueTypeId , const rapidjson::Value& inputValue , JsonDeserializerContext& context) override { @@ -161,8 +161,7 @@ namespace AZ else { rapidjson::Value emptyAny; - AZStd::string emptyAnyName(EmptyAnyIdentifier); - emptyAny.SetString(emptyAnyName.c_str(), aznumeric_caster(emptyAnyName.size()), context.GetJsonAllocator()); + emptyAny.SetString(EmptyAnyIdentifier.data(), aznumeric_caster(EmptyAnyIdentifier.size()), context.GetJsonAllocator()); outputValue.AddMember ( rapidjson::StringRef(JsonSerialization::TypeIdFieldIdentifier) , AZStd::move(emptyAny) @@ -176,6 +175,4 @@ namespace AZ }; AZ_CLASS_ALLOCATOR_IMPL(ElementInformationSerializer, SystemAllocator, 0); - - const char* ElementInformationSerializer::EmptyAnyIdentifier = "Empty AZStd::any"; } diff --git a/Gems/ExpressionEvaluation/Code/Source/ExpressionPrimitivesSerializers.inl b/Gems/ExpressionEvaluation/Code/Source/ExpressionPrimitivesSerializers.inl index 76f43a9b82..1eaee38702 100644 --- a/Gems/ExpressionEvaluation/Code/Source/ExpressionPrimitivesSerializers.inl +++ b/Gems/ExpressionEvaluation/Code/Source/ExpressionPrimitivesSerializers.inl @@ -30,7 +30,7 @@ namespace AZ JsonSerializationResult::Result Load ( void* outputValue - , const Uuid& outputValueTypeId + , [[maybe_unused]] const Uuid& outputValueTypeId , const rapidjson::Value& inputValue , JsonDeserializerContext& context) override { diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h index bf692554e5..df7fa0535f 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h @@ -88,13 +88,13 @@ namespace ScriptCanvasEditor void Enter() override { - //Log("ENTER >> %s", GetName()); + Log("ENTER >> %s", GetName()); OnEnter(); } ExitStatus Exit() override { - //Log("EXIT << %s", GetName()); + Log("EXIT << %s", GetName()); return OnExit(); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp index b9aff660f2..efa7aded40 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp @@ -76,6 +76,21 @@ namespace ScriptCanvasEditor } + void VersionExplorer::Log(const char* format, ...) + { + if (m_ui->verbose->isChecked()) + { + char sBuffer[1024]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + + AZ_TracePrintf("Script Canvas", "%s\n", sBuffer); + } + } + void VersionExplorer::OnClose() { reject(); @@ -96,17 +111,27 @@ namespace ScriptCanvasEditor { m_inProgress = true; AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); m_currentAsset.BlockUntilLoadComplete(); if (m_currentAsset.IsReady()) { // The asset is ready, grab its info m_inProgress = true; - InspectAsset(m_currentAsset); + InspectAsset(m_currentAsset, assetToUpgrade); } + else + { + m_ui->tableWidget->insertRow(static_cast(m_inspectedAssets)); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->spinner->SetText(QObject::tr("%1").arg(m_currentAsset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_inspectedAssets), static_cast(ColumnAsset), rowName); + Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); + ++m_currentAssetIndex; + ++m_failedAssets; + ScanComplete(m_currentAsset); + } } break; @@ -148,7 +173,6 @@ namespace ScriptCanvasEditor AZ::Data::AssetManager::Instance().DispatchEvents(); AZ::SystemTickBus::ExecuteQueuedEvents(); - } // Backup @@ -297,10 +321,7 @@ namespace ScriptCanvasEditor if (graphComponent) { - if (!graphComponent->UpgradeGraph(asset)) - { - // The upgrade was skipped due to nothing to update (though if we're here, we identified that something was out of date) - } + graphComponent->UpgradeGraph(asset); } return scriptCanvasEntity; @@ -581,13 +602,10 @@ namespace ScriptCanvasEditor { m_assetsToUpgrade.clear(); m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); m_inspectedAssets = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); } @@ -596,9 +614,14 @@ namespace ScriptCanvasEditor AZ::SystemTickBus::Handler::BusConnect(); m_state = ProcessState::Scan; + AZ::Debug::TraceMessageBus::Handler::BusConnect(); if (!m_assetsToInspect.empty()) { + m_discoveredAssets = m_assetsToInspect.size(); + m_failedAssets = 0; + m_inspectedAssets = 0; + m_ui->progressFrame->setVisible(true); m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); m_ui->progressBar->setValue(0); @@ -622,14 +645,17 @@ namespace ScriptCanvasEditor DoScan(); } - void VersionExplorer::InspectAsset(AZ::Data::Asset& asset) + void VersionExplorer::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; if (asset.GetType() == azrtti_typeid()) { ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); if (!scriptCanvasAsset) { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); return; } @@ -640,14 +666,14 @@ namespace ScriptCanvasEditor auto graphComponent = scriptCanvasEntity->FindComponent(); AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - if (onlyShowOutdatedGraphs && graphComponent->GetVersion().IsLatest()) + if (!forceUpgrade && onlyShowOutdatedGraphs && graphComponent->GetVersion().IsLatest()) { ++m_currentAssetIndex; ScanComplete(asset); - + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); return; } @@ -655,7 +681,7 @@ namespace ScriptCanvasEditor QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); m_ui->tableWidget->setItem(static_cast(m_inspectedAssets), static_cast(ColumnAsset), rowName); - if (!graphComponent->GetVersion().IsLatest()) + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) { m_assetsToUpgrade.push_back(asset); @@ -665,18 +691,19 @@ namespace ScriptCanvasEditor QPushButton* rowGoToButton = new QPushButton(this); rowGoToButton->setText("Upgrade"); rowGoToButton->setEnabled(false); - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, asset] { - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, asset]() { + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, asset); + UpgradeSingle(rowGoToButton, spinner, assetInfo); }); AZ::SystemTickBus::ExecuteQueuedEvents(); }); - m_ui->tableWidget->setCellWidget(static_cast(m_inspectedAssets), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_inspectedAssets), static_cast(ColumnAction), rowGoToButton); m_ui->tableWidget->setCellWidget(static_cast(m_inspectedAssets), static_cast(ColumnStatus), spinner); } @@ -713,37 +740,47 @@ namespace ScriptCanvasEditor ScanComplete(asset); } - void VersionExplorer::UpgradeSingle(QPushButton* rowGoToButton, AzQtComponents::StyledBusyLabel* spinner, const AZ::Data::Asset& asset) + void VersionExplorer::UpgradeSingle + ( QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) { - AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - m_isUpgradingSingleGraph = true; + if (asset) + { + asset.BlockUntilLoadComplete(); - m_logs.clear(); - m_ui->textEdit->clear(); - - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end(), [this, asset](const UpgradeAssets::value_type& assetToUpgrade) + if (!asset.IsReady()) { - return assetToUpgrade.GetId() == asset.GetId(); - }); + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); - m_state = ProcessState::Upgrade; - - AZ::SystemTickBus::Handler::BusConnect(); + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [this, asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } } void VersionExplorer::ScanComplete(const AZ::Data::Asset& asset) { + Log("ScanComplete: %s", asset.GetHint().c_str()); m_inProgress = false; m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetIndex)); m_ui->scanButton->setEnabled(true); - + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); if (m_inspectingAsset == m_assetsToInspect.end()) @@ -755,12 +792,12 @@ namespace ScriptCanvasEditor m_ui->upgradeAllButton->setEnabled(true); } } - - asset->Release(); } void VersionExplorer::FinalizeScan() { + Log("FinalizeScan()"); + m_ui->spinner->SetIsBusy(false); m_ui->onlyShowOutdated->setEnabled(true); @@ -774,12 +811,18 @@ namespace ScriptCanvasEditor } } - QString spinnerText = QStringLiteral("Scan Complete"); if (m_assetsToUpgrade.empty()) { spinnerText.append(" - No graphs require upgrade!"); } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets)); + } + + m_ui->spinner->SetText(spinnerText); m_ui->progressBar->setVisible(false); @@ -793,11 +836,9 @@ namespace ScriptCanvasEditor UpgradeNotifications::Bus::Handler::BusDisconnect(); m_keepEditorAlive.reset(); - + m_state = ProcessState::Inactive; } - // - void VersionExplorer::FlushLogs() { if (m_logs.empty()) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h index 30f73dca92..266a42e2e6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h @@ -82,7 +82,7 @@ namespace ScriptCanvasEditor void DoScan(); void ScanComplete(const AZ::Data::Asset&); - void InspectAsset(AZ::Data::Asset& asset); + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); void OnUpgradeAll(); @@ -116,10 +116,11 @@ namespace ScriptCanvasEditor bool m_inProgress = false; size_t m_currentAssetIndex = 0; size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; IUpgradeRequests::AssetList m_assetsToInspect; IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; UpgradeAssets m_assetsToUpgrade; UpgradeAssets::iterator m_inProgressAsset; @@ -138,7 +139,7 @@ namespace ScriptCanvasEditor bool m_isUpgradingSingleGraph = false; - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, const AZ::Data::Asset& asset); + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); void FlushLogs(); @@ -157,5 +158,7 @@ namespace ScriptCanvasEditor bool m_overwriteAll = false; void PerformMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target); + + void Log(const char* format, ...); }; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui index d02ddd0054..3e2604dd99 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui @@ -321,6 +321,26 @@ + + + + Force Upgrade + + + false + + + + + + + Verbose + + + false + + + diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui index ddb8100821..1208a55a64 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui @@ -128,6 +128,7 @@ + diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Data/BehaviorContextObject.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Data/BehaviorContextObject.cpp index 7bcf0b2282..412eb3ee7c 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Data/BehaviorContextObject.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Data/BehaviorContextObject.cpp @@ -98,7 +98,7 @@ namespace ScriptCanvas void BehaviorContextObject::Deserialize(BehaviorContextObject& target, const AZ::BehaviorClass& behaviorClass, AZStd::any& source) { - target.m_object = AZStd::move(AZStd::any(AZStd::any_cast(&source), GetAnyTypeInfoObject(behaviorClass))); + target.m_object = AZStd::any(AZStd::any_cast(&source), GetAnyTypeInfoObject(behaviorClass)); target.m_flags = Owned; }