AssetStatusTracker.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Automation/AssetStatusTracker.h>
  9. #include <AzFramework/StringFunc/StringFunc.h>
  10. namespace AtomSampleViewer
  11. {
  12. AssetStatusTracker::~AssetStatusTracker()
  13. {
  14. AzFramework::AssetSystemInfoBus::Handler::BusDisconnect();
  15. }
  16. void AssetStatusTracker::StartTracking()
  17. {
  18. if (!m_isTracking)
  19. {
  20. AzFramework::AssetSystemInfoBus::Handler::BusConnect();
  21. }
  22. m_isTracking = true;
  23. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  24. m_allAssetStatusData.clear();
  25. }
  26. void AssetStatusTracker::StopTracking()
  27. {
  28. if (m_isTracking)
  29. {
  30. m_isTracking = false;
  31. AzFramework::AssetSystemInfoBus::Handler::BusDisconnect();
  32. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  33. m_allAssetStatusData.clear();
  34. }
  35. }
  36. void AssetStatusTracker::ExpectAsset(AZStd::string sourceAssetPath, uint32_t expectedCount)
  37. {
  38. AzFramework::StringFunc::Path::Normalize(sourceAssetPath);
  39. AZStd::to_lower(sourceAssetPath.begin(), sourceAssetPath.end());
  40. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  41. m_allAssetStatusData[sourceAssetPath].m_expectedCount += expectedCount;
  42. }
  43. bool AssetStatusTracker::DidExpectedAssetsFinish() const
  44. {
  45. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  46. for (auto& assetData : m_allAssetStatusData)
  47. {
  48. const AssetStatusEvents& status = assetData.second;
  49. if (status.m_expectedCount > (status.m_succeeded + status.m_failed))
  50. {
  51. return false;
  52. }
  53. }
  54. return true;
  55. }
  56. AZStd::vector<AZStd::string> AssetStatusTracker::GetIncompleteAssetList() const
  57. {
  58. AZStd::vector<AZStd::string> incomplete;
  59. for (auto& assetData : m_allAssetStatusData)
  60. {
  61. const AssetStatusEvents& status = assetData.second;
  62. if (status.m_expectedCount > (status.m_succeeded + status.m_failed))
  63. {
  64. incomplete.push_back(assetData.first);
  65. }
  66. }
  67. return incomplete;
  68. }
  69. void AssetStatusTracker::AssetCompilationStarted(const AZStd::string& assetPath)
  70. {
  71. AZ_TracePrintf("Automation", "AssetCompilationStarted(%s)\n", assetPath.c_str());
  72. AZStd::string normalizedAssetPath = assetPath;
  73. AzFramework::StringFunc::Path::Normalize(normalizedAssetPath);
  74. AZStd::to_lower(normalizedAssetPath.begin(), normalizedAssetPath.end());
  75. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  76. m_allAssetStatusData[normalizedAssetPath].m_started++;
  77. }
  78. void AssetStatusTracker::AssetCompilationSuccess(const AZStd::string& assetPath)
  79. {
  80. AZ_TracePrintf("Automation", "AssetCompilationSuccess(%s)\n", assetPath.c_str());
  81. AZStd::string normalizedAssetPath = assetPath;
  82. AzFramework::StringFunc::Path::Normalize(normalizedAssetPath);
  83. AZStd::to_lower(normalizedAssetPath.begin(), normalizedAssetPath.end());
  84. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  85. m_allAssetStatusData[normalizedAssetPath].m_succeeded++;
  86. }
  87. void AssetStatusTracker::AssetCompilationFailed(const AZStd::string& assetPath)
  88. {
  89. AZ_TracePrintf("Automation", "AssetCompilationFailed(%s)\n", assetPath.c_str());
  90. AZStd::string normalizedAssetPath = assetPath;
  91. AzFramework::StringFunc::Path::Normalize(normalizedAssetPath);
  92. AZStd::to_lower(normalizedAssetPath.begin(), normalizedAssetPath.end());
  93. AZStd::lock_guard<AZStd::mutex> lock(m_mutex);
  94. m_allAssetStatusData[normalizedAssetPath].m_failed++;
  95. }
  96. } // namespace AtomSampleViewer