diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp index 67a9e5f4f..b9085da0d 100644 --- a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp +++ b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp @@ -362,7 +362,7 @@ bool CookAssetsStep::ProcessDefaultAsset(AssetCookData& options) bool CookAssetsStep::Process(CookingData& data, CacheData& cache, Asset* asset) { - // Validate asset + PROFILE_CPU_ASSET(asset); if (asset->IsVirtual()) { // Virtual assets are not included into the build @@ -790,7 +790,10 @@ bool CookAssetsStep::Process(CookingData& data, CacheData& cache, BinaryAsset* a // Prepare asset data AssetInitData initData; if (asset->Storage->LoadAssetHeader(asset->GetID(), initData)) + { + LOG(Warning, "Failed to load asset {} header from storage '{}'", asset->GetID(), asset->Storage->GetPath()); return true; + } initData.Header.UnlinkChunks(); initData.Metadata.Release(); for (auto& e : initData.Dependencies) @@ -1162,7 +1165,7 @@ bool CookAssetsStep::Perform(CookingData& data) assetRef = Content::LoadAsync(assetId); if (assetRef == nullptr) { - data.Error(TEXT("Failed to load asset included in build.")); + LOG(Error, "Failed to load asset {} included in build", assetId); return true; } e.Info.TypeName = assetRef->GetTypeName(); @@ -1170,6 +1173,7 @@ bool CookAssetsStep::Perform(CookingData& data) // Cook asset if (Process(data, cache, assetRef.Get())) { + LOG(Error, "Failed to process asset {}", assetRef->ToString()); cache.Save(data); return true; } @@ -1202,10 +1206,17 @@ bool CookAssetsStep::Perform(CookingData& data) // Copy file if (!FileSystem::FileExists(cookedPath) || FileSystem::GetFileLastEditTime(cookedPath) >= FileSystem::GetFileLastEditTime(filePath)) { - if (FileSystem::CreateDirectory(StringUtils::GetDirectoryName(cookedPath))) + const String cookedFolder = StringUtils::GetDirectoryName(cookedPath); + if (FileSystem::CreateDirectory(cookedFolder)) + { + LOG(Error, "Failed to create directory '{}'", cookedFolder); return true; + } if (FileSystem::CopyFile(cookedPath, filePath)) + { + LOG(Error, "Failed to copy file from '{}' to '{}'", filePath, cookedPath); return true; + } } // Count stats of file extension diff --git a/Source/Engine/Content/BinaryAsset.cpp b/Source/Engine/Content/BinaryAsset.cpp index 6af0bd22f..deb39856e 100644 --- a/Source/Engine/Content/BinaryAsset.cpp +++ b/Source/Engine/Content/BinaryAsset.cpp @@ -314,6 +314,8 @@ bool BinaryAsset::SaveAsset(const StringView& path, AssetInitData& data, bool si bool BinaryAsset::SaveToAsset(const StringView& path, AssetInitData& data, bool silentMode) { + PROFILE_CPU(); + // Ensure path is in a valid format String pathNorm(path); ContentStorageManager::FormatPath(pathNorm); diff --git a/Source/Engine/Content/Storage/FlaxStorage.cpp b/Source/Engine/Content/Storage/FlaxStorage.cpp index 2786b0618..007238889 100644 --- a/Source/Engine/Content/Storage/FlaxStorage.cpp +++ b/Source/Engine/Content/Storage/FlaxStorage.cpp @@ -1090,7 +1090,7 @@ bool FlaxStorage::LoadAssetHeader(const Entry& e, AssetInitData& data) stream->ReadInt32(&chunkIndex); if (chunkIndex < -1 || chunkIndex >= _chunks.Count()) { - LOG(Warning, "Invalid chunks mapping."); + LOG(Warning, "Invalid chunks mapping ({} -> {}).", i, chunkIndex); return true; } data.Header.Chunks[i] = chunkIndex == INVALID_INDEX ? nullptr : _chunks[chunkIndex]; @@ -1147,7 +1147,7 @@ bool FlaxStorage::LoadAssetHeader(const Entry& e, AssetInitData& data) stream->ReadInt32(&chunkIndex); if (chunkIndex < -1 || chunkIndex >= _chunks.Count()) { - LOG(Warning, "Invalid chunks mapping."); + LOG(Warning, "Invalid chunks mapping ({} -> {}).", i, chunkIndex); return true; } data.Header.Chunks[i] = chunkIndex == INVALID_INDEX ? nullptr : _chunks[chunkIndex]; @@ -1202,7 +1202,7 @@ bool FlaxStorage::LoadAssetHeader(const Entry& e, AssetInitData& data) stream->ReadInt32(&chunkIndex); if (chunkIndex < -1 || chunkIndex >= _chunks.Count()) { - LOG(Warning, "Invalid chunks mapping."); + LOG(Warning, "Invalid chunks mapping ({} -> {}).", i, chunkIndex); return true; } data.Header.Chunks[i] = chunkIndex == INVALID_INDEX ? nullptr : _chunks[chunkIndex]; diff --git a/Source/Engine/Graphics/Shaders/Cache/ShaderAssetBase.cpp b/Source/Engine/Graphics/Shaders/Cache/ShaderAssetBase.cpp index ecb727c11..813ec9a0c 100644 --- a/Source/Engine/Graphics/Shaders/Cache/ShaderAssetBase.cpp +++ b/Source/Engine/Graphics/Shaders/Cache/ShaderAssetBase.cpp @@ -11,6 +11,7 @@ #include "Engine/Content/Deprecated.h" #include "Engine/Serialization/MemoryReadStream.h" #endif +#include "Engine/Profiler/ProfilerCPU.h" #include "Engine/ShadowsOfMordor/AtlasChartsPacker.h" ShaderStorage::CachingMode ShaderStorage::CurrentCachingMode = @@ -157,7 +158,7 @@ bool IsValidShaderCache(DataContainer& shaderCache, Array& include bool ShaderAssetBase::LoadShaderCache(ShaderCacheResult& result) { - // Prepare + PROFILE_CPU(); auto parent = GetShaderAsset(); const ShaderProfile shaderProfile = GPUDevice::Instance->GetShaderProfile(); const int32 cacheChunkIndex = GetCacheChunkIndex(shaderProfile);