Files
UnrealEngineUWP/Engine/Source/Developer/CrashDebugHelper/Private/CrashDebugPDBCache.cpp

394 lines
15 KiB
C++
Raw Normal View History

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "CrashDebugPDBCache.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "HAL/PlatformTime.h"
#include "HAL/FileManager.h"
#include "Misc/Parse.h"
#include "Templates/ScopedPointer.h"
#include "Misc/CommandLine.h"
#include "Misc/Paths.h"
#include "Misc/ConfigCacheIni.h"
#include "CrashDebugHelperPrivate.h"
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3208226) #lockdown Nick.Penwarden #rb None ========================== MAJOR FEATURES + CHANGES ========================== Change 3173153 on 2016/10/25 by Graeme.Thornton Pak signing changes - Integrated into EDL loader - Changed to not encrypt each CRC in the sig file, rather just store a single encryped signature of the entire sig file. Removes need to decrypt thousands of signatures at startup. Change 3173531 on 2016/10/25 by Steven.Hutton Removing unused j query packages. Change 3174743 on 2016/10/26 by Gil.Gribb UE4 - fixed COTF with EDL Change 3177896 on 2016/10/28 by Steve.Robb TSharedPtr and TSharedRef aliasing constructors. Removal of static_asserts for TSharedPtr<UObject>. Change 3180343 on 2016/10/31 by Steve.Robb Reimplementation of changes from CL#s 3050329 and 3105715 that were lost in merges 3094597 and 3105741. Change 3181382 on 2016/11/01 by Steve.Robb Visual Studio debugger visualizers for delegates. Change 3182738 on 2016/11/02 by Graeme.Thornton Re-enable signed archive reader so non-pakpreacher based reads still get signature checked Change 3183420 on 2016/11/02 by Steve.Robb Fix to TIsZeroConstructType for TScriptDelegate. Change 3184872 on 2016/11/03 by Robert.Manuszewski Fixing memory stomps in SSL certificate initialization (found with mallocstomp) Change 3184873 on 2016/11/03 by Robert.Manuszewski Adding thread safety checks to async loading code Change 3185535 on 2016/11/03 by Ben.Zeigler Fix it so calling CreateDefaultSubobject with bTransient = true sets the object transient flag. This fixes EDL Crashes involving components. Change 3186636 on 2016/11/04 by Graeme.Thornton AES encryption integrated into EDL system Pak signing and AES encryption now configurable by ini files rather than magical text files Change 3186637 on 2016/11/04 by Graeme.Thornton Configured pak signing and encryption in ShooterGame for reference Change 3186639 on 2016/11/04 by Graeme.Thornton Encryption changes for Orion * Move pak signing keys into new INI format * Add AES key and enable INI file encryption Change 3186661 on 2016/11/04 by Graeme.Thornton Change unrealpak command line params to accept AES key as a separete parameter Change 3186670 on 2016/11/04 by Robert.Manuszewski Adding a null check before using a package pointer in Linker code #jira UE-38237 Change 3186775 on 2016/11/04 by Graeme.Thornton Fix UBT defines that come in as quoted strings, losing the quotes when passed to the compiler - PS4 and Mac fixes. Other platforms might need fixing too! Change 3186823 on 2016/11/04 by Graeme.Thornton Fixed an incorrect size check in the EDL pak signing code Change 3186925 on 2016/11/04 by Graeme.Thornton Allow UnrealPak to read encryption settings from project ini files Change 3189885 on 2016/11/08 by Graeme.Thornton Static analysis warning fix Change 3190015 on 2016/11/08 by Robert.Manuszewski Thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread Change 3190253 on 2016/11/08 by Chris.Wood Improved MDD performance for on the CR server. [UE-37566] - Improve MDD performance on CR server Blocked MDD init'ing the crash handling code as it isn't desirable on the server. Removed redundant call to SetSymbolPathsFromModules() from CrashDebugHelper. Change 3192993 on 2016/11/10 by Robert.Manuszewski Thread Heartbeat will no longer report the same hang multiple times. Change 3193111 on 2016/11/10 by Robert.Manuszewski Minor change in the condition that detects the same hangs - allow the same callstacks from different threads Change 3193168 on 2016/11/10 by Steve.Robb TSparseArray now reserves space in reverse so that new elements get added to the front of the allocation rather than the back, which is better for memory traversal and meets expectations more closely. Change 3193171 on 2016/11/10 by Steve.Robb Easier debugging of FPendingRegistrantInfo map. Change 3193188 on 2016/11/10 by Steve.Robb TAutoPointer deprecated. Change 3193796 on 2016/11/10 by Graeme.Thornton Fix pak creation failure when no pak signing keys are supplied Change 3194524 on 2016/11/11 by Graeme.Thornton Another static analysis warning fix Change 3195119 on 2016/11/11 by Steve.Robb TAutoPtr deprecated. Fixes to use of TAutoPtr with incompatible memory deallocations (TAutoPtr with FMemory::Malloc and new[]). Some large headers moved into .cpp files. Change 3196582 on 2016/11/14 by Gil.Gribb UE4 - Changed a check to a warning related to detaching linekrs twice. Seen in nativized BP version of platformer game. Change 3196878 on 2016/11/14 by Steve.Robb TScopedPointer deprecated. Change 3198061 on 2016/11/15 by Steve.Robb Class array is no longer regenerated when saving UClasses. Change 3198065 on 2016/11/15 by Robert.Manuszewski Making AssembleReferenceTokenStream thread safe for blueprints loaded on the async loading thread. Change 3198199 on 2016/11/15 by Robert.Manuszewski Pak platform file will now only be used if pak files exist regardless of command line paraks like -pak, -singedpak and -signed. Change 3199954 on 2016/11/16 by Graeme.Thornton Removing USING_SIGNED_CONTENT Change 3200221 on 2016/11/16 by Chris.Wood CrashReportProcess code cleanup - removing unused using directives Change 3200232 on 2016/11/16 by Chris.Wood Multiple CrashReportProcess updates and improvements (CRP v1.2.6) UE-36248 - CRP scalability: All bulk storage or shared data to S3 or suitable network drives InvalidCrashReports now saved to S3 instead of local folder Removed option tosync MinidumpDiagnostics from Perforce Moved MinidumpDiagnostics from old Perforce synched location to its own folder in E:\Services (makes more sense with manual publishing) Added improved logging to Slack with option to monitor MDD performance Added hourly log folders to MDD logs Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures) Change 3200382 on 2016/11/16 by Robert.Manuszewski Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists). Change 3200562 on 2016/11/16 by Gil.Gribb UE4 - Fixed rare issue with reloading nativized blueprints with the EDL and a minor simplication. Change 3201093 on 2016/11/16 by Ben.Zeigler #UE 38654 Fix EDL cooking to correctly search components created directly by UBlueprints, as well as the CDO components it already covered. Also explicitly mark subobject templates as editor only. Fix issue where the AssetImportData associated with Blueprint-owned Curves was ending up in the cooked subobject template list. Stopped it from creating those objects, and mark the class editor only. Change 3201736 on 2016/11/17 by Steve.Robb Strtoi64 platform and TCString functions. #fyi robert.manuszewski Change 3201938 on 2016/11/17 by Ben.Woodhouse Dummy integrate of the Square render version workaround (CL 3201913) with _accept target_ to prevent it being integrated to dev-core in future. Commandline: p4 integrate //Tasks/UE4/Dev-LoadTimes/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp@3201913,3201913 //UE4/Dev-Core/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp #fyi robert.manuszewski Change 3203757 on 2016/11/18 by Robert.Manuszewski Removing debug code from async loading code. Change 3203927 on 2016/11/18 by Robert.Manuszewski Fixing comments in the async loading code. Change 3204851 on 2016/11/18 by Steve.Robb Metafunction for testing if a particular operator<< overload exists, e.g. THasInserterOperator<FArchive&, FMyType&>::Value. Change 3204854 on 2016/11/18 by Steve.Robb UEnumProperty. Change 3205027 on 2016/11/18 by Ben.Zeigler Add useful functions to FAssetPtr and TAssetSubclassOf that already existed on TAssetPtr Add Get() to TSubclassOf so it matches our other wrappers Fix TSubclassOf and TAssetSubclassOf to use the more efficient template method of checking class compatibility Comment and template cleanups for AssetPtr, StringAssetReference, LazyPtr, and SubclassOf Change 3206334 on 2016/11/21 by Ben.Zeigler #UE-38773: Fix it so non-component template subobjects of CDOs are not included as creation dependencies for BP classes, also clean up GetPreloadDependencies as it was adding redundant and null entries #UE-38799: Fix it so WidgetTrees don't get picked up as subobjects, and add ensure at cook time to find null outers that would crash at runtime. Make sure the instanced widget trees are transient. Cook finishes but game is still crashing in some cases, so I might adjust this after other testing Change 3206353 on 2016/11/21 by Ben.Zeigler Fix EnumProperty to handle EDL preload dependencies properly Change 3206625 on 2016/11/21 by Ben.Zeigler Fix enum property crash at runtime by copying what array property does and making sure inner property is not transient Change 3206937 on 2016/11/21 by Ben.Zeigler #jira UE-38905 Fix it so enums inside arrays are migrated properly, the enum tag is lost so use the current one Disable other nested enum migrations as they are unlikely to work. Array property tags need to be refactored to be safer Correctly save enum tag for enum properties, it was being set but not serialized Change 3207002 on 2016/11/21 by Ben.Zeigler #jira UE-38799 Fix it so per-widget copy of widget tree and all widgets inside are properly transient, they were being cooked before but never accessed. Fix case where non ClientOnly public objects nested instead ClientOnly objects would cook but fail to load, and add ensure to catch these cases in the future. If the full outer chain isn't available, it can't be loaded anyway, and this finds issues at cook time instead of load time. We should generally outlaw non-transient objects with transient outers, it does not do what people expect. Change 3207032 on 2016/11/21 by Ben.Zeigler #jira UE-38654 Re-Fix EDL cooking with SCS-added components. They used to have the DefaultSubObject flag but no longer do [CL 3208270 by Ben Zeigler in Main branch]
2016-11-22 18:45:44 -05:00
#include "UniquePtr.h"
/*-----------------------------------------------------------------------------
PDB Cache implementation
-----------------------------------------------------------------------------*/
const TCHAR* FPDBCache::PDBTimeStampFileNoMeta = TEXT( "PDBTimeStamp.txt" );
const TCHAR* FPDBCache::PDBTimeStampFile = TEXT( "PDBTimeStamp.bin" );
void FPDBCache::Init()
{
// PDB Cache
// Default configuration
//PDBCachePath=G:/CrashReportPDBCache/
//DepotRoot=F:/depot
//DaysToDeleteUnusedFilesFromPDBCache=3
//PDBCacheSizeGB=300
//MinDiskFreeSpaceGB=256
// Can be enabled only through the command line.
FParse::Bool( FCommandLine::Get(), TEXT( "bUsePDBCache=" ), bUsePDBCache );
UE_LOG( LogCrashDebugHelper, Warning, TEXT( "bUsePDBCache is %s" ), bUsePDBCache ? TEXT( "enabled" ) : TEXT( "disabled" ) );
if (bUsePDBCache)
{
if (!FParse::Value(FCommandLine::Get(), TEXT("PDBCacheDepotRoot="), DepotRoot))
{
GConfig->GetString(TEXT("Engine.CrashDebugHelper"), TEXT("DepotRoot"), DepotRoot, GEngineIni);
}
ICrashDebugHelper::SetDepotIndex( DepotRoot );
const bool bHasDepotRoot = IFileManager::Get().DirectoryExists( *DepotRoot );
UE_CLOG( !bHasDepotRoot, LogCrashDebugHelper, Warning, TEXT( "DepotRoot: %s is not valid" ), *DepotRoot );
UE_LOG( LogCrashDebugHelper, Log, TEXT( "DepotRoot: %s" ), *DepotRoot );
bUsePDBCache = bHasDepotRoot;
}
// Get the rest of the PDB cache configuration.
if( bUsePDBCache )
{
if (!FParse::Value(FCommandLine::Get(), TEXT("PDBCachePath="), PDBCachePath))
{
if (!GConfig->GetString(TEXT("Engine.CrashDebugHelper"), TEXT("PDBCachePath"), PDBCachePath, GEngineIni))
{
UE_LOG(LogCrashDebugHelper, Warning, TEXT("Failed to get PDBCachePath from ini file or command line"));
bUsePDBCache = false;
}
}
ICrashDebugHelper::SetDepotIndex( PDBCachePath );
}
if( bUsePDBCache )
{
if (!FParse::Value(FCommandLine::Get(), TEXT("PDBCacheSizeGB="), PDBCacheSizeGB))
{
if (!GConfig->GetInt(TEXT("Engine.CrashDebugHelper"), TEXT("PDBCacheSizeGB"), PDBCacheSizeGB, GEngineIni))
{
UE_LOG(LogCrashDebugHelper, Warning, TEXT("Failed to get PDBCachePath from ini file or command line"));
}
}
if (!FParse::Value(FCommandLine::Get(), TEXT("PDBCacheMinFreeSpaceGB="), MinDiskFreeSpaceGB))
{
if (!GConfig->GetInt(TEXT("Engine.CrashDebugHelper"), TEXT("MinDiskFreeSpaceGB"), MinDiskFreeSpaceGB, GEngineIni))
{
UE_LOG(LogCrashDebugHelper, Warning, TEXT("Failed to get MinDiskFreeSpaceGB from ini file or command line"));
}
}
if (!FParse::Value(FCommandLine::Get(), TEXT("PDBCacheFileDeleteDays="), DaysToDeleteUnusedFilesFromPDBCache))
{
if (!GConfig->GetInt(TEXT("Engine.CrashDebugHelper"), TEXT("DaysToDeleteUnusedFilesFromPDBCache"), DaysToDeleteUnusedFilesFromPDBCache, GEngineIni))
{
UE_LOG(LogCrashDebugHelper, Warning, TEXT("Failed to get DaysToDeleteUnusedFilesFromPDBCache from ini file or command line"));
}
}
InitializePDBCache();
CleanPDBCache( DaysToDeleteUnusedFilesFromPDBCache );
// Verify that we have enough space to enable the PDB Cache.
uint64 TotalNumberOfBytes = 0;
uint64 NumberOfFreeBytes = 0;
FPlatformMisc::GetDiskTotalAndFreeSpace( PDBCachePath, TotalNumberOfBytes, NumberOfFreeBytes );
const int32 TotalDiscSpaceGB = int32( TotalNumberOfBytes >> 30 );
const int32 DiskFreeSpaceGB = int32( NumberOfFreeBytes >> 30 );
if( DiskFreeSpaceGB < MinDiskFreeSpaceGB || TotalNumberOfBytes == 0 )
{
// There is not enough free space, calculate the current PDB cache usage and try removing the old data.
const int32 CurrentPDBCacheSizeGB = GetPDBCacheSizeGB();
const int32 DiskFreeSpaceAfterCleanGB = DiskFreeSpaceGB + CurrentPDBCacheSizeGB;
if( DiskFreeSpaceAfterCleanGB < MinDiskFreeSpaceGB )
{
UE_LOG( LogCrashDebugHelper, Error, TEXT( "There is not enough free space. PDB Cache disabled." ) );
UE_LOG( LogCrashDebugHelper, Error, TEXT( "Current disk free space is %i GBs." ), DiskFreeSpaceGB );
UE_LOG( LogCrashDebugHelper, Error, TEXT( "To enable the PDB Cache you need to free %i GB of space" ), MinDiskFreeSpaceGB - DiskFreeSpaceAfterCleanGB );
bUsePDBCache = false;
// Remove all data.
CleanPDBCache( 0 );
}
else
{
// Clean the PDB cache until we get enough free space.
const int32 MinSpaceRequirement = FMath::Max( MinDiskFreeSpaceGB - DiskFreeSpaceGB, 0 );
const int32 CacheSpaceRequirement = FMath::Max( CurrentPDBCacheSizeGB - PDBCacheSizeGB, 0 );
CleanPDBCache( DaysToDeleteUnusedFilesFromPDBCache, FMath::Max( MinSpaceRequirement, CacheSpaceRequirement ) );
}
}
}
if( bUsePDBCache )
{
UE_LOG( LogCrashDebugHelper, Log, TEXT( "PDBCachePath: %s" ), *PDBCachePath );
UE_LOG( LogCrashDebugHelper, Log, TEXT( "PDBCacheSizeGB: %i" ), PDBCacheSizeGB );
UE_LOG( LogCrashDebugHelper, Log, TEXT( "MinDiskFreeSpaceGB: %i" ), MinDiskFreeSpaceGB );
UE_LOG( LogCrashDebugHelper, Log, TEXT( "DaysToDeleteUnusedFilesFromPDBCache: %i" ), DaysToDeleteUnusedFilesFromPDBCache );
}
}
void FPDBCache::InitializePDBCache()
{
const double StartTime = FPlatformTime::Seconds();
IFileManager::Get().MakeDirectory( *PDBCachePath, true );
TArray<FString> PDBCacheEntryDirectories;
IFileManager::Get().FindFiles( PDBCacheEntryDirectories, *(PDBCachePath / TEXT( "*" )), false, true );
for( const auto& Directory : PDBCacheEntryDirectories )
{
FPDBCacheEntryPtr Entry = ReadPDBCacheEntry( Directory );
if (Entry.IsValid())
{
PDBCacheEntries.Add( Directory, Entry.ToSharedRef() );
}
}
SortPDBCache();
const double TotalTime = FPlatformTime::Seconds() - StartTime;
UE_LOG( LogCrashDebugHelper, Log, TEXT( "PDB Cache initialized in %.2f ms" ), TotalTime*1000.0f );
UE_LOG( LogCrashDebugHelper, Log, TEXT( "Found %i entries which occupy %i GBs" ), PDBCacheEntries.Num(), GetPDBCacheSizeGB() );
}
void FPDBCache::CleanPDBCache( int32 DaysToDelete, int32 NumberOfGBsToBeCleaned /*= 0 */ )
{
// Not very efficient, but should do the trick.
// Revisit it later.
const double StartTime = FPlatformTime::Seconds();
TSet<FString> EntriesToBeRemoved;
// Find all outdated PDB Cache entries and mark them for removal.
const double DaysToDeleteAsSeconds = FTimespan( DaysToDelete, 0, 0, 0 ).GetTotalSeconds();
int32 NumGBsCleaned = 0;
for( const auto& It : PDBCacheEntries )
{
const FPDBCacheEntryRef& Entry = It.Value;
const FString EntryDirectory = PDBCachePath / Entry->Directory;
const FString EntryTimeStampFilename = EntryDirectory / PDBTimeStampFile;
const double EntryFileAge = IFileManager::Get().GetFileAgeSeconds( *EntryTimeStampFilename );
if( EntryFileAge > DaysToDeleteAsSeconds )
{
EntriesToBeRemoved.Add( Entry->Directory );
NumGBsCleaned += Entry->SizeGB;
}
}
if( NumberOfGBsToBeCleaned > 0 && NumGBsCleaned < NumberOfGBsToBeCleaned )
{
// Do the second pass if we need to remove more PDB Cache entries due to the free disk space restriction.
for( const auto& It : PDBCacheEntries )
{
const FPDBCacheEntryRef& Entry = It.Value;
if( !EntriesToBeRemoved.Contains( Entry->Directory ) )
{
EntriesToBeRemoved.Add( Entry->Directory );
NumGBsCleaned += Entry->SizeGB;
if( NumGBsCleaned > NumberOfGBsToBeCleaned )
{
// Break the loop, we are done.
break;
}
}
}
}
// Remove all marked PDB Cache entries.
for( const auto& EntryDirectory : EntriesToBeRemoved )
{
RemovePDBCacheEntry( EntryDirectory );
}
const double TotalTime = FPlatformTime::Seconds() - StartTime;
UE_LOG( LogCrashDebugHelper, Log, TEXT( "PDB Cache cleaned %i GBs in %.2f ms" ), NumGBsCleaned, TotalTime*1000.0f );
}
FPDBCacheEntryRef FPDBCache::CreateAndAddPDBCacheEntry( const FString& OriginalLabelName, const FString& DepotName, const TArray<FString>& FilesToBeCached )
{
const FString CleanedLabelName = EscapePath( OriginalLabelName );
const FString EntryDirectory = PDBCachePath / CleanedLabelName;
const FString EntryTimeStampFilename = EntryDirectory / PDBTimeStampFile;
Copying //UE4/Dev-Core to //UE4/Main ========================== MAJOR FEATURES + CHANGES ========================== Change 2783106 on 2015/11/30 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream2 Introduced GC UObject clusters. GC clusters provide means to create disregard for GC subsets at load time (e.g. Materials with material expressions and their textures). - Saves about 25ms in reachability analysis (58ms -> 33ms) - UObject classes/instances can now be marked as cluster root objects with CanBeClusterRoot() function override. - Cluster creation is automatic. Clusters don't require any manual handling for GC to collect them when nothing is referencing them. - Moved token stream processing to a new class FFastReferenceFinder to make it more generic and re-usable by other code - Removed REFERENCE_INFO macro from GC code and replaced it with a local variable (saves about ~1.9ms: 33.2ms -> 31.3ms) Change 2773094 on 2015/11/19 by Steve.Robb@Dev-Core Multicast script delegate check for existing bindings replaced with ensure. Multicast native delegate no longer checks for existing bindings. Removal of old delegate code. Some FORCEINLINEing to improve debugging experience of stepping into delegate code. Change 2782180 on 2015/11/27 by Graeme.Thornton@GThornton_DesktopMaster Make scoped seconds timer class available outside of stats build. Normal usage macros still remain guarded Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE which only times during the outmost instance of a recursive function Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE_BASE and SCOPE_SECONDS_COUNTER_BASE which are defined in all build types, for easy temporary timing in Test/Shipping builds. Added a boolean parameter to the timer class which can be used to disable it without having to mess around with scoping the calling code Change 2782635 on 2015/11/30 by Graeme.Thornton@GThornton_DesktopMaster Added GetTimeStampPair() to the filemanager and platformfile interfaces. Requests timestamps for a pair of files where we assume that both files would always exist at the same wrapper level. Allows us to skip file system queries for localization package lookups where the native file is in a pak but the localized file doesn't exist. Change 2775153 on 2015/11/20 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec CrashReportServer moved out of the not for licencees, a few fixes, removed RegisterPII Change 2775560 on 2015/11/20 by Steve.Robb@Dev-Core FDelegateBase::GetDelegateInstance deprecated and replaced with FDelegateBase::GetDelegateInstanceProtected. Change 2781138 on 2015/11/25 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec Stats - Converted is using a new stats reader, a few more optimizations, should be 10x times faster Change 2772990 on 2015/11/19 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream2 Fixing potential dead lock when suspending and resuming async loading multiple times Change 2773023 on 2015/11/19 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream2 Support for references added through AddReferencedObjects in FArchiveReplaceObjectRef Change 2781055 on 2015/11/25 by Steve.Robb@Dev-Core Changes to IDelegateInstance reverted to allow licensees an easier time when upgrading their use of the now-deprecated GetDelegateInstance() code path. New TryGetBoundFunctionName() to aid the debugging of delegate bindings in non-shipping configs. Change 2773114 on 2015/11/19 by Steve.Robb@Dev-Core FMath::IsPowerOfTwo is now templated to take any type. Change 2773643 on 2015/11/19 by Steve.Robb@Dev-Core GetDelegateInstance() calls replaced - delegate instances never compare equal unless you are comparing two unbound delegates (both null) or comparing a delegate with itself. Change 2777686 on 2015/11/23 by Steve.Robb@Dev-Core GitHub #1793 - File write flags argument Change 2780590 on 2015/11/25 by Steve.Robb@Dev-Core Fix for FArchiveProxy::operator<< overloads. Change 2780845 on 2015/11/25 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec #jira UE-23358 - MDD relies on hard-coded P4 depot paths (fixed source context for streams) Change 2780962 on 2015/11/25 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec Stats - Added FStatsWriteStream for basic saving stat messages into a stream, initial support for reading a regular stats file, minor performance optimization, coding standard fixes #jira UECORE-170 - Improve profiler loading performance (wip) Change 2781887 on 2015/11/26 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec Profiler/ProfilerClient - Removed unneeded synchronization points, replaces with task graph SendTo jobs, removed PROFILER_THREADED_LOAD, replaced with new stats loading mechanism, should be around 2x times faster (4x since the optimization pass) #jira UECORE-170 - Improve profiler loading performance (wip) Change 2781893 on 2015/11/26 by Steve.Robb@Dev-Core TCachedOSPageAllocator abstracted from MallocBinned2. Misc tidy-ups. Change 2782198 on 2015/11/27 by Jaroslaw.Surowiec@Stream.1.JarekSurowiec Profiler - Better indication of the loading progress, should no longer freeze without a progress bar #jira UECORE-170 - Improve profiler loading performance (wip) Change 2782446 on 2015/11/29 by Steve.Robb@Dev-Core Warn when calling delegates' Create* functions when they're not assigned to anything. #codereview robert.manuszewski Change 2782538 on 2015/11/30 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1 #UE4 Removed DiskCachedAssetDataBuffer as it was not strictly necessary and was triggering a crash when loading the cached registry from disk. This data is now stored directly in DiskCachedAssetDataMap. It was already true that this map does not change outside of SerializeCache but now it is critical since NewCachedAssetDataMap keeps pointers directly to its values. Asset registry fixes by Bob Tellez. Possible fix for UE-23783. Change 2782564 on 2015/11/30 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1 FReferenceCollector::AddReferenceObjects performance improvements for TArrays. ARO will no longer call HandleObjectReference multiple times but instead will call HandleObjectReferences just once (currently only implemented for FGCCollector). Reduces the number of virtual function calls while GC'ing. Change 2782716 on 2015/11/30 by Steve.Robb@Dev-Core UObject serial number array initialized for debug visualization. Change 2782933 on 2015/11/30 by Steve.Robb@Dev-Core Critical sections are no longer copyable. Change 2783061 on 2015/11/30 by Steve.Robb@Dev-Core
2015-12-03 14:21:29 -05:00
const FString LocalDepotDir = EscapePath( DepotRoot / DepotName );
UE_LOG( LogCrashDebugHelper, Warning, TEXT( "PDB Cache entry: %s is being copied from: %s, it will take some time" ), *CleanedLabelName, *OriginalLabelName );
for( const auto& Filename : FilesToBeCached )
{
const FString SourceDirectoryWithSearch = Filename.Replace( *DepotName, *LocalDepotDir );
TArray<FString> MatchedFiles;
IFileManager::Get().FindFiles( MatchedFiles, *SourceDirectoryWithSearch, true, false );
for( const auto& MatchedFilename : MatchedFiles )
{
const FString SrcFilename = FPaths::GetPath( SourceDirectoryWithSearch ) / MatchedFilename;
const FString DestFilename = EntryDirectory / SrcFilename.Replace( *LocalDepotDir, TEXT( "" ) );
IFileManager::Get().Copy( *DestFilename, *SrcFilename );
}
}
TArray<FString> CachedFiles;
IFileManager::Get().FindFilesRecursive( CachedFiles, *EntryDirectory, TEXT( "*.*" ), true, false );
// Calculate the size of this PDB Cache entry.
int64 TotalSize = 0;
for( const auto& Filename : CachedFiles )
{
const int64 FileSize = IFileManager::Get().FileSize( *Filename );
TotalSize += FileSize;
}
// Round-up the size.
int32 SizeGB = (int32)FMath::DivideAndRoundUp( TotalSize, (int64)NUM_BYTES_PER_GB );
FPDBCacheEntryRef NewCacheEntry = MakeShareable( new FPDBCacheEntry( CachedFiles, CleanedLabelName, FDateTime::Now(), SizeGB ) );
// Verify there is an entry timestamp file, write the size of a PDB cache to avoid time consuming FindFilesRecursive during initialization.
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3208226) #lockdown Nick.Penwarden #rb None ========================== MAJOR FEATURES + CHANGES ========================== Change 3173153 on 2016/10/25 by Graeme.Thornton Pak signing changes - Integrated into EDL loader - Changed to not encrypt each CRC in the sig file, rather just store a single encryped signature of the entire sig file. Removes need to decrypt thousands of signatures at startup. Change 3173531 on 2016/10/25 by Steven.Hutton Removing unused j query packages. Change 3174743 on 2016/10/26 by Gil.Gribb UE4 - fixed COTF with EDL Change 3177896 on 2016/10/28 by Steve.Robb TSharedPtr and TSharedRef aliasing constructors. Removal of static_asserts for TSharedPtr<UObject>. Change 3180343 on 2016/10/31 by Steve.Robb Reimplementation of changes from CL#s 3050329 and 3105715 that were lost in merges 3094597 and 3105741. Change 3181382 on 2016/11/01 by Steve.Robb Visual Studio debugger visualizers for delegates. Change 3182738 on 2016/11/02 by Graeme.Thornton Re-enable signed archive reader so non-pakpreacher based reads still get signature checked Change 3183420 on 2016/11/02 by Steve.Robb Fix to TIsZeroConstructType for TScriptDelegate. Change 3184872 on 2016/11/03 by Robert.Manuszewski Fixing memory stomps in SSL certificate initialization (found with mallocstomp) Change 3184873 on 2016/11/03 by Robert.Manuszewski Adding thread safety checks to async loading code Change 3185535 on 2016/11/03 by Ben.Zeigler Fix it so calling CreateDefaultSubobject with bTransient = true sets the object transient flag. This fixes EDL Crashes involving components. Change 3186636 on 2016/11/04 by Graeme.Thornton AES encryption integrated into EDL system Pak signing and AES encryption now configurable by ini files rather than magical text files Change 3186637 on 2016/11/04 by Graeme.Thornton Configured pak signing and encryption in ShooterGame for reference Change 3186639 on 2016/11/04 by Graeme.Thornton Encryption changes for Orion * Move pak signing keys into new INI format * Add AES key and enable INI file encryption Change 3186661 on 2016/11/04 by Graeme.Thornton Change unrealpak command line params to accept AES key as a separete parameter Change 3186670 on 2016/11/04 by Robert.Manuszewski Adding a null check before using a package pointer in Linker code #jira UE-38237 Change 3186775 on 2016/11/04 by Graeme.Thornton Fix UBT defines that come in as quoted strings, losing the quotes when passed to the compiler - PS4 and Mac fixes. Other platforms might need fixing too! Change 3186823 on 2016/11/04 by Graeme.Thornton Fixed an incorrect size check in the EDL pak signing code Change 3186925 on 2016/11/04 by Graeme.Thornton Allow UnrealPak to read encryption settings from project ini files Change 3189885 on 2016/11/08 by Graeme.Thornton Static analysis warning fix Change 3190015 on 2016/11/08 by Robert.Manuszewski Thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread Change 3190253 on 2016/11/08 by Chris.Wood Improved MDD performance for on the CR server. [UE-37566] - Improve MDD performance on CR server Blocked MDD init'ing the crash handling code as it isn't desirable on the server. Removed redundant call to SetSymbolPathsFromModules() from CrashDebugHelper. Change 3192993 on 2016/11/10 by Robert.Manuszewski Thread Heartbeat will no longer report the same hang multiple times. Change 3193111 on 2016/11/10 by Robert.Manuszewski Minor change in the condition that detects the same hangs - allow the same callstacks from different threads Change 3193168 on 2016/11/10 by Steve.Robb TSparseArray now reserves space in reverse so that new elements get added to the front of the allocation rather than the back, which is better for memory traversal and meets expectations more closely. Change 3193171 on 2016/11/10 by Steve.Robb Easier debugging of FPendingRegistrantInfo map. Change 3193188 on 2016/11/10 by Steve.Robb TAutoPointer deprecated. Change 3193796 on 2016/11/10 by Graeme.Thornton Fix pak creation failure when no pak signing keys are supplied Change 3194524 on 2016/11/11 by Graeme.Thornton Another static analysis warning fix Change 3195119 on 2016/11/11 by Steve.Robb TAutoPtr deprecated. Fixes to use of TAutoPtr with incompatible memory deallocations (TAutoPtr with FMemory::Malloc and new[]). Some large headers moved into .cpp files. Change 3196582 on 2016/11/14 by Gil.Gribb UE4 - Changed a check to a warning related to detaching linekrs twice. Seen in nativized BP version of platformer game. Change 3196878 on 2016/11/14 by Steve.Robb TScopedPointer deprecated. Change 3198061 on 2016/11/15 by Steve.Robb Class array is no longer regenerated when saving UClasses. Change 3198065 on 2016/11/15 by Robert.Manuszewski Making AssembleReferenceTokenStream thread safe for blueprints loaded on the async loading thread. Change 3198199 on 2016/11/15 by Robert.Manuszewski Pak platform file will now only be used if pak files exist regardless of command line paraks like -pak, -singedpak and -signed. Change 3199954 on 2016/11/16 by Graeme.Thornton Removing USING_SIGNED_CONTENT Change 3200221 on 2016/11/16 by Chris.Wood CrashReportProcess code cleanup - removing unused using directives Change 3200232 on 2016/11/16 by Chris.Wood Multiple CrashReportProcess updates and improvements (CRP v1.2.6) UE-36248 - CRP scalability: All bulk storage or shared data to S3 or suitable network drives InvalidCrashReports now saved to S3 instead of local folder Removed option tosync MinidumpDiagnostics from Perforce Moved MinidumpDiagnostics from old Perforce synched location to its own folder in E:\Services (makes more sense with manual publishing) Added improved logging to Slack with option to monitor MDD performance Added hourly log folders to MDD logs Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures) Change 3200382 on 2016/11/16 by Robert.Manuszewski Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists). Change 3200562 on 2016/11/16 by Gil.Gribb UE4 - Fixed rare issue with reloading nativized blueprints with the EDL and a minor simplication. Change 3201093 on 2016/11/16 by Ben.Zeigler #UE 38654 Fix EDL cooking to correctly search components created directly by UBlueprints, as well as the CDO components it already covered. Also explicitly mark subobject templates as editor only. Fix issue where the AssetImportData associated with Blueprint-owned Curves was ending up in the cooked subobject template list. Stopped it from creating those objects, and mark the class editor only. Change 3201736 on 2016/11/17 by Steve.Robb Strtoi64 platform and TCString functions. #fyi robert.manuszewski Change 3201938 on 2016/11/17 by Ben.Woodhouse Dummy integrate of the Square render version workaround (CL 3201913) with _accept target_ to prevent it being integrated to dev-core in future. Commandline: p4 integrate //Tasks/UE4/Dev-LoadTimes/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp@3201913,3201913 //UE4/Dev-Core/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp #fyi robert.manuszewski Change 3203757 on 2016/11/18 by Robert.Manuszewski Removing debug code from async loading code. Change 3203927 on 2016/11/18 by Robert.Manuszewski Fixing comments in the async loading code. Change 3204851 on 2016/11/18 by Steve.Robb Metafunction for testing if a particular operator<< overload exists, e.g. THasInserterOperator<FArchive&, FMyType&>::Value. Change 3204854 on 2016/11/18 by Steve.Robb UEnumProperty. Change 3205027 on 2016/11/18 by Ben.Zeigler Add useful functions to FAssetPtr and TAssetSubclassOf that already existed on TAssetPtr Add Get() to TSubclassOf so it matches our other wrappers Fix TSubclassOf and TAssetSubclassOf to use the more efficient template method of checking class compatibility Comment and template cleanups for AssetPtr, StringAssetReference, LazyPtr, and SubclassOf Change 3206334 on 2016/11/21 by Ben.Zeigler #UE-38773: Fix it so non-component template subobjects of CDOs are not included as creation dependencies for BP classes, also clean up GetPreloadDependencies as it was adding redundant and null entries #UE-38799: Fix it so WidgetTrees don't get picked up as subobjects, and add ensure at cook time to find null outers that would crash at runtime. Make sure the instanced widget trees are transient. Cook finishes but game is still crashing in some cases, so I might adjust this after other testing Change 3206353 on 2016/11/21 by Ben.Zeigler Fix EnumProperty to handle EDL preload dependencies properly Change 3206625 on 2016/11/21 by Ben.Zeigler Fix enum property crash at runtime by copying what array property does and making sure inner property is not transient Change 3206937 on 2016/11/21 by Ben.Zeigler #jira UE-38905 Fix it so enums inside arrays are migrated properly, the enum tag is lost so use the current one Disable other nested enum migrations as they are unlikely to work. Array property tags need to be refactored to be safer Correctly save enum tag for enum properties, it was being set but not serialized Change 3207002 on 2016/11/21 by Ben.Zeigler #jira UE-38799 Fix it so per-widget copy of widget tree and all widgets inside are properly transient, they were being cooked before but never accessed. Fix case where non ClientOnly public objects nested instead ClientOnly objects would cook but fail to load, and add ensure to catch these cases in the future. If the full outer chain isn't available, it can't be loaded anyway, and this finds issues at cook time instead of load time. We should generally outlaw non-transient objects with transient outers, it does not do what people expect. Change 3207032 on 2016/11/21 by Ben.Zeigler #jira UE-38654 Re-Fix EDL cooking with SCS-added components. They used to have the DefaultSubObject flag but no longer do [CL 3208270 by Ben Zeigler in Main branch]
2016-11-22 18:45:44 -05:00
TUniquePtr<FArchive> FileWriter( IFileManager::Get().CreateFileWriter( *EntryTimeStampFilename ) );
UE_CLOG( !FileWriter, LogCrashDebugHelper, Fatal, TEXT( "Couldn't save the timestamp for a file: %s" ), *EntryTimeStampFilename );
*FileWriter << *NewCacheEntry;
PDBCacheEntries.Add( CleanedLabelName, NewCacheEntry );
SortPDBCache();
return NewCacheEntry;
}
FPDBCacheEntryRef FPDBCache::CreateAndAddPDBCacheEntryMixed( const FString& ProductVersion, const TMap<FString, FString>& FilesToBeCached )
{
// Enable MDD to parse all minidumps regardless the branch, to fix the issue with the missing executables on the P4 due to the build system changes.
const FString EntryDirectory = PDBCachePath / ProductVersion;
const FString EntryTimeStampFilename = EntryDirectory / PDBTimeStampFile;
UE_LOG( LogCrashDebugHelper, Warning, TEXT( "PDB Cache entry: %s is being created from %i files, it will take some time" ), *ProductVersion, FilesToBeCached.Num() );
for( const auto& It : FilesToBeCached )
{
const FString& SrcFilename = It.Key;
const FString DestFilename = EntryDirectory / It.Value;
IFileManager::Get().Copy( *DestFilename, *SrcFilename );
}
TArray<FString> CachedFiles;
IFileManager::Get().FindFilesRecursive( CachedFiles, *EntryDirectory, TEXT( "*.*" ), true, false );
// Calculate the size of this PDB Cache entry.
int64 TotalSize = 0;
for( const auto& Filename : CachedFiles )
{
const int64 FileSize = IFileManager::Get().FileSize( *Filename );
TotalSize += FileSize;
}
// Round-up the size.
int32 SizeGB = (int32)FMath::DivideAndRoundUp( TotalSize, (int64)NUM_BYTES_PER_GB );
FPDBCacheEntryRef NewCacheEntry = MakeShareable( new FPDBCacheEntry( CachedFiles, ProductVersion, FDateTime::Now(), SizeGB ) );
// Verify there is an entry timestamp file, write the size of a PDB cache to avoid time consuming FindFilesRecursive during initialization.
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3208226) #lockdown Nick.Penwarden #rb None ========================== MAJOR FEATURES + CHANGES ========================== Change 3173153 on 2016/10/25 by Graeme.Thornton Pak signing changes - Integrated into EDL loader - Changed to not encrypt each CRC in the sig file, rather just store a single encryped signature of the entire sig file. Removes need to decrypt thousands of signatures at startup. Change 3173531 on 2016/10/25 by Steven.Hutton Removing unused j query packages. Change 3174743 on 2016/10/26 by Gil.Gribb UE4 - fixed COTF with EDL Change 3177896 on 2016/10/28 by Steve.Robb TSharedPtr and TSharedRef aliasing constructors. Removal of static_asserts for TSharedPtr<UObject>. Change 3180343 on 2016/10/31 by Steve.Robb Reimplementation of changes from CL#s 3050329 and 3105715 that were lost in merges 3094597 and 3105741. Change 3181382 on 2016/11/01 by Steve.Robb Visual Studio debugger visualizers for delegates. Change 3182738 on 2016/11/02 by Graeme.Thornton Re-enable signed archive reader so non-pakpreacher based reads still get signature checked Change 3183420 on 2016/11/02 by Steve.Robb Fix to TIsZeroConstructType for TScriptDelegate. Change 3184872 on 2016/11/03 by Robert.Manuszewski Fixing memory stomps in SSL certificate initialization (found with mallocstomp) Change 3184873 on 2016/11/03 by Robert.Manuszewski Adding thread safety checks to async loading code Change 3185535 on 2016/11/03 by Ben.Zeigler Fix it so calling CreateDefaultSubobject with bTransient = true sets the object transient flag. This fixes EDL Crashes involving components. Change 3186636 on 2016/11/04 by Graeme.Thornton AES encryption integrated into EDL system Pak signing and AES encryption now configurable by ini files rather than magical text files Change 3186637 on 2016/11/04 by Graeme.Thornton Configured pak signing and encryption in ShooterGame for reference Change 3186639 on 2016/11/04 by Graeme.Thornton Encryption changes for Orion * Move pak signing keys into new INI format * Add AES key and enable INI file encryption Change 3186661 on 2016/11/04 by Graeme.Thornton Change unrealpak command line params to accept AES key as a separete parameter Change 3186670 on 2016/11/04 by Robert.Manuszewski Adding a null check before using a package pointer in Linker code #jira UE-38237 Change 3186775 on 2016/11/04 by Graeme.Thornton Fix UBT defines that come in as quoted strings, losing the quotes when passed to the compiler - PS4 and Mac fixes. Other platforms might need fixing too! Change 3186823 on 2016/11/04 by Graeme.Thornton Fixed an incorrect size check in the EDL pak signing code Change 3186925 on 2016/11/04 by Graeme.Thornton Allow UnrealPak to read encryption settings from project ini files Change 3189885 on 2016/11/08 by Graeme.Thornton Static analysis warning fix Change 3190015 on 2016/11/08 by Robert.Manuszewski Thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread Change 3190253 on 2016/11/08 by Chris.Wood Improved MDD performance for on the CR server. [UE-37566] - Improve MDD performance on CR server Blocked MDD init'ing the crash handling code as it isn't desirable on the server. Removed redundant call to SetSymbolPathsFromModules() from CrashDebugHelper. Change 3192993 on 2016/11/10 by Robert.Manuszewski Thread Heartbeat will no longer report the same hang multiple times. Change 3193111 on 2016/11/10 by Robert.Manuszewski Minor change in the condition that detects the same hangs - allow the same callstacks from different threads Change 3193168 on 2016/11/10 by Steve.Robb TSparseArray now reserves space in reverse so that new elements get added to the front of the allocation rather than the back, which is better for memory traversal and meets expectations more closely. Change 3193171 on 2016/11/10 by Steve.Robb Easier debugging of FPendingRegistrantInfo map. Change 3193188 on 2016/11/10 by Steve.Robb TAutoPointer deprecated. Change 3193796 on 2016/11/10 by Graeme.Thornton Fix pak creation failure when no pak signing keys are supplied Change 3194524 on 2016/11/11 by Graeme.Thornton Another static analysis warning fix Change 3195119 on 2016/11/11 by Steve.Robb TAutoPtr deprecated. Fixes to use of TAutoPtr with incompatible memory deallocations (TAutoPtr with FMemory::Malloc and new[]). Some large headers moved into .cpp files. Change 3196582 on 2016/11/14 by Gil.Gribb UE4 - Changed a check to a warning related to detaching linekrs twice. Seen in nativized BP version of platformer game. Change 3196878 on 2016/11/14 by Steve.Robb TScopedPointer deprecated. Change 3198061 on 2016/11/15 by Steve.Robb Class array is no longer regenerated when saving UClasses. Change 3198065 on 2016/11/15 by Robert.Manuszewski Making AssembleReferenceTokenStream thread safe for blueprints loaded on the async loading thread. Change 3198199 on 2016/11/15 by Robert.Manuszewski Pak platform file will now only be used if pak files exist regardless of command line paraks like -pak, -singedpak and -signed. Change 3199954 on 2016/11/16 by Graeme.Thornton Removing USING_SIGNED_CONTENT Change 3200221 on 2016/11/16 by Chris.Wood CrashReportProcess code cleanup - removing unused using directives Change 3200232 on 2016/11/16 by Chris.Wood Multiple CrashReportProcess updates and improvements (CRP v1.2.6) UE-36248 - CRP scalability: All bulk storage or shared data to S3 or suitable network drives InvalidCrashReports now saved to S3 instead of local folder Removed option tosync MinidumpDiagnostics from Perforce Moved MinidumpDiagnostics from old Perforce synched location to its own folder in E:\Services (makes more sense with manual publishing) Added improved logging to Slack with option to monitor MDD performance Added hourly log folders to MDD logs Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures) Change 3200382 on 2016/11/16 by Robert.Manuszewski Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists). Change 3200562 on 2016/11/16 by Gil.Gribb UE4 - Fixed rare issue with reloading nativized blueprints with the EDL and a minor simplication. Change 3201093 on 2016/11/16 by Ben.Zeigler #UE 38654 Fix EDL cooking to correctly search components created directly by UBlueprints, as well as the CDO components it already covered. Also explicitly mark subobject templates as editor only. Fix issue where the AssetImportData associated with Blueprint-owned Curves was ending up in the cooked subobject template list. Stopped it from creating those objects, and mark the class editor only. Change 3201736 on 2016/11/17 by Steve.Robb Strtoi64 platform and TCString functions. #fyi robert.manuszewski Change 3201938 on 2016/11/17 by Ben.Woodhouse Dummy integrate of the Square render version workaround (CL 3201913) with _accept target_ to prevent it being integrated to dev-core in future. Commandline: p4 integrate //Tasks/UE4/Dev-LoadTimes/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp@3201913,3201913 //UE4/Dev-Core/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp #fyi robert.manuszewski Change 3203757 on 2016/11/18 by Robert.Manuszewski Removing debug code from async loading code. Change 3203927 on 2016/11/18 by Robert.Manuszewski Fixing comments in the async loading code. Change 3204851 on 2016/11/18 by Steve.Robb Metafunction for testing if a particular operator<< overload exists, e.g. THasInserterOperator<FArchive&, FMyType&>::Value. Change 3204854 on 2016/11/18 by Steve.Robb UEnumProperty. Change 3205027 on 2016/11/18 by Ben.Zeigler Add useful functions to FAssetPtr and TAssetSubclassOf that already existed on TAssetPtr Add Get() to TSubclassOf so it matches our other wrappers Fix TSubclassOf and TAssetSubclassOf to use the more efficient template method of checking class compatibility Comment and template cleanups for AssetPtr, StringAssetReference, LazyPtr, and SubclassOf Change 3206334 on 2016/11/21 by Ben.Zeigler #UE-38773: Fix it so non-component template subobjects of CDOs are not included as creation dependencies for BP classes, also clean up GetPreloadDependencies as it was adding redundant and null entries #UE-38799: Fix it so WidgetTrees don't get picked up as subobjects, and add ensure at cook time to find null outers that would crash at runtime. Make sure the instanced widget trees are transient. Cook finishes but game is still crashing in some cases, so I might adjust this after other testing Change 3206353 on 2016/11/21 by Ben.Zeigler Fix EnumProperty to handle EDL preload dependencies properly Change 3206625 on 2016/11/21 by Ben.Zeigler Fix enum property crash at runtime by copying what array property does and making sure inner property is not transient Change 3206937 on 2016/11/21 by Ben.Zeigler #jira UE-38905 Fix it so enums inside arrays are migrated properly, the enum tag is lost so use the current one Disable other nested enum migrations as they are unlikely to work. Array property tags need to be refactored to be safer Correctly save enum tag for enum properties, it was being set but not serialized Change 3207002 on 2016/11/21 by Ben.Zeigler #jira UE-38799 Fix it so per-widget copy of widget tree and all widgets inside are properly transient, they were being cooked before but never accessed. Fix case where non ClientOnly public objects nested instead ClientOnly objects would cook but fail to load, and add ensure to catch these cases in the future. If the full outer chain isn't available, it can't be loaded anyway, and this finds issues at cook time instead of load time. We should generally outlaw non-transient objects with transient outers, it does not do what people expect. Change 3207032 on 2016/11/21 by Ben.Zeigler #jira UE-38654 Re-Fix EDL cooking with SCS-added components. They used to have the DefaultSubObject flag but no longer do [CL 3208270 by Ben Zeigler in Main branch]
2016-11-22 18:45:44 -05:00
TUniquePtr<FArchive> FileWriter( IFileManager::Get().CreateFileWriter( *EntryTimeStampFilename ) );
UE_CLOG( !FileWriter, LogCrashDebugHelper, Fatal, TEXT( "Couldn't save the timestamp for a file: %s" ), *EntryTimeStampFilename );
*FileWriter << *NewCacheEntry;
PDBCacheEntries.Add( ProductVersion, NewCacheEntry );
SortPDBCache();
return NewCacheEntry;
}
FPDBCacheEntryPtr FPDBCache::ReadPDBCacheEntry( const FString& Directory )
{
const FString EntryDirectory = PDBCachePath / Directory;
const FString EntryTimeStampFilenameNoMeta = EntryDirectory / PDBTimeStampFileNoMeta;
const FString EntryTimeStampFilename = EntryDirectory / PDBTimeStampFile;
// Verify there is an entry timestamp file.
const FDateTime LastAccessTimeNoMeta = IFileManager::Get().GetTimeStamp( *EntryTimeStampFilenameNoMeta );
const FDateTime LastAccessTime = IFileManager::Get().GetTimeStamp( *EntryTimeStampFilename );
FPDBCacheEntryPtr NewEntry;
if( LastAccessTime != FDateTime::MinValue() )
{
// Read the metadata
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3208226) #lockdown Nick.Penwarden #rb None ========================== MAJOR FEATURES + CHANGES ========================== Change 3173153 on 2016/10/25 by Graeme.Thornton Pak signing changes - Integrated into EDL loader - Changed to not encrypt each CRC in the sig file, rather just store a single encryped signature of the entire sig file. Removes need to decrypt thousands of signatures at startup. Change 3173531 on 2016/10/25 by Steven.Hutton Removing unused j query packages. Change 3174743 on 2016/10/26 by Gil.Gribb UE4 - fixed COTF with EDL Change 3177896 on 2016/10/28 by Steve.Robb TSharedPtr and TSharedRef aliasing constructors. Removal of static_asserts for TSharedPtr<UObject>. Change 3180343 on 2016/10/31 by Steve.Robb Reimplementation of changes from CL#s 3050329 and 3105715 that were lost in merges 3094597 and 3105741. Change 3181382 on 2016/11/01 by Steve.Robb Visual Studio debugger visualizers for delegates. Change 3182738 on 2016/11/02 by Graeme.Thornton Re-enable signed archive reader so non-pakpreacher based reads still get signature checked Change 3183420 on 2016/11/02 by Steve.Robb Fix to TIsZeroConstructType for TScriptDelegate. Change 3184872 on 2016/11/03 by Robert.Manuszewski Fixing memory stomps in SSL certificate initialization (found with mallocstomp) Change 3184873 on 2016/11/03 by Robert.Manuszewski Adding thread safety checks to async loading code Change 3185535 on 2016/11/03 by Ben.Zeigler Fix it so calling CreateDefaultSubobject with bTransient = true sets the object transient flag. This fixes EDL Crashes involving components. Change 3186636 on 2016/11/04 by Graeme.Thornton AES encryption integrated into EDL system Pak signing and AES encryption now configurable by ini files rather than magical text files Change 3186637 on 2016/11/04 by Graeme.Thornton Configured pak signing and encryption in ShooterGame for reference Change 3186639 on 2016/11/04 by Graeme.Thornton Encryption changes for Orion * Move pak signing keys into new INI format * Add AES key and enable INI file encryption Change 3186661 on 2016/11/04 by Graeme.Thornton Change unrealpak command line params to accept AES key as a separete parameter Change 3186670 on 2016/11/04 by Robert.Manuszewski Adding a null check before using a package pointer in Linker code #jira UE-38237 Change 3186775 on 2016/11/04 by Graeme.Thornton Fix UBT defines that come in as quoted strings, losing the quotes when passed to the compiler - PS4 and Mac fixes. Other platforms might need fixing too! Change 3186823 on 2016/11/04 by Graeme.Thornton Fixed an incorrect size check in the EDL pak signing code Change 3186925 on 2016/11/04 by Graeme.Thornton Allow UnrealPak to read encryption settings from project ini files Change 3189885 on 2016/11/08 by Graeme.Thornton Static analysis warning fix Change 3190015 on 2016/11/08 by Robert.Manuszewski Thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread Change 3190253 on 2016/11/08 by Chris.Wood Improved MDD performance for on the CR server. [UE-37566] - Improve MDD performance on CR server Blocked MDD init'ing the crash handling code as it isn't desirable on the server. Removed redundant call to SetSymbolPathsFromModules() from CrashDebugHelper. Change 3192993 on 2016/11/10 by Robert.Manuszewski Thread Heartbeat will no longer report the same hang multiple times. Change 3193111 on 2016/11/10 by Robert.Manuszewski Minor change in the condition that detects the same hangs - allow the same callstacks from different threads Change 3193168 on 2016/11/10 by Steve.Robb TSparseArray now reserves space in reverse so that new elements get added to the front of the allocation rather than the back, which is better for memory traversal and meets expectations more closely. Change 3193171 on 2016/11/10 by Steve.Robb Easier debugging of FPendingRegistrantInfo map. Change 3193188 on 2016/11/10 by Steve.Robb TAutoPointer deprecated. Change 3193796 on 2016/11/10 by Graeme.Thornton Fix pak creation failure when no pak signing keys are supplied Change 3194524 on 2016/11/11 by Graeme.Thornton Another static analysis warning fix Change 3195119 on 2016/11/11 by Steve.Robb TAutoPtr deprecated. Fixes to use of TAutoPtr with incompatible memory deallocations (TAutoPtr with FMemory::Malloc and new[]). Some large headers moved into .cpp files. Change 3196582 on 2016/11/14 by Gil.Gribb UE4 - Changed a check to a warning related to detaching linekrs twice. Seen in nativized BP version of platformer game. Change 3196878 on 2016/11/14 by Steve.Robb TScopedPointer deprecated. Change 3198061 on 2016/11/15 by Steve.Robb Class array is no longer regenerated when saving UClasses. Change 3198065 on 2016/11/15 by Robert.Manuszewski Making AssembleReferenceTokenStream thread safe for blueprints loaded on the async loading thread. Change 3198199 on 2016/11/15 by Robert.Manuszewski Pak platform file will now only be used if pak files exist regardless of command line paraks like -pak, -singedpak and -signed. Change 3199954 on 2016/11/16 by Graeme.Thornton Removing USING_SIGNED_CONTENT Change 3200221 on 2016/11/16 by Chris.Wood CrashReportProcess code cleanup - removing unused using directives Change 3200232 on 2016/11/16 by Chris.Wood Multiple CrashReportProcess updates and improvements (CRP v1.2.6) UE-36248 - CRP scalability: All bulk storage or shared data to S3 or suitable network drives InvalidCrashReports now saved to S3 instead of local folder Removed option tosync MinidumpDiagnostics from Perforce Moved MinidumpDiagnostics from old Perforce synched location to its own folder in E:\Services (makes more sense with manual publishing) Added improved logging to Slack with option to monitor MDD performance Added hourly log folders to MDD logs Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures) Change 3200382 on 2016/11/16 by Robert.Manuszewski Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists). Change 3200562 on 2016/11/16 by Gil.Gribb UE4 - Fixed rare issue with reloading nativized blueprints with the EDL and a minor simplication. Change 3201093 on 2016/11/16 by Ben.Zeigler #UE 38654 Fix EDL cooking to correctly search components created directly by UBlueprints, as well as the CDO components it already covered. Also explicitly mark subobject templates as editor only. Fix issue where the AssetImportData associated with Blueprint-owned Curves was ending up in the cooked subobject template list. Stopped it from creating those objects, and mark the class editor only. Change 3201736 on 2016/11/17 by Steve.Robb Strtoi64 platform and TCString functions. #fyi robert.manuszewski Change 3201938 on 2016/11/17 by Ben.Woodhouse Dummy integrate of the Square render version workaround (CL 3201913) with _accept target_ to prevent it being integrated to dev-core in future. Commandline: p4 integrate //Tasks/UE4/Dev-LoadTimes/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp@3201913,3201913 //UE4/Dev-Core/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp #fyi robert.manuszewski Change 3203757 on 2016/11/18 by Robert.Manuszewski Removing debug code from async loading code. Change 3203927 on 2016/11/18 by Robert.Manuszewski Fixing comments in the async loading code. Change 3204851 on 2016/11/18 by Steve.Robb Metafunction for testing if a particular operator<< overload exists, e.g. THasInserterOperator<FArchive&, FMyType&>::Value. Change 3204854 on 2016/11/18 by Steve.Robb UEnumProperty. Change 3205027 on 2016/11/18 by Ben.Zeigler Add useful functions to FAssetPtr and TAssetSubclassOf that already existed on TAssetPtr Add Get() to TSubclassOf so it matches our other wrappers Fix TSubclassOf and TAssetSubclassOf to use the more efficient template method of checking class compatibility Comment and template cleanups for AssetPtr, StringAssetReference, LazyPtr, and SubclassOf Change 3206334 on 2016/11/21 by Ben.Zeigler #UE-38773: Fix it so non-component template subobjects of CDOs are not included as creation dependencies for BP classes, also clean up GetPreloadDependencies as it was adding redundant and null entries #UE-38799: Fix it so WidgetTrees don't get picked up as subobjects, and add ensure at cook time to find null outers that would crash at runtime. Make sure the instanced widget trees are transient. Cook finishes but game is still crashing in some cases, so I might adjust this after other testing Change 3206353 on 2016/11/21 by Ben.Zeigler Fix EnumProperty to handle EDL preload dependencies properly Change 3206625 on 2016/11/21 by Ben.Zeigler Fix enum property crash at runtime by copying what array property does and making sure inner property is not transient Change 3206937 on 2016/11/21 by Ben.Zeigler #jira UE-38905 Fix it so enums inside arrays are migrated properly, the enum tag is lost so use the current one Disable other nested enum migrations as they are unlikely to work. Array property tags need to be refactored to be safer Correctly save enum tag for enum properties, it was being set but not serialized Change 3207002 on 2016/11/21 by Ben.Zeigler #jira UE-38799 Fix it so per-widget copy of widget tree and all widgets inside are properly transient, they were being cooked before but never accessed. Fix case where non ClientOnly public objects nested instead ClientOnly objects would cook but fail to load, and add ensure to catch these cases in the future. If the full outer chain isn't available, it can't be loaded anyway, and this finds issues at cook time instead of load time. We should generally outlaw non-transient objects with transient outers, it does not do what people expect. Change 3207032 on 2016/11/21 by Ben.Zeigler #jira UE-38654 Re-Fix EDL cooking with SCS-added components. They used to have the DefaultSubObject flag but no longer do [CL 3208270 by Ben Zeigler in Main branch]
2016-11-22 18:45:44 -05:00
TUniquePtr<FArchive> FileReader( IFileManager::Get().CreateFileReader( *EntryTimeStampFilename ) );
NewEntry = MakeShareable( new FPDBCacheEntry( LastAccessTime ) );
*FileReader << *NewEntry;
}
else if( LastAccessTimeNoMeta != FDateTime::MinValue() )
{
// Calculate the size of this PDB Cache entry and update to the new version.
TArray<FString> PDBFiles;
IFileManager::Get().FindFilesRecursive( PDBFiles, *EntryDirectory, TEXT( "*.*" ), true, false );
// Calculate the size of this PDB Cache entry.
int64 TotalSize = 0;
for( const auto& Filename : PDBFiles )
{
const int64 FileSize = IFileManager::Get().FileSize( *Filename );
TotalSize += FileSize;
}
// Round-up the size.
const int32 SizeGB = (int32)FMath::DivideAndRoundUp( TotalSize, (int64)NUM_BYTES_PER_GB );
NewEntry = MakeShareable( new FPDBCacheEntry( PDBFiles, Directory, LastAccessTimeNoMeta, SizeGB ) );
// Remove the old file and save the metadata.
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3208226) #lockdown Nick.Penwarden #rb None ========================== MAJOR FEATURES + CHANGES ========================== Change 3173153 on 2016/10/25 by Graeme.Thornton Pak signing changes - Integrated into EDL loader - Changed to not encrypt each CRC in the sig file, rather just store a single encryped signature of the entire sig file. Removes need to decrypt thousands of signatures at startup. Change 3173531 on 2016/10/25 by Steven.Hutton Removing unused j query packages. Change 3174743 on 2016/10/26 by Gil.Gribb UE4 - fixed COTF with EDL Change 3177896 on 2016/10/28 by Steve.Robb TSharedPtr and TSharedRef aliasing constructors. Removal of static_asserts for TSharedPtr<UObject>. Change 3180343 on 2016/10/31 by Steve.Robb Reimplementation of changes from CL#s 3050329 and 3105715 that were lost in merges 3094597 and 3105741. Change 3181382 on 2016/11/01 by Steve.Robb Visual Studio debugger visualizers for delegates. Change 3182738 on 2016/11/02 by Graeme.Thornton Re-enable signed archive reader so non-pakpreacher based reads still get signature checked Change 3183420 on 2016/11/02 by Steve.Robb Fix to TIsZeroConstructType for TScriptDelegate. Change 3184872 on 2016/11/03 by Robert.Manuszewski Fixing memory stomps in SSL certificate initialization (found with mallocstomp) Change 3184873 on 2016/11/03 by Robert.Manuszewski Adding thread safety checks to async loading code Change 3185535 on 2016/11/03 by Ben.Zeigler Fix it so calling CreateDefaultSubobject with bTransient = true sets the object transient flag. This fixes EDL Crashes involving components. Change 3186636 on 2016/11/04 by Graeme.Thornton AES encryption integrated into EDL system Pak signing and AES encryption now configurable by ini files rather than magical text files Change 3186637 on 2016/11/04 by Graeme.Thornton Configured pak signing and encryption in ShooterGame for reference Change 3186639 on 2016/11/04 by Graeme.Thornton Encryption changes for Orion * Move pak signing keys into new INI format * Add AES key and enable INI file encryption Change 3186661 on 2016/11/04 by Graeme.Thornton Change unrealpak command line params to accept AES key as a separete parameter Change 3186670 on 2016/11/04 by Robert.Manuszewski Adding a null check before using a package pointer in Linker code #jira UE-38237 Change 3186775 on 2016/11/04 by Graeme.Thornton Fix UBT defines that come in as quoted strings, losing the quotes when passed to the compiler - PS4 and Mac fixes. Other platforms might need fixing too! Change 3186823 on 2016/11/04 by Graeme.Thornton Fixed an incorrect size check in the EDL pak signing code Change 3186925 on 2016/11/04 by Graeme.Thornton Allow UnrealPak to read encryption settings from project ini files Change 3189885 on 2016/11/08 by Graeme.Thornton Static analysis warning fix Change 3190015 on 2016/11/08 by Robert.Manuszewski Thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread Change 3190253 on 2016/11/08 by Chris.Wood Improved MDD performance for on the CR server. [UE-37566] - Improve MDD performance on CR server Blocked MDD init'ing the crash handling code as it isn't desirable on the server. Removed redundant call to SetSymbolPathsFromModules() from CrashDebugHelper. Change 3192993 on 2016/11/10 by Robert.Manuszewski Thread Heartbeat will no longer report the same hang multiple times. Change 3193111 on 2016/11/10 by Robert.Manuszewski Minor change in the condition that detects the same hangs - allow the same callstacks from different threads Change 3193168 on 2016/11/10 by Steve.Robb TSparseArray now reserves space in reverse so that new elements get added to the front of the allocation rather than the back, which is better for memory traversal and meets expectations more closely. Change 3193171 on 2016/11/10 by Steve.Robb Easier debugging of FPendingRegistrantInfo map. Change 3193188 on 2016/11/10 by Steve.Robb TAutoPointer deprecated. Change 3193796 on 2016/11/10 by Graeme.Thornton Fix pak creation failure when no pak signing keys are supplied Change 3194524 on 2016/11/11 by Graeme.Thornton Another static analysis warning fix Change 3195119 on 2016/11/11 by Steve.Robb TAutoPtr deprecated. Fixes to use of TAutoPtr with incompatible memory deallocations (TAutoPtr with FMemory::Malloc and new[]). Some large headers moved into .cpp files. Change 3196582 on 2016/11/14 by Gil.Gribb UE4 - Changed a check to a warning related to detaching linekrs twice. Seen in nativized BP version of platformer game. Change 3196878 on 2016/11/14 by Steve.Robb TScopedPointer deprecated. Change 3198061 on 2016/11/15 by Steve.Robb Class array is no longer regenerated when saving UClasses. Change 3198065 on 2016/11/15 by Robert.Manuszewski Making AssembleReferenceTokenStream thread safe for blueprints loaded on the async loading thread. Change 3198199 on 2016/11/15 by Robert.Manuszewski Pak platform file will now only be used if pak files exist regardless of command line paraks like -pak, -singedpak and -signed. Change 3199954 on 2016/11/16 by Graeme.Thornton Removing USING_SIGNED_CONTENT Change 3200221 on 2016/11/16 by Chris.Wood CrashReportProcess code cleanup - removing unused using directives Change 3200232 on 2016/11/16 by Chris.Wood Multiple CrashReportProcess updates and improvements (CRP v1.2.6) UE-36248 - CRP scalability: All bulk storage or shared data to S3 or suitable network drives InvalidCrashReports now saved to S3 instead of local folder Removed option tosync MinidumpDiagnostics from Perforce Moved MinidumpDiagnostics from old Perforce synched location to its own folder in E:\Services (makes more sense with manual publishing) Added improved logging to Slack with option to monitor MDD performance Added hourly log folders to MDD logs Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures) Change 3200382 on 2016/11/16 by Robert.Manuszewski Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists). Change 3200562 on 2016/11/16 by Gil.Gribb UE4 - Fixed rare issue with reloading nativized blueprints with the EDL and a minor simplication. Change 3201093 on 2016/11/16 by Ben.Zeigler #UE 38654 Fix EDL cooking to correctly search components created directly by UBlueprints, as well as the CDO components it already covered. Also explicitly mark subobject templates as editor only. Fix issue where the AssetImportData associated with Blueprint-owned Curves was ending up in the cooked subobject template list. Stopped it from creating those objects, and mark the class editor only. Change 3201736 on 2016/11/17 by Steve.Robb Strtoi64 platform and TCString functions. #fyi robert.manuszewski Change 3201938 on 2016/11/17 by Ben.Woodhouse Dummy integrate of the Square render version workaround (CL 3201913) with _accept target_ to prevent it being integrated to dev-core in future. Commandline: p4 integrate //Tasks/UE4/Dev-LoadTimes/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp@3201913,3201913 //UE4/Dev-Core/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp #fyi robert.manuszewski Change 3203757 on 2016/11/18 by Robert.Manuszewski Removing debug code from async loading code. Change 3203927 on 2016/11/18 by Robert.Manuszewski Fixing comments in the async loading code. Change 3204851 on 2016/11/18 by Steve.Robb Metafunction for testing if a particular operator<< overload exists, e.g. THasInserterOperator<FArchive&, FMyType&>::Value. Change 3204854 on 2016/11/18 by Steve.Robb UEnumProperty. Change 3205027 on 2016/11/18 by Ben.Zeigler Add useful functions to FAssetPtr and TAssetSubclassOf that already existed on TAssetPtr Add Get() to TSubclassOf so it matches our other wrappers Fix TSubclassOf and TAssetSubclassOf to use the more efficient template method of checking class compatibility Comment and template cleanups for AssetPtr, StringAssetReference, LazyPtr, and SubclassOf Change 3206334 on 2016/11/21 by Ben.Zeigler #UE-38773: Fix it so non-component template subobjects of CDOs are not included as creation dependencies for BP classes, also clean up GetPreloadDependencies as it was adding redundant and null entries #UE-38799: Fix it so WidgetTrees don't get picked up as subobjects, and add ensure at cook time to find null outers that would crash at runtime. Make sure the instanced widget trees are transient. Cook finishes but game is still crashing in some cases, so I might adjust this after other testing Change 3206353 on 2016/11/21 by Ben.Zeigler Fix EnumProperty to handle EDL preload dependencies properly Change 3206625 on 2016/11/21 by Ben.Zeigler Fix enum property crash at runtime by copying what array property does and making sure inner property is not transient Change 3206937 on 2016/11/21 by Ben.Zeigler #jira UE-38905 Fix it so enums inside arrays are migrated properly, the enum tag is lost so use the current one Disable other nested enum migrations as they are unlikely to work. Array property tags need to be refactored to be safer Correctly save enum tag for enum properties, it was being set but not serialized Change 3207002 on 2016/11/21 by Ben.Zeigler #jira UE-38799 Fix it so per-widget copy of widget tree and all widgets inside are properly transient, they were being cooked before but never accessed. Fix case where non ClientOnly public objects nested instead ClientOnly objects would cook but fail to load, and add ensure to catch these cases in the future. If the full outer chain isn't available, it can't be loaded anyway, and this finds issues at cook time instead of load time. We should generally outlaw non-transient objects with transient outers, it does not do what people expect. Change 3207032 on 2016/11/21 by Ben.Zeigler #jira UE-38654 Re-Fix EDL cooking with SCS-added components. They used to have the DefaultSubObject flag but no longer do [CL 3208270 by Ben Zeigler in Main branch]
2016-11-22 18:45:44 -05:00
TUniquePtr<FArchive> FileWriter( IFileManager::Get().CreateFileWriter( *EntryTimeStampFilename ) );
*FileWriter << *NewEntry;
IFileManager::Get().Delete( *EntryTimeStampFilenameNoMeta );
}
else
{
// Something wrong.
ensureMsgf( 0, TEXT( "Invalid symbol cache entry: %s" ), *EntryDirectory );
}
return NewEntry;
}
void FPDBCache::TouchPDBCacheEntry( const FString& Directory )
{
const FString EntryDirectory = PDBCachePath / Directory;
const FString EntryTimeStampFilename = EntryDirectory / PDBTimeStampFile;
FPDBCacheEntryRef& Entry = PDBCacheEntries.FindChecked( Directory );
Entry->SetLastAccessTimeToNow();
const bool bResult = IFileManager::Get().SetTimeStamp( *EntryTimeStampFilename, Entry->LastAccessTime );
SortPDBCache();
}
void FPDBCache::RemovePDBCacheEntry( const FString& Directory )
{
const double StartTime = FPlatformTime::Seconds();
const FString EntryDirectory = PDBCachePath / Directory;
FPDBCacheEntryRef& Entry = PDBCacheEntries.FindChecked( Directory );
IFileManager::Get().DeleteDirectory( *EntryDirectory, true, true );
const double TotalTime = FPlatformTime::Seconds() - StartTime;
UE_LOG( LogCrashDebugHelper, Warning, TEXT( "PDB Cache entry %s removed in %.2f ms, restored %i GBs" ), *Directory, TotalTime*1000.0f, Entry->SizeGB );
PDBCacheEntries.Remove( Directory );
}
FPDBCacheEntryRef FPDBCache::FindAndTouchPDBCacheEntry( const FString& PathOrLabel )
{
FPDBCacheEntryRef CacheEntry = PDBCacheEntries.FindChecked( EscapePath( PathOrLabel ) );
TouchPDBCacheEntry( CacheEntry->Directory );
return CacheEntry;
}