Files
UnrealEngineUWP/Engine/Plugins/Runtime/HTTPChunkInstaller/Source/Private/HTTPChunkInstaller.cpp

1762 lines
54 KiB
C++
Raw Normal View History

// Copyright Epic Games, Inc. All Rights Reserved.
#include "HTTPChunkInstaller.h"
#include "HTTPChunkInstallerLog.h"
#include "ChunkInstall.h"
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
#include "Interfaces/IBuildManifest.h"
#include "BuildPatchSettings.h"
#include "BuildPatchServicesSingleton.h"
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3847469) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 3805828 by Gil.Gribb UE4 - Fixed a bug in the lock free stalling task queue and adjusted a comment. The code is not current used, so this is not actually change the way the code works. Change 3806784 by Ben.Marsh UAT: Remove code to compile UBT when using UE4Build. It should already be compiled as a dependency of UAT. Change 3807549 by Graeme.Thornton Add a cook timer around VerifyCanCookPackage. A licensee reports this taking a lot of time so it'll be good to account for it. Change 3807727 by Graeme.Thornton Unhide the text asset format experimental editor option Change 3807746 by Josh.Engebretson Remove WER from iOS platform Change 3807928 by Robert.Manuszewski When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet Change 3808221 by Steve.Robb GitHub #4307 - Made GetModulePtr() thread safe by not using GetModule() ^ I'm not convinced by how much thread-safer this is really, but it's tidier anyway. Change 3809233 by Graeme.Thornton TBA: Misc changes to text asset commandlet - Rename mode to "loadsave" - Add -outputFormat option which can be assigned "text" or "binary" - When saving binary, use a differentiated filename so that source assets aren't overwritten Change 3809518 by Ben.Marsh Remove the outdated UnrealSync automation script. Change 3809643 by Steve.Robb GitHub #4277 : fix bug; FMath::FormatIntToHumanReadable 3rd comma and negative value #jira UE-53037 Change 3809862 by Steve.Robb GitHub #3342 : [FRotator.h] Fix to DecompressAxisFromByte to be more efficient and reflect its intent accurately #jira UE-42593 Change 3811190 by Graeme.Thornton Add support for writing specific log channels to their own files Change 3811197 by Graeme.Thornton Minor updates to output formatting and timing for the text asset commandlet Change 3811257 by Robert.Manuszewski Cluster creation will now be time-sliced Change 3811565 by Steve.Robb Define out non-monolithic module functions. Change 3812561 by Steve.Robb GitHub #3886 : Enable Brace-Initialization for Declaring Variables Incorrect semi-colon search removed after discussion with author. Test added. #jira UE-48242 Change 3812864 by Steve.Robb Removal of some unproven code which was supposed to fix hot reloading BP class functions in plugins. See: https://udn.unrealengine.com/questions/376978/aitask-blueprint-nodes-disappear-when-their-module.html #jira UE-53089 Change 3820358 by Ben.Marsh PR #4358: Incredibuild use ShowAgent by default (Contributed by projectgheist) Change 3822594 by Ben.Marsh UAT: Improvements to log file handling. - Always create log files in the final location, rather than writing to a temp directory and copying in later. - Now supports -Verbose and -VeryVerbose for increasing log verbosity, rather than -Verbose=XXX. - Keep a backlog of log output before the log system is initialized, and flush it to the log file once it is. - Allow buildmachines to specify the uebp_FinalLogFolder environment variable, which is used to form paths for display. When build machines copy log files elsewhere after UAT finishes (eg. a network share), this allows error messages to display the right location. Change 3823695 by Ben.Marsh UGS: Fix issue where precompiled binaries would not be shown as available for a change until scrolling the last submitted code change into the buffer (other symptoms, like de-focussing the main window would cause it to go back to an unavailable state, since the changes buffer was shrunk). Now always queries changes up to the last change for which zipped binaries are available. Change 3823845 by Ben.Marsh UBT: Exclude C# projects for unsupported platforms when generating project files. Change 3824180 by Ben.Marsh UGS: Add an option to show changes by build machines, and move the "only show reviewed" option in there too (Options > Show Changes). #jira Change 3825777 by Steve.Robb Fix to return value of StringToBytes. Change 3825810 by Ben.Marsh UBT: Reduce length of include paths for MSVC toolchain. Change 3825822 by Robert.Manuszewski Optimized PIE lazy pointer fixup. Should be up to 8x faster now. Change 3826734 by Ben.Marsh Remove code to disable TextureFormatAndroid on Linux. It seems to be an editor dependency. Change 3827730 by Steve.Robb Try to avoid decltype(auto) if it's not supported. See: https://udn.unrealengine.com/questions/395644/build-417-with-c11-on-linux-ttuple-errors.html Change 3827745 by Steve.Robb Initializer list support for TMap. Change 3827770 by Steve.Robb GitHub #4399 : Added a CONSTEXPR qualifiers to FVariant::GetType() #jira UE-53813 Change 3829189 by Ben.Marsh UBT: Now always writes a minimal log file. By default, just contains the regular console output and any reasons why actions are outdated and needed to be executed. UAT directs child UBT instances to output logs into its own log folder, so that build machines can save them off. Change 3830444 by Steve.Robb BuildVersion and ModuleManifest moved to Core, and parsing of these files reimplemented to avoid a JSON library. This should be revisited when Core has its own JSON library. Change 3830718 by Ben.Marsh Fix incorrect group name being returned by FStatNameAndInfo::GetGroupName() for stat groups. The editor populates the viewport stats list by calling this for every registered stat and stat group (via FLevelViewportCommands::HandleNewStatGroup). The menu entry attempts to show the stat name with STAT_XXX stripped from the start as the menu item label, with the free-form text description as a tooltip. For stat groups, the it would previously just return the stat group name as "Groups" (due to the raw naming convention of "//Groups//STATGROUP_Foo//..."). Since this didn't match the expected naming convention in FLevelViewportCommands::HandleNewStat (ie. STAT_XXX or STATGROUP_XXX), it would fail to add it. When the first actual stat belonging to that group is added, it would add a menu entry for the group based on that, but the stat description no longer makes sense as a tooltip for the group. As a result, all the editor tooltips were junk. #jira UE-53845 Change 3831064 by Ben.Marsh Fix log file contention when spawning UBT recursively. Change 3832654 by Ben.Marsh UGS: Fix error panel not being selected when opened, and weird alignment/color issues on it. Change 3832680 by Ben.Marsh UGS: Fix failing to detect workspace if synced to a different stream. Seems to be a regression caused by recent P4D upgrade. Change 3832695 by Ben.Marsh UGS: Invert the options in the 'Show Changes' submenu for simplicity. Change 3833528 by Ben.Marsh UAT: Script to rewrite source files with public include paths relative to the 'Public' folder. Usage is: RebasePublicIncludePaths -UpdateDir=<Dir> [-Project=<Dir>] [-Write]. Change 3833543 by Ben.Marsh UBT: Allow targets to opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target, which has recently become a problem with larger games (due to Microsoft's compiler embedding the command line into each object file, with a maximum length of 64kb). All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs, as may individual modules. Change 3834354 by Robert.Manuszewski Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks. #jira UE-52035 Change 3834400 by Robert.Manuszewski Fixing crash on exit caused by cached archetypes not being cleaned up before static exit cleanup. #jira UE-52035 Change 3834947 by Steve.Robb USE_FORMAT_STRING_TYPE_CHECKING removed from FMsg::Logf and FMsg::Logf_Internal. Change 3835004 by Ben.Marsh Fix code that relies on dubious behavior of requiring referenced "include path only" modules having their _API macros set to be empty, even if the module is actually implemented in a separate DLL. Change 3835340 by Ben.Marsh Fix errors making installed build from directories with spaces in the name. Change 3835972 by Ben.Marsh UBT: Improved diagnostic message for targets which don't need a version file. Change 3836019 by Ben.Marsh UBT: Fix warnings caused by defining linkage macros for third party libraries. Change 3836269 by Ben.Marsh Fix message box larger than the screen height being created when a large number of modules are incompatible on startup. Change 3836543 by Ben.Marsh Enable SoundMod plugin on Linux, since it's already supported through the editor. Change 3836546 by Ben.Marsh PR #4412: fix type mismatch (Contributed by nakapon) Change 3836805 by Ben.Marsh Fix commandlet to compile marketplace plugins. Change 3836829 by Ben.Marsh UBT: Fix ability to precompile plugins from installed engine builds. Change 3837036 by Ben.Marsh UBT: Write the previous and new contents of intermediate files to the log if they change. Makes it easier to debug unexpected rebuilds. Change 3837037 by Ben.Marsh UBT: Fix engine modules having inconsistent definitions depending on whether modules are only referenced for their include paths vs being linked into a binary (due to different _API macro). Change 3837040 by Ben.Marsh UBT: Remove code that initializes members in ModuleRules and TargetRules objects before the constructor is run. This is no longer necessary, now that the backwards-compatible default constructors have been removed. Change 3837247 by Ben.Marsh UBT: Remove UELinkerFixups module, now that plugins and precompiled modules do not require hacks to force initialization (since they're linked in as object files). Encryption and signing keys are now set via macros expanded from the IMPLEMENT_PRIMARY_GAME_MODULE macro, via project-specific macros added in the TargetRules constructor. Change 3837262 by Ben.Marsh UBT: Set whether a module is an engine module or not via a default value for the rules assembly. All non-program engine and enterprise modules are created with this flag set to true; program targets and modules are now created from a different assembly that sets it to false. This removes hacks from UEBuildModule needed to adjust behavior for different module types based on the directory containing the module. Also add a bUseBackwardsCompatibleDefaults flag to the TargetRules class, also initialized to a default value from a setting passed to the RulesAssembly constructor. This controls whether modules created for the target should be configured to allow breaking changes to default settings, and is set to false for all engine targets, and true for all project targets. Change 3837343 by Ben.Marsh UBT: Remove the OverrideExecutableFileExtension target property. Change the only current use for this (the MayaLiveLinkPlugin target) to use a post build step to copy the file instead. Change 3837356 by Ben.Marsh Fix invalid character encodings. Change 3837727 by Graeme.Thornton UnrealPak: KeyGenerator: Only generate prime table when required, not all the time Change 3837823 by Ben.Marsh UBT: Output warnings and errors when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window. Change 3837831 by Graeme.Thornton UBT: When parsing crypto settings, always load legacy data first, then allow the new system to override it. Provides the same key backwards compatibility that the editor settings class gives Change 3837857 by Robert.Manuszewski PR #4404: Make FGCArrayPool singleton global instead of per-CU (Contributed by mhutch) Change 3837943 by Robert.Manuszewski PR #4405: Fix FGarbageCollectionTracer (Contributed by mhutch) Change 3838451 by Ben.Marsh UBT: Fix exceptions thrown on a background thread while caching C++ includes not being caught and logged correctly. Now captures exceptions and re-throws on the main thread. #jira UE-53996 Change 3839519 by Ben.Marsh UBT: Simplify configuring bPrecompile and bUsePrecompile settings for modules. Each rules assembly can now be configured as installed, which defaults the module rules it creates to use precompiled data. Change 3843790 by Graeme.Thornton UnrealPak: Log the size of all encrypted data Change 3844258 by Ben.Marsh Fix plugin compile failure when created via new plugin wizard. Passing -plugin on the command line is unnecessary, and is now reserved for packaging external plugins for the marketplace. Also extend the length of time that the error toast stays visible, and don't delete the plugin on failure. #jira UE-54157 Change 3845796 by Ben.Marsh Workaround for slow performance of String.EndsWith() on Mono. Change 3845823 by Ben.Marsh Fix case sensitive matching of platform names in -TargetPlatform=X argument to BuildCookRun. #jira UE-54123 Change 3845901 by Arciel.Rekman Linux: fix crash due to lambda lifetime issues (UE-54040). - The lambda goes out of scope in FBufferVisualizationMenuCommands::CreateVisualizationCommands, crashing the editor if compiled with a recent clang (5.0+). (Edigrating 3819174 to Dev-Core) Change 3846439 by Ben.Marsh Revert CL 3822742 to always call Process.WaitForExit(). The Android target platform module in the editor spawns ADB.EXE, which inherits the editor's stdout/stderr handles and forks itself. Process.WaitForExit() waits for EOF on those pipes, which never occurs because the forked process never terminates. Proper fix is probably to have the engine explicitly duplicate stdout/stderr handles for new pipes to output process, but too risky before copying up to Main. Change 3816608 by Ben.Marsh UBT: Use DirectoryReference objects for all include paths. Change 3816954 by Ben.Marsh UBT: Remove bIncludeDependentLibrariesInLibrary option. This is not widely supported by platform toolchains, and is not used anywhere. Change 3816986 by Ben.Marsh UBT: Remove UEBuildBinaryConfig; UEBuildBinary objects are now just created directly. Change 3816991 by Ben.Marsh UBT: Deprecate PlatformSpecificDynamicallyLoadedModules. We no longer have any special behavior for these modules. Change 3823090 by Ben.Marsh UAT: Improve logging for child UAT instances. - Calling RunUAT now requires an identifier for prefixing into the parent log, which is also used to determine the name of the log folder. - Stdout is no longer written to its own output file, since it's written to the parent stdout, the parent log file, and the child log file anyway. - Log folders for child UAT instances are left intact, rather than being copied to the parent folder. The derived names for the copied names were confusing and hard to read. - Output from UAT is no longer returned as a string. It should not be parsed anyway (but may be huge!). ProcessResult now supports running without capturing output. Change 3826082 by Ben.Marsh UBT: Add a check to make sure that all modules that are precompiled are correctly marked to enable it, even if they are part of the build target. Change 3827025 by Ben.Marsh UBT: Move the compile output directory into a property on the module, and explicitly pass it to the toolchain when compiling. Change 3829927 by James.Hopkin Made HTTP interface const correct Change 3833533 by Ben.Marsh Rewrite engine source files to base include paths relative to the "Public" directory. This allows reducing the number of public include paths that have to be added for engine modules. Change 3835826 by Ben.Marsh UBT: Precompiled targets now generate a separate manifest for each precompiled module, rather than adding object files to a library. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced. Change 3835969 by Ben.Marsh UBT: Fix cases where text is being written directly to the console rather than via logging functions. Change 3837777 by Steve.Robb Format string type checking added to FOutputDevice::Logf. Fixes for those. Change 3838569 by Steve.Robb Algo moved up a folder. [CL 3847482 by Ben Marsh in Main branch]
2018-01-20 11:19:29 -05:00
#include "Templates/UniquePtr.h"
#include "LocalTitleFile.h"
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3847469) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 3805828 by Gil.Gribb UE4 - Fixed a bug in the lock free stalling task queue and adjusted a comment. The code is not current used, so this is not actually change the way the code works. Change 3806784 by Ben.Marsh UAT: Remove code to compile UBT when using UE4Build. It should already be compiled as a dependency of UAT. Change 3807549 by Graeme.Thornton Add a cook timer around VerifyCanCookPackage. A licensee reports this taking a lot of time so it'll be good to account for it. Change 3807727 by Graeme.Thornton Unhide the text asset format experimental editor option Change 3807746 by Josh.Engebretson Remove WER from iOS platform Change 3807928 by Robert.Manuszewski When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet Change 3808221 by Steve.Robb GitHub #4307 - Made GetModulePtr() thread safe by not using GetModule() ^ I'm not convinced by how much thread-safer this is really, but it's tidier anyway. Change 3809233 by Graeme.Thornton TBA: Misc changes to text asset commandlet - Rename mode to "loadsave" - Add -outputFormat option which can be assigned "text" or "binary" - When saving binary, use a differentiated filename so that source assets aren't overwritten Change 3809518 by Ben.Marsh Remove the outdated UnrealSync automation script. Change 3809643 by Steve.Robb GitHub #4277 : fix bug; FMath::FormatIntToHumanReadable 3rd comma and negative value #jira UE-53037 Change 3809862 by Steve.Robb GitHub #3342 : [FRotator.h] Fix to DecompressAxisFromByte to be more efficient and reflect its intent accurately #jira UE-42593 Change 3811190 by Graeme.Thornton Add support for writing specific log channels to their own files Change 3811197 by Graeme.Thornton Minor updates to output formatting and timing for the text asset commandlet Change 3811257 by Robert.Manuszewski Cluster creation will now be time-sliced Change 3811565 by Steve.Robb Define out non-monolithic module functions. Change 3812561 by Steve.Robb GitHub #3886 : Enable Brace-Initialization for Declaring Variables Incorrect semi-colon search removed after discussion with author. Test added. #jira UE-48242 Change 3812864 by Steve.Robb Removal of some unproven code which was supposed to fix hot reloading BP class functions in plugins. See: https://udn.unrealengine.com/questions/376978/aitask-blueprint-nodes-disappear-when-their-module.html #jira UE-53089 Change 3820358 by Ben.Marsh PR #4358: Incredibuild use ShowAgent by default (Contributed by projectgheist) Change 3822594 by Ben.Marsh UAT: Improvements to log file handling. - Always create log files in the final location, rather than writing to a temp directory and copying in later. - Now supports -Verbose and -VeryVerbose for increasing log verbosity, rather than -Verbose=XXX. - Keep a backlog of log output before the log system is initialized, and flush it to the log file once it is. - Allow buildmachines to specify the uebp_FinalLogFolder environment variable, which is used to form paths for display. When build machines copy log files elsewhere after UAT finishes (eg. a network share), this allows error messages to display the right location. Change 3823695 by Ben.Marsh UGS: Fix issue where precompiled binaries would not be shown as available for a change until scrolling the last submitted code change into the buffer (other symptoms, like de-focussing the main window would cause it to go back to an unavailable state, since the changes buffer was shrunk). Now always queries changes up to the last change for which zipped binaries are available. Change 3823845 by Ben.Marsh UBT: Exclude C# projects for unsupported platforms when generating project files. Change 3824180 by Ben.Marsh UGS: Add an option to show changes by build machines, and move the "only show reviewed" option in there too (Options > Show Changes). #jira Change 3825777 by Steve.Robb Fix to return value of StringToBytes. Change 3825810 by Ben.Marsh UBT: Reduce length of include paths for MSVC toolchain. Change 3825822 by Robert.Manuszewski Optimized PIE lazy pointer fixup. Should be up to 8x faster now. Change 3826734 by Ben.Marsh Remove code to disable TextureFormatAndroid on Linux. It seems to be an editor dependency. Change 3827730 by Steve.Robb Try to avoid decltype(auto) if it's not supported. See: https://udn.unrealengine.com/questions/395644/build-417-with-c11-on-linux-ttuple-errors.html Change 3827745 by Steve.Robb Initializer list support for TMap. Change 3827770 by Steve.Robb GitHub #4399 : Added a CONSTEXPR qualifiers to FVariant::GetType() #jira UE-53813 Change 3829189 by Ben.Marsh UBT: Now always writes a minimal log file. By default, just contains the regular console output and any reasons why actions are outdated and needed to be executed. UAT directs child UBT instances to output logs into its own log folder, so that build machines can save them off. Change 3830444 by Steve.Robb BuildVersion and ModuleManifest moved to Core, and parsing of these files reimplemented to avoid a JSON library. This should be revisited when Core has its own JSON library. Change 3830718 by Ben.Marsh Fix incorrect group name being returned by FStatNameAndInfo::GetGroupName() for stat groups. The editor populates the viewport stats list by calling this for every registered stat and stat group (via FLevelViewportCommands::HandleNewStatGroup). The menu entry attempts to show the stat name with STAT_XXX stripped from the start as the menu item label, with the free-form text description as a tooltip. For stat groups, the it would previously just return the stat group name as "Groups" (due to the raw naming convention of "//Groups//STATGROUP_Foo//..."). Since this didn't match the expected naming convention in FLevelViewportCommands::HandleNewStat (ie. STAT_XXX or STATGROUP_XXX), it would fail to add it. When the first actual stat belonging to that group is added, it would add a menu entry for the group based on that, but the stat description no longer makes sense as a tooltip for the group. As a result, all the editor tooltips were junk. #jira UE-53845 Change 3831064 by Ben.Marsh Fix log file contention when spawning UBT recursively. Change 3832654 by Ben.Marsh UGS: Fix error panel not being selected when opened, and weird alignment/color issues on it. Change 3832680 by Ben.Marsh UGS: Fix failing to detect workspace if synced to a different stream. Seems to be a regression caused by recent P4D upgrade. Change 3832695 by Ben.Marsh UGS: Invert the options in the 'Show Changes' submenu for simplicity. Change 3833528 by Ben.Marsh UAT: Script to rewrite source files with public include paths relative to the 'Public' folder. Usage is: RebasePublicIncludePaths -UpdateDir=<Dir> [-Project=<Dir>] [-Write]. Change 3833543 by Ben.Marsh UBT: Allow targets to opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target, which has recently become a problem with larger games (due to Microsoft's compiler embedding the command line into each object file, with a maximum length of 64kb). All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs, as may individual modules. Change 3834354 by Robert.Manuszewski Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks. #jira UE-52035 Change 3834400 by Robert.Manuszewski Fixing crash on exit caused by cached archetypes not being cleaned up before static exit cleanup. #jira UE-52035 Change 3834947 by Steve.Robb USE_FORMAT_STRING_TYPE_CHECKING removed from FMsg::Logf and FMsg::Logf_Internal. Change 3835004 by Ben.Marsh Fix code that relies on dubious behavior of requiring referenced "include path only" modules having their _API macros set to be empty, even if the module is actually implemented in a separate DLL. Change 3835340 by Ben.Marsh Fix errors making installed build from directories with spaces in the name. Change 3835972 by Ben.Marsh UBT: Improved diagnostic message for targets which don't need a version file. Change 3836019 by Ben.Marsh UBT: Fix warnings caused by defining linkage macros for third party libraries. Change 3836269 by Ben.Marsh Fix message box larger than the screen height being created when a large number of modules are incompatible on startup. Change 3836543 by Ben.Marsh Enable SoundMod plugin on Linux, since it's already supported through the editor. Change 3836546 by Ben.Marsh PR #4412: fix type mismatch (Contributed by nakapon) Change 3836805 by Ben.Marsh Fix commandlet to compile marketplace plugins. Change 3836829 by Ben.Marsh UBT: Fix ability to precompile plugins from installed engine builds. Change 3837036 by Ben.Marsh UBT: Write the previous and new contents of intermediate files to the log if they change. Makes it easier to debug unexpected rebuilds. Change 3837037 by Ben.Marsh UBT: Fix engine modules having inconsistent definitions depending on whether modules are only referenced for their include paths vs being linked into a binary (due to different _API macro). Change 3837040 by Ben.Marsh UBT: Remove code that initializes members in ModuleRules and TargetRules objects before the constructor is run. This is no longer necessary, now that the backwards-compatible default constructors have been removed. Change 3837247 by Ben.Marsh UBT: Remove UELinkerFixups module, now that plugins and precompiled modules do not require hacks to force initialization (since they're linked in as object files). Encryption and signing keys are now set via macros expanded from the IMPLEMENT_PRIMARY_GAME_MODULE macro, via project-specific macros added in the TargetRules constructor. Change 3837262 by Ben.Marsh UBT: Set whether a module is an engine module or not via a default value for the rules assembly. All non-program engine and enterprise modules are created with this flag set to true; program targets and modules are now created from a different assembly that sets it to false. This removes hacks from UEBuildModule needed to adjust behavior for different module types based on the directory containing the module. Also add a bUseBackwardsCompatibleDefaults flag to the TargetRules class, also initialized to a default value from a setting passed to the RulesAssembly constructor. This controls whether modules created for the target should be configured to allow breaking changes to default settings, and is set to false for all engine targets, and true for all project targets. Change 3837343 by Ben.Marsh UBT: Remove the OverrideExecutableFileExtension target property. Change the only current use for this (the MayaLiveLinkPlugin target) to use a post build step to copy the file instead. Change 3837356 by Ben.Marsh Fix invalid character encodings. Change 3837727 by Graeme.Thornton UnrealPak: KeyGenerator: Only generate prime table when required, not all the time Change 3837823 by Ben.Marsh UBT: Output warnings and errors when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window. Change 3837831 by Graeme.Thornton UBT: When parsing crypto settings, always load legacy data first, then allow the new system to override it. Provides the same key backwards compatibility that the editor settings class gives Change 3837857 by Robert.Manuszewski PR #4404: Make FGCArrayPool singleton global instead of per-CU (Contributed by mhutch) Change 3837943 by Robert.Manuszewski PR #4405: Fix FGarbageCollectionTracer (Contributed by mhutch) Change 3838451 by Ben.Marsh UBT: Fix exceptions thrown on a background thread while caching C++ includes not being caught and logged correctly. Now captures exceptions and re-throws on the main thread. #jira UE-53996 Change 3839519 by Ben.Marsh UBT: Simplify configuring bPrecompile and bUsePrecompile settings for modules. Each rules assembly can now be configured as installed, which defaults the module rules it creates to use precompiled data. Change 3843790 by Graeme.Thornton UnrealPak: Log the size of all encrypted data Change 3844258 by Ben.Marsh Fix plugin compile failure when created via new plugin wizard. Passing -plugin on the command line is unnecessary, and is now reserved for packaging external plugins for the marketplace. Also extend the length of time that the error toast stays visible, and don't delete the plugin on failure. #jira UE-54157 Change 3845796 by Ben.Marsh Workaround for slow performance of String.EndsWith() on Mono. Change 3845823 by Ben.Marsh Fix case sensitive matching of platform names in -TargetPlatform=X argument to BuildCookRun. #jira UE-54123 Change 3845901 by Arciel.Rekman Linux: fix crash due to lambda lifetime issues (UE-54040). - The lambda goes out of scope in FBufferVisualizationMenuCommands::CreateVisualizationCommands, crashing the editor if compiled with a recent clang (5.0+). (Edigrating 3819174 to Dev-Core) Change 3846439 by Ben.Marsh Revert CL 3822742 to always call Process.WaitForExit(). The Android target platform module in the editor spawns ADB.EXE, which inherits the editor's stdout/stderr handles and forks itself. Process.WaitForExit() waits for EOF on those pipes, which never occurs because the forked process never terminates. Proper fix is probably to have the engine explicitly duplicate stdout/stderr handles for new pipes to output process, but too risky before copying up to Main. Change 3816608 by Ben.Marsh UBT: Use DirectoryReference objects for all include paths. Change 3816954 by Ben.Marsh UBT: Remove bIncludeDependentLibrariesInLibrary option. This is not widely supported by platform toolchains, and is not used anywhere. Change 3816986 by Ben.Marsh UBT: Remove UEBuildBinaryConfig; UEBuildBinary objects are now just created directly. Change 3816991 by Ben.Marsh UBT: Deprecate PlatformSpecificDynamicallyLoadedModules. We no longer have any special behavior for these modules. Change 3823090 by Ben.Marsh UAT: Improve logging for child UAT instances. - Calling RunUAT now requires an identifier for prefixing into the parent log, which is also used to determine the name of the log folder. - Stdout is no longer written to its own output file, since it's written to the parent stdout, the parent log file, and the child log file anyway. - Log folders for child UAT instances are left intact, rather than being copied to the parent folder. The derived names for the copied names were confusing and hard to read. - Output from UAT is no longer returned as a string. It should not be parsed anyway (but may be huge!). ProcessResult now supports running without capturing output. Change 3826082 by Ben.Marsh UBT: Add a check to make sure that all modules that are precompiled are correctly marked to enable it, even if they are part of the build target. Change 3827025 by Ben.Marsh UBT: Move the compile output directory into a property on the module, and explicitly pass it to the toolchain when compiling. Change 3829927 by James.Hopkin Made HTTP interface const correct Change 3833533 by Ben.Marsh Rewrite engine source files to base include paths relative to the "Public" directory. This allows reducing the number of public include paths that have to be added for engine modules. Change 3835826 by Ben.Marsh UBT: Precompiled targets now generate a separate manifest for each precompiled module, rather than adding object files to a library. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced. Change 3835969 by Ben.Marsh UBT: Fix cases where text is being written directly to the console rather than via logging functions. Change 3837777 by Steve.Robb Format string type checking added to FOutputDevice::Logf. Fixes for those. Change 3838569 by Steve.Robb Algo moved up a folder. [CL 3847482 by Ben Marsh in Main branch]
2018-01-20 11:19:29 -05:00
#include "Misc/SecureHash.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
#include "HttpModule.h"
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3847469) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 3805828 by Gil.Gribb UE4 - Fixed a bug in the lock free stalling task queue and adjusted a comment. The code is not current used, so this is not actually change the way the code works. Change 3806784 by Ben.Marsh UAT: Remove code to compile UBT when using UE4Build. It should already be compiled as a dependency of UAT. Change 3807549 by Graeme.Thornton Add a cook timer around VerifyCanCookPackage. A licensee reports this taking a lot of time so it'll be good to account for it. Change 3807727 by Graeme.Thornton Unhide the text asset format experimental editor option Change 3807746 by Josh.Engebretson Remove WER from iOS platform Change 3807928 by Robert.Manuszewski When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet Change 3808221 by Steve.Robb GitHub #4307 - Made GetModulePtr() thread safe by not using GetModule() ^ I'm not convinced by how much thread-safer this is really, but it's tidier anyway. Change 3809233 by Graeme.Thornton TBA: Misc changes to text asset commandlet - Rename mode to "loadsave" - Add -outputFormat option which can be assigned "text" or "binary" - When saving binary, use a differentiated filename so that source assets aren't overwritten Change 3809518 by Ben.Marsh Remove the outdated UnrealSync automation script. Change 3809643 by Steve.Robb GitHub #4277 : fix bug; FMath::FormatIntToHumanReadable 3rd comma and negative value #jira UE-53037 Change 3809862 by Steve.Robb GitHub #3342 : [FRotator.h] Fix to DecompressAxisFromByte to be more efficient and reflect its intent accurately #jira UE-42593 Change 3811190 by Graeme.Thornton Add support for writing specific log channels to their own files Change 3811197 by Graeme.Thornton Minor updates to output formatting and timing for the text asset commandlet Change 3811257 by Robert.Manuszewski Cluster creation will now be time-sliced Change 3811565 by Steve.Robb Define out non-monolithic module functions. Change 3812561 by Steve.Robb GitHub #3886 : Enable Brace-Initialization for Declaring Variables Incorrect semi-colon search removed after discussion with author. Test added. #jira UE-48242 Change 3812864 by Steve.Robb Removal of some unproven code which was supposed to fix hot reloading BP class functions in plugins. See: https://udn.unrealengine.com/questions/376978/aitask-blueprint-nodes-disappear-when-their-module.html #jira UE-53089 Change 3820358 by Ben.Marsh PR #4358: Incredibuild use ShowAgent by default (Contributed by projectgheist) Change 3822594 by Ben.Marsh UAT: Improvements to log file handling. - Always create log files in the final location, rather than writing to a temp directory and copying in later. - Now supports -Verbose and -VeryVerbose for increasing log verbosity, rather than -Verbose=XXX. - Keep a backlog of log output before the log system is initialized, and flush it to the log file once it is. - Allow buildmachines to specify the uebp_FinalLogFolder environment variable, which is used to form paths for display. When build machines copy log files elsewhere after UAT finishes (eg. a network share), this allows error messages to display the right location. Change 3823695 by Ben.Marsh UGS: Fix issue where precompiled binaries would not be shown as available for a change until scrolling the last submitted code change into the buffer (other symptoms, like de-focussing the main window would cause it to go back to an unavailable state, since the changes buffer was shrunk). Now always queries changes up to the last change for which zipped binaries are available. Change 3823845 by Ben.Marsh UBT: Exclude C# projects for unsupported platforms when generating project files. Change 3824180 by Ben.Marsh UGS: Add an option to show changes by build machines, and move the "only show reviewed" option in there too (Options > Show Changes). #jira Change 3825777 by Steve.Robb Fix to return value of StringToBytes. Change 3825810 by Ben.Marsh UBT: Reduce length of include paths for MSVC toolchain. Change 3825822 by Robert.Manuszewski Optimized PIE lazy pointer fixup. Should be up to 8x faster now. Change 3826734 by Ben.Marsh Remove code to disable TextureFormatAndroid on Linux. It seems to be an editor dependency. Change 3827730 by Steve.Robb Try to avoid decltype(auto) if it's not supported. See: https://udn.unrealengine.com/questions/395644/build-417-with-c11-on-linux-ttuple-errors.html Change 3827745 by Steve.Robb Initializer list support for TMap. Change 3827770 by Steve.Robb GitHub #4399 : Added a CONSTEXPR qualifiers to FVariant::GetType() #jira UE-53813 Change 3829189 by Ben.Marsh UBT: Now always writes a minimal log file. By default, just contains the regular console output and any reasons why actions are outdated and needed to be executed. UAT directs child UBT instances to output logs into its own log folder, so that build machines can save them off. Change 3830444 by Steve.Robb BuildVersion and ModuleManifest moved to Core, and parsing of these files reimplemented to avoid a JSON library. This should be revisited when Core has its own JSON library. Change 3830718 by Ben.Marsh Fix incorrect group name being returned by FStatNameAndInfo::GetGroupName() for stat groups. The editor populates the viewport stats list by calling this for every registered stat and stat group (via FLevelViewportCommands::HandleNewStatGroup). The menu entry attempts to show the stat name with STAT_XXX stripped from the start as the menu item label, with the free-form text description as a tooltip. For stat groups, the it would previously just return the stat group name as "Groups" (due to the raw naming convention of "//Groups//STATGROUP_Foo//..."). Since this didn't match the expected naming convention in FLevelViewportCommands::HandleNewStat (ie. STAT_XXX or STATGROUP_XXX), it would fail to add it. When the first actual stat belonging to that group is added, it would add a menu entry for the group based on that, but the stat description no longer makes sense as a tooltip for the group. As a result, all the editor tooltips were junk. #jira UE-53845 Change 3831064 by Ben.Marsh Fix log file contention when spawning UBT recursively. Change 3832654 by Ben.Marsh UGS: Fix error panel not being selected when opened, and weird alignment/color issues on it. Change 3832680 by Ben.Marsh UGS: Fix failing to detect workspace if synced to a different stream. Seems to be a regression caused by recent P4D upgrade. Change 3832695 by Ben.Marsh UGS: Invert the options in the 'Show Changes' submenu for simplicity. Change 3833528 by Ben.Marsh UAT: Script to rewrite source files with public include paths relative to the 'Public' folder. Usage is: RebasePublicIncludePaths -UpdateDir=<Dir> [-Project=<Dir>] [-Write]. Change 3833543 by Ben.Marsh UBT: Allow targets to opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target, which has recently become a problem with larger games (due to Microsoft's compiler embedding the command line into each object file, with a maximum length of 64kb). All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs, as may individual modules. Change 3834354 by Robert.Manuszewski Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks. #jira UE-52035 Change 3834400 by Robert.Manuszewski Fixing crash on exit caused by cached archetypes not being cleaned up before static exit cleanup. #jira UE-52035 Change 3834947 by Steve.Robb USE_FORMAT_STRING_TYPE_CHECKING removed from FMsg::Logf and FMsg::Logf_Internal. Change 3835004 by Ben.Marsh Fix code that relies on dubious behavior of requiring referenced "include path only" modules having their _API macros set to be empty, even if the module is actually implemented in a separate DLL. Change 3835340 by Ben.Marsh Fix errors making installed build from directories with spaces in the name. Change 3835972 by Ben.Marsh UBT: Improved diagnostic message for targets which don't need a version file. Change 3836019 by Ben.Marsh UBT: Fix warnings caused by defining linkage macros for third party libraries. Change 3836269 by Ben.Marsh Fix message box larger than the screen height being created when a large number of modules are incompatible on startup. Change 3836543 by Ben.Marsh Enable SoundMod plugin on Linux, since it's already supported through the editor. Change 3836546 by Ben.Marsh PR #4412: fix type mismatch (Contributed by nakapon) Change 3836805 by Ben.Marsh Fix commandlet to compile marketplace plugins. Change 3836829 by Ben.Marsh UBT: Fix ability to precompile plugins from installed engine builds. Change 3837036 by Ben.Marsh UBT: Write the previous and new contents of intermediate files to the log if they change. Makes it easier to debug unexpected rebuilds. Change 3837037 by Ben.Marsh UBT: Fix engine modules having inconsistent definitions depending on whether modules are only referenced for their include paths vs being linked into a binary (due to different _API macro). Change 3837040 by Ben.Marsh UBT: Remove code that initializes members in ModuleRules and TargetRules objects before the constructor is run. This is no longer necessary, now that the backwards-compatible default constructors have been removed. Change 3837247 by Ben.Marsh UBT: Remove UELinkerFixups module, now that plugins and precompiled modules do not require hacks to force initialization (since they're linked in as object files). Encryption and signing keys are now set via macros expanded from the IMPLEMENT_PRIMARY_GAME_MODULE macro, via project-specific macros added in the TargetRules constructor. Change 3837262 by Ben.Marsh UBT: Set whether a module is an engine module or not via a default value for the rules assembly. All non-program engine and enterprise modules are created with this flag set to true; program targets and modules are now created from a different assembly that sets it to false. This removes hacks from UEBuildModule needed to adjust behavior for different module types based on the directory containing the module. Also add a bUseBackwardsCompatibleDefaults flag to the TargetRules class, also initialized to a default value from a setting passed to the RulesAssembly constructor. This controls whether modules created for the target should be configured to allow breaking changes to default settings, and is set to false for all engine targets, and true for all project targets. Change 3837343 by Ben.Marsh UBT: Remove the OverrideExecutableFileExtension target property. Change the only current use for this (the MayaLiveLinkPlugin target) to use a post build step to copy the file instead. Change 3837356 by Ben.Marsh Fix invalid character encodings. Change 3837727 by Graeme.Thornton UnrealPak: KeyGenerator: Only generate prime table when required, not all the time Change 3837823 by Ben.Marsh UBT: Output warnings and errors when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window. Change 3837831 by Graeme.Thornton UBT: When parsing crypto settings, always load legacy data first, then allow the new system to override it. Provides the same key backwards compatibility that the editor settings class gives Change 3837857 by Robert.Manuszewski PR #4404: Make FGCArrayPool singleton global instead of per-CU (Contributed by mhutch) Change 3837943 by Robert.Manuszewski PR #4405: Fix FGarbageCollectionTracer (Contributed by mhutch) Change 3838451 by Ben.Marsh UBT: Fix exceptions thrown on a background thread while caching C++ includes not being caught and logged correctly. Now captures exceptions and re-throws on the main thread. #jira UE-53996 Change 3839519 by Ben.Marsh UBT: Simplify configuring bPrecompile and bUsePrecompile settings for modules. Each rules assembly can now be configured as installed, which defaults the module rules it creates to use precompiled data. Change 3843790 by Graeme.Thornton UnrealPak: Log the size of all encrypted data Change 3844258 by Ben.Marsh Fix plugin compile failure when created via new plugin wizard. Passing -plugin on the command line is unnecessary, and is now reserved for packaging external plugins for the marketplace. Also extend the length of time that the error toast stays visible, and don't delete the plugin on failure. #jira UE-54157 Change 3845796 by Ben.Marsh Workaround for slow performance of String.EndsWith() on Mono. Change 3845823 by Ben.Marsh Fix case sensitive matching of platform names in -TargetPlatform=X argument to BuildCookRun. #jira UE-54123 Change 3845901 by Arciel.Rekman Linux: fix crash due to lambda lifetime issues (UE-54040). - The lambda goes out of scope in FBufferVisualizationMenuCommands::CreateVisualizationCommands, crashing the editor if compiled with a recent clang (5.0+). (Edigrating 3819174 to Dev-Core) Change 3846439 by Ben.Marsh Revert CL 3822742 to always call Process.WaitForExit(). The Android target platform module in the editor spawns ADB.EXE, which inherits the editor's stdout/stderr handles and forks itself. Process.WaitForExit() waits for EOF on those pipes, which never occurs because the forked process never terminates. Proper fix is probably to have the engine explicitly duplicate stdout/stderr handles for new pipes to output process, but too risky before copying up to Main. Change 3816608 by Ben.Marsh UBT: Use DirectoryReference objects for all include paths. Change 3816954 by Ben.Marsh UBT: Remove bIncludeDependentLibrariesInLibrary option. This is not widely supported by platform toolchains, and is not used anywhere. Change 3816986 by Ben.Marsh UBT: Remove UEBuildBinaryConfig; UEBuildBinary objects are now just created directly. Change 3816991 by Ben.Marsh UBT: Deprecate PlatformSpecificDynamicallyLoadedModules. We no longer have any special behavior for these modules. Change 3823090 by Ben.Marsh UAT: Improve logging for child UAT instances. - Calling RunUAT now requires an identifier for prefixing into the parent log, which is also used to determine the name of the log folder. - Stdout is no longer written to its own output file, since it's written to the parent stdout, the parent log file, and the child log file anyway. - Log folders for child UAT instances are left intact, rather than being copied to the parent folder. The derived names for the copied names were confusing and hard to read. - Output from UAT is no longer returned as a string. It should not be parsed anyway (but may be huge!). ProcessResult now supports running without capturing output. Change 3826082 by Ben.Marsh UBT: Add a check to make sure that all modules that are precompiled are correctly marked to enable it, even if they are part of the build target. Change 3827025 by Ben.Marsh UBT: Move the compile output directory into a property on the module, and explicitly pass it to the toolchain when compiling. Change 3829927 by James.Hopkin Made HTTP interface const correct Change 3833533 by Ben.Marsh Rewrite engine source files to base include paths relative to the "Public" directory. This allows reducing the number of public include paths that have to be added for engine modules. Change 3835826 by Ben.Marsh UBT: Precompiled targets now generate a separate manifest for each precompiled module, rather than adding object files to a library. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced. Change 3835969 by Ben.Marsh UBT: Fix cases where text is being written directly to the console rather than via logging functions. Change 3837777 by Steve.Robb Format string type checking added to FOutputDevice::Logf. Fixes for those. Change 3838569 by Steve.Robb Algo moved up a folder. [CL 3847482 by Ben Marsh in Main branch]
2018-01-20 11:19:29 -05:00
#include "Dom/JsonObject.h"
#include "Serialization/JsonReader.h"
#include "Serialization/JsonSerializer.h"
#include "HAL/ThreadSafeCounter64.h"
#include "Misc/ConfigCacheIni.h"
#include "Misc/FileHelper.h"
#include "HAL/RunnableThread.h"
#include "Misc/CommandLine.h"
#include "Modules/ModuleManager.h"
#include "Stats/Stats.h"
#define LOCTEXT_NAMESPACE "HTTPChunkInstaller"
// helper to grab the installer service
static IBuildPatchServicesModule* GetBuildPatchServices()
{
static IBuildPatchServicesModule* BuildPatchServices = nullptr;
if (BuildPatchServices == nullptr)
{
BuildPatchServices = &FModuleManager::LoadModuleChecked<IBuildPatchServicesModule>(TEXT("BuildPatchServices"));
}
return BuildPatchServices;
}
const FName NAME_SHA1(TEXT("SHA1"));
const FName NAME_SHA256(TEXT("SHA256"));
class FTitleFileHttpAsyncLoadAndVerify :
public FNonAbandonableTask
{
public:
/** File data loaded for the async read */
TArray<uint8> FileData;
/** Amount of data read from the file to be owned/referenced by the game thread */
FThreadSafeCounter64* BytesRead;
/** The original name of the file being read */
const FString OriginalFileName;
/** The name of the file being read off of disk */
const FString FileName;
/** The hash value the backend said it should have */
const FString ExpectedHash;
/** The hash type SHA1 or SHA256 right now */
const FName HashType;
/** Whether the hashes matched */
bool bHashesMatched;
/** Initializes the variables needed to load and verify the data */
FTitleFileHttpAsyncLoadAndVerify(const FString& InOriginalFileName, const FString& InFileName, const FString& InExpectedHash, const FName InHashType, FThreadSafeCounter64* InBytesReadCounter) :
BytesRead(InBytesReadCounter),
OriginalFileName(InOriginalFileName),
FileName(InFileName),
ExpectedHash(InExpectedHash),
HashType(InHashType),
bHashesMatched(false)
{
}
/**
* Loads and hashes the file data. Empties the data if the hash check fails
*/
void DoWork()
{
// load file from disk
bool bLoadedFile = false;
FArchive* Reader = IFileManager::Get().CreateFileReader(*FileName, FILEREAD_Silent);
if (Reader)
{
int64 SizeToRead = Reader->TotalSize();
FileData.Reset(SizeToRead);
FileData.AddUninitialized(SizeToRead);
uint8* FileDataPtr = FileData.GetData();
static const int64 ChunkSize = 100 * 1024;
int64 TotalBytesRead = 0;
while (SizeToRead > 0)
{
int64 Val = FMath::Min(SizeToRead, ChunkSize);
Reader->Serialize(FileDataPtr + TotalBytesRead, Val);
BytesRead->Add(Val);
TotalBytesRead += Val;
SizeToRead -= Val;
}
ensure(SizeToRead == 0 && Reader->TotalSize() == TotalBytesRead);
bLoadedFile = Reader->Close();
delete Reader;
}
// verify hash of file if it exists
if (bLoadedFile)
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("ReadFile request. Local file read from cache =%s"), *FileName);
if (HashType == NAME_SHA1)
{
bHashesMatched = IsValidSHA1(ExpectedHash, FileData);
}
else if (HashType == NAME_SHA256)
{
bHashesMatched = IsValidSHA256(ExpectedHash, FileData);
}
}
else
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("Local file (%s) not cached locally"), *FileName);
}
if (!bHashesMatched)
{
// Empty local that was loaded
FileData.Empty();
}
}
FORCEINLINE TStatId GetStatId() const
{
RETURN_QUICK_DECLARE_CYCLE_STAT(FTitleFileHttpAsyncLoadAndVerify, STATGROUP_ThreadPoolAsyncTasks);
}
private:
/** Validates that a buffer matches the same signature as was specified */
bool IsValidSHA1(const FString& Hash, const TArray<uint8>& Source) const
{
uint8 LocalHash[20];
FSHA1::HashBuffer(Source.GetData(), Source.Num(), LocalHash);
// concatenate 20 bye SHA1 hash to string
FString LocalHashStr;
for (int Idx = 0; Idx < 20; Idx++)
{
LocalHashStr += FString::Printf(TEXT("%02x"), LocalHash[Idx]);
}
return Hash == LocalHashStr;
}
bool IsValidSHA256(const FString& Hash, const TArray<uint8>& Source) const
{
FSHA256Signature Signature;
if (FPlatformMisc::GetSHA256Signature(Source.GetData(), Source.Num(), Signature))
{
return Signature.ToString() == Hash;
}
return false;
}
};
// helper class for an HTTP Online Title File
class FOnlineTitleFileHttp : public ICloudTitleFile
{
public:
/**
* Constructor
*
* @param InSubsystem mcp subsystem being used
*/
FOnlineTitleFileHttp(const FString& InBaseUrl)
: EnumerateFilesUrl(TEXT(""))
, BaseUrl(InBaseUrl)
{
GConfig->GetString(TEXT("HTTPOnlineTitleFile"), TEXT("BaseUrl"), BaseUrl, GEngineIni);
GConfig->GetString(TEXT("HTTPOnlineTitleFile"), TEXT("EnumerateFilesUrl"), EnumerateFilesUrl, GEngineIni);
bCacheFiles = true;
bPlatformSupportsSHA256 = false;
}
/**
* Destructor
*/
virtual ~FOnlineTitleFileHttp()
{}
/**
* Copies the file data into the specified buffer for the specified file
*
* @param FileName the name of the file to read
* @param FileContents the out buffer to copy the data into
*
* @return true if the data was copied, false otherwise
*/
virtual bool GetFileContents(const FString& FileName, TArray<uint8>& FileContents) override
{
const TArray<FCloudEntry>* FilesPtr = &Files;
if (FilesPtr != NULL)
{
for (TArray<FCloudEntry>::TConstIterator It(*FilesPtr); It; ++It)
{
if (It->FileName == FileName)
{
FileContents = It->Data;
return true;
}
}
}
return false;
}
/**
* Empties the set of downloaded files if possible (no async tasks outstanding)
*
* @return true if they could be deleted, false if they could not
*/
virtual bool ClearFiles() override
{
for (int Idx = 0; Idx < Files.Num(); Idx++)
{
if (Files[Idx].AsyncState == ECloudAsyncTaskState::InProgress)
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Cant clear files. Pending file op for %s"), *Files[Idx].FileName);
return false;
}
}
// remove all cached file entries
Files.Empty();
return true;
}
/**
* Empties the cached data for this file if it is not being downloaded currently
*
* @param FileName the name of the file to remove from the cache
*
* @return true if it could be deleted, false if it could not
*/
virtual bool ClearFile(const FString& FileName) override
{
for (int Idx = 0; Idx < Files.Num(); Idx++)
{
if (Files[Idx].FileName == FileName)
{
if (Files[Idx].AsyncState == ECloudAsyncTaskState::InProgress)
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Cant clear file. Pending file op for %s"), *Files[Idx].FileName);
return false;
}
else
{
Files.RemoveAt(Idx);
return true;
}
}
}
return false;
}
/**
* Delete cached files on disk
*
* @param bSkipEnumerated if true then only non-enumerated files are deleted
*/
virtual void DeleteCachedFiles(bool bSkipEnumerated) override
{
TArray<FString> CachedFiles;
IFileManager::Get().FindFiles(CachedFiles, *(GetLocalCachePath() / TEXT("*")), true, false);
for (auto CachedFile : CachedFiles)
{
bool bSkip = bSkipEnumerated && GetCloudFileHeader(CachedFile);
if (!bSkip)
{
IFileManager::Get().Delete(*GetLocalFilePath(CachedFile), false, true);
}
}
}
/**
* Requests a list of available files from the network store
*
* @return true if the request has started, false if not
*/
virtual bool EnumerateFiles(const FCloudPagedQuery& Page = FCloudPagedQuery()) override
{
FString ErrorStr;
bool bStarted = false;
// Make sure an enumeration request is not currently pending
if (EnumerateFilesRequests.Num() > 0)
{
ErrorStr = TEXT("Request already in progress.");
}
else
{
// Create the Http request and add to pending request list
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest();
EnumerateFilesRequests.Add(HttpRequest, Page);
HttpRequest->OnProcessRequestComplete().BindRaw(this, &FOnlineTitleFileHttp::EnumerateFiles_HttpRequestComplete);
HttpRequest->SetURL(GetBaseUrl()+EnumerateFilesUrl+TEXT("/Master.manifest"));
HttpRequest->SetVerb(TEXT("GET"));
bStarted = HttpRequest->ProcessRequest();
}
if (!bStarted)
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("EnumerateFiles request failed. %s"), *ErrorStr);
TriggerOnEnumerateFilesCompleteDelegates(false);
}
return bStarted;
}
/**
* Returns the list of files that was returned by the network store
*
* @param Files out array of file metadata
*
*/
virtual void GetFileList(TArray<FCloudHeader>& OutFiles) override
{
TArray<FCloudHeader>* FilesPtr = &FileHeaders;
if (FilesPtr != NULL)
{
OutFiles = *FilesPtr;
}
else
{
OutFiles.Empty();
}
}
/**
* Starts an asynchronous read of the specified file from the network platform's file store
*
* @param FileToRead the name of the file to read
*
* @return true if the calls starts successfully, false otherwise
*/
virtual bool ReadFile(const FString& FileName) override
{
bool bStarted = false;
FCloudHeader* CloudFileHeader = GetCloudFileHeader(FileName);
// Make sure valid filename was specified3
if (FileName.IsEmpty() || FileName.Contains(TEXT(" ")))
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Invalid filename filename=%s"), *FileName);
TriggerOnReadFileCompleteDelegates(false, FileName);
return false;
}
// Make sure a file request for this file is not currently pending
for (const auto& Pair : FileRequests)
{
if (Pair.Value == FPendingFileRequest(FileName))
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("ReadFileRemote is already in progress for (%s)"), *FileName);
return true;
}
}
FCloudEntry* CloudFile = GetCloudFile(FileName, true);
if (CloudFile->AsyncState == ECloudAsyncTaskState::InProgress)
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("ReadFile is already in progress for (%s)"), *FileName);
return true;
}
if (bCacheFiles)
{
// Try to read this from the cache if possible
bStarted = StartReadFileLocal(FileName);
}
if (!bStarted)
{
// Failed locally (means not on disk) so fetch from server
bStarted = ReadFileRemote(FileName);
}
if (!bStarted || CloudFile->AsyncState == ECloudAsyncTaskState::Failed)
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("ReadFile request failed for file (%s)"), *FileName);
TriggerOnReadFileCompleteDelegates(false, FileName);
}
else if (CloudFile->AsyncState == ECloudAsyncTaskState::Done)
{
TriggerOnReadFileCompleteDelegates(true, FileName);
}
return bStarted;
}
/** Used to check that async tasks have completed and can be completed */
virtual void Tick(float DeltaTime)
{
QUICK_SCOPE_CYCLE_COUNTER(STAT_FOnlineTitleFileHttp_Tick);
TArray<int32> ItemsToRemove;
ItemsToRemove.Reserve(AsyncLocalReads.Num());
// Check for any completed tasks
for (int32 TaskIdx = 0; TaskIdx < AsyncLocalReads.Num(); TaskIdx++)
{
FTitleAsyncReadData& Task = AsyncLocalReads[TaskIdx];
if (Task.AsyncTask->IsDone())
{
FinishReadFileLocal(Task.AsyncTask->GetTask());
ItemsToRemove.Add(TaskIdx);
UE_LOG(LogHTTPChunkInstaller, VeryVerbose, TEXT("Title Task Complete: %s"), *Task.Filename);
}
else
{
const int64 NewValue = Task.BytesRead.GetValue();
if (NewValue != Task.LastBytesRead)
{
Task.LastBytesRead = NewValue;
TriggerOnReadFileProgressDelegates(Task.Filename, NewValue);
}
}
}
// Clean up any tasks that were completed
for (int32 ItemIdx = ItemsToRemove.Num() - 1; ItemIdx >= 0; ItemIdx--)
{
const int32 TaskIdx = ItemsToRemove[ItemIdx];
FTitleAsyncReadData& TaskToDelete = AsyncLocalReads[TaskIdx];
UE_LOG(LogHTTPChunkInstaller, VeryVerbose, TEXT("Title Task Removal: %s read: %d"), *TaskToDelete.Filename, TaskToDelete.BytesRead.GetValue());
delete TaskToDelete.AsyncTask;
AsyncLocalReads.RemoveAtSwap(TaskIdx);
}
}
void Shutdown()
{
}
private:
/** Reads the file from the local cache if it can. This is async */
bool StartReadFileLocal(const FString& FileName)
{
UE_LOG(LogHTTPChunkInstaller, VeryVerbose, TEXT("StartReadFile %s"), *FileName);
bool bStarted = false;
FCloudHeader* CloudFileHeader = GetCloudFileHeader(FileName);
if (CloudFileHeader != nullptr)
{
// Mark file entry as in progress
FCloudEntry* CloudFile = GetCloudFile(FileName, true);
CloudFile->AsyncState = ECloudAsyncTaskState::InProgress;
if (CloudFileHeader->Hash.IsEmpty())
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Requested file (%s) is missing a hash, so can't be verified"), *FileName);
}
FTitleAsyncReadData* NewItem = new FTitleAsyncReadData();
NewItem->Filename = FileName;
// Create the async task and start it
NewItem->AsyncTask = new FAsyncTask<FTitleFileHttpAsyncLoadAndVerify>(FileName,
GetLocalFilePath(FileName), CloudFileHeader->Hash, CloudFileHeader->HashType, &NewItem->BytesRead);
AsyncLocalReads.Add(NewItem);
NewItem->AsyncTask->StartBackgroundTask();
bStarted = true;
}
return bStarted;
}
/** Completes the async operation of the local file read */
void FinishReadFileLocal(FTitleFileHttpAsyncLoadAndVerify& AsyncLoad)
{
UE_LOG(LogHTTPChunkInstaller, VeryVerbose, TEXT("FinishReadFileLocal %s"), *AsyncLoad.OriginalFileName);
FCloudHeader* CloudFileHeader = GetCloudFileHeader(AsyncLoad.OriginalFileName);
FCloudEntry* CloudFile = GetCloudFile(AsyncLoad.OriginalFileName, true);
if (CloudFileHeader != nullptr && CloudFile != nullptr)
{
// if hash matches then just use the local file
if (AsyncLoad.bHashesMatched)
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("Local file hash matches cloud header. No need to download for filename=%s"), *AsyncLoad.OriginalFileName);
CloudFile->Data = AsyncLoad.FileData;
CloudFile->AsyncState = ECloudAsyncTaskState::Done;
TriggerOnReadFileProgressDelegates(AsyncLoad.OriginalFileName, static_cast<uint64>(AsyncLoad.BytesRead->GetValue()));
TriggerOnReadFileCompleteDelegates(true, AsyncLoad.OriginalFileName);
}
else
{
// Request it from server
ReadFileRemote(AsyncLoad.OriginalFileName);
}
}
else
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("ReadFile request failed for file (%s)"), *AsyncLoad.OriginalFileName);
TriggerOnReadFileCompleteDelegates(false, AsyncLoad.OriginalFileName);
}
}
/** Requests the file from MCP. This is async */
bool ReadFileRemote(const FString& FileName)
{
UE_LOG(LogHTTPChunkInstaller, VeryVerbose, TEXT("ReadFileRemote %s"), *FileName);
bool bStarted = false;
FCloudHeader* CloudFileHeader = GetCloudFileHeader(FileName);
if (CloudFileHeader != nullptr)
{
FCloudEntry* CloudFile = GetCloudFile(FileName, true);
CloudFile->Data.Empty();
CloudFile->AsyncState = ECloudAsyncTaskState::InProgress;
// Create the Http request and add to pending request list
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest();
FileRequests.Add(HttpRequest, FPendingFileRequest(FileName));
FileProgressRequestsMap.Add(HttpRequest, FPendingFileRequest(FileName));
HttpRequest->OnProcessRequestComplete().BindRaw(this, &FOnlineTitleFileHttp::ReadFile_HttpRequestComplete);
HttpRequest->OnRequestProgress().BindRaw(this, &FOnlineTitleFileHttp::ReadFile_HttpRequestProgress);
FString RequestUrl;
// Grab the file from the specified URL if that was set, otherwise use the old method that hits the game service
if (CloudFileHeader != nullptr && !CloudFileHeader->URL.IsEmpty())
{
RequestUrl = CloudFileHeader->URL;
}
else
{
RequestUrl = GetBaseUrl() + FileName;
}
HttpRequest->SetURL(RequestUrl);
HttpRequest->SetVerb(TEXT("GET"));
bStarted = HttpRequest->ProcessRequest();
if (!bStarted)
{
UE_LOG(LogHTTPChunkInstaller, Error, TEXT("Unable to start the HTTP request to fetch file (%s)"), *FileName);
}
}
else
{
UE_LOG(LogHTTPChunkInstaller, Error, TEXT("No cloud file header entry for filename=%s."), *FileName);
}
return bStarted;
}
/**
* Delegate called when a Http request completes for enumerating list of file headers
*/
void EnumerateFiles_HttpRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
{
const FCloudPagedQuery& PendingOp = EnumerateFilesRequests.FindRef(HttpRequest);
EnumerateFilesRequests.Remove(HttpRequest);
bool bResult = false;
FString ResponseStr, ErrorStr;
if (HttpResponse.IsValid() && EHttpResponseCodes::IsOk(HttpResponse->GetResponseCode()))
{
ResponseStr = HttpResponse->GetContentAsString();
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("EnumerateFiles request complete. url=%s code=%d response=%s"),
*HttpRequest->GetURL(), HttpResponse->GetResponseCode(), *ResponseStr);
if (PendingOp.Start == 0)
{
FileHeaders.Empty();
}
// parse the html for the file list
if (ResponseStr.StartsWith(TEXT("<!DOCTYPE")))
{
TArray<FString> Lines;
ResponseStr.ParseIntoArrayLines(Lines);
for (int Index = 0; Index < Lines.Num(); ++Index)
{
if (Lines[Index].StartsWith(TEXT("<li>")))
{
TArray<FString> Elements;
Lines[Index].ParseIntoArray(Elements, TEXT(">"));
if (!Elements[2].StartsWith(TEXT("Chunks")))
{
FString File = Elements[2].Replace(TEXT("</a"), TEXT(""));
FCloudHeader FileHeader;
FileHeader.DLName = File;
FileHeader.FileName = File;
FileHeader.URL = GetBaseUrl() + EnumerateFilesUrl + TEXT("/") + File;
FileHeader.Hash.Empty();
FileHeader.FileSize = 0;
FileHeaders.Add(FileHeader);
}
}
}
bResult = true;
}
else
{
// Create the Json parser
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<> > JsonReader = TJsonReaderFactory<>::Create(ResponseStr);
if (FJsonSerializer::Deserialize(JsonReader, JsonObject) &&
JsonObject.IsValid())
{
// Parse the array of file headers
TArray<TSharedPtr<FJsonValue> > JsonFileHeaders = JsonObject->GetArrayField(TEXT("files"));
for (TArray<TSharedPtr<FJsonValue> >::TConstIterator It(JsonFileHeaders); It; ++It)
{
TSharedPtr<FJsonObject> JsonFileHeader = (*It)->AsObject();
if (JsonFileHeader.IsValid())
{
FCloudHeader FileHeader;
if (JsonFileHeader->HasField(TEXT("hash")))
{
FileHeader.Hash = JsonFileHeader->GetStringField(TEXT("hash"));
FileHeader.HashType = FileHeader.Hash.IsEmpty() ? NAME_None : NAME_SHA1;
}
// This one takes priority over the old SHA1 hash if present (requires platform support)
if (bPlatformSupportsSHA256 && JsonFileHeader->HasField(TEXT("hash256")))
{
FString Hash256 = JsonFileHeader->GetStringField(TEXT("hash256"));
if (!Hash256.IsEmpty())
{
FileHeader.Hash = Hash256;
FileHeader.HashType = FileHeader.Hash.IsEmpty() ? NAME_None : NAME_SHA256;
}
}
if (JsonFileHeader->HasField(TEXT("uniqueFilename")))
{
FileHeader.DLName = JsonFileHeader->GetStringField(TEXT("uniqueFilename"));
}
if (JsonFileHeader->HasField(TEXT("filename")))
{
FileHeader.FileName = JsonFileHeader->GetStringField(TEXT("filename"));
}
if (JsonFileHeader->HasField(TEXT("length")))
{
FileHeader.FileSize = FMath::TruncToInt(JsonFileHeader->GetNumberField(TEXT("length")));
}
if (JsonFileHeader->HasField(TEXT("URL")))
{
FileHeader.URL = GetBaseUrl() + EnumerateFilesUrl + TEXT("/") + JsonFileHeader->GetStringField(TEXT("URL"));
}
if (FileHeader.FileName.IsEmpty())
{
FileHeader.FileName = FileHeader.DLName;
}
if (FileHeader.Hash.IsEmpty() ||
(FileHeader.DLName.IsEmpty() && FileHeader.URL.IsEmpty()) ||
FileHeader.HashType == NAME_None)
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Invalid file entry hash=%s hashType=%s dlname=%s filename=%s URL=%s"),
*FileHeader.Hash,
*FileHeader.HashType.ToString(),
*FileHeader.DLName,
*FileHeader.FileName,
*FileHeader.URL);
}
else
{
int32 FoundIdx = INDEX_NONE;
for (int32 Idx = 0; Idx < FileHeaders.Num(); Idx++)
{
const FCloudHeader& ExistingFile = FileHeaders[Idx];
if (ExistingFile.DLName == FileHeader.DLName)
{
FoundIdx = Idx;
break;
}
}
if (FoundIdx != INDEX_NONE)
{
FileHeaders[FoundIdx] = FileHeader;
}
else
{
FileHeaders.Add(FileHeader);
}
}
}
}
}
bResult = true;
}
}
else
{
if (HttpResponse.IsValid())
{
ErrorStr = FText::Format(LOCTEXT("HttpResponseFromUrl", "HTTP {0} response from {1}"),
FText::AsNumber(HttpResponse->GetResponseCode()),
FText::FromString(HttpResponse->GetURL())).ToString();
}
else
{
ErrorStr = FText::Format(LOCTEXT("HttpResponse_Failed", "Connection to {0} failed"), FText::FromString(HttpRequest->GetURL())).ToString();
}
}
if (!ErrorStr.IsEmpty())
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("EnumerateFiles request failed. %s"), *ErrorStr);
}
else
{
// Everything went ok, so we can remove any cached files that are not in the current list
DeleteCachedFiles(true);
}
TriggerOnEnumerateFilesCompleteDelegates(bResult);
}
/**
* Delegate called when a Http request completes for reading a cloud file
*/
void ReadFile_HttpRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
{
bool bResult = false;
FString ResponseStr, ErrorStr;
// should have a pending Http request
FPendingFileRequest PendingRequest = FileRequests.FindChecked(HttpRequest);
FileRequests.Remove(HttpRequest);
// remove from progress updates
FileProgressRequestsMap.Remove(HttpRequest);
HttpRequest->OnRequestProgress().Unbind();
// Cloud file being operated on
FCloudEntry* CloudFile = GetCloudFile(PendingRequest.FileName, true);
CloudFile->AsyncState = ECloudAsyncTaskState::Failed;
CloudFile->Data.Empty();
if (HttpResponse.IsValid() && EHttpResponseCodes::IsOk(HttpResponse->GetResponseCode()))
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("ReadFile request complete. url=%s code=%d"),
*HttpRequest->GetURL(), HttpResponse->GetResponseCode());
// update the memory copy of the file with data that was just downloaded
CloudFile->AsyncState = ECloudAsyncTaskState::Done;
CloudFile->Data = HttpResponse->GetContent();
if (bCacheFiles)
{
// cache to disk on successful download
SaveCloudFileToDisk(CloudFile->FileName, CloudFile->Data);
}
bResult = true;
}
else
{
if (HttpResponse.IsValid())
{
ErrorStr = FText::Format(LOCTEXT("HttpResponseFromUrl", "HTTP {0} response from {1}"),
FText::AsNumber(HttpResponse->GetResponseCode()),
FText::FromString(HttpResponse->GetURL())).ToString();
}
else
{
ErrorStr = FText::Format(LOCTEXT("HttpResponse_Failed", "Connection to {0} failed"), FText::FromString(HttpRequest->GetURL())).ToString();
}
}
if (!ErrorStr.IsEmpty())
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("EnumerateFiles request failed. %s"), *ErrorStr);
}
TriggerOnReadFileCompleteDelegates(bResult, PendingRequest.FileName);
}
/**
* Delegate called as a Http request progresses for reading a cloud file
*/
void ReadFile_HttpRequestProgress(FHttpRequestPtr HttpRequest, int32 BytesSent, int32 BytesReceived)
{
FPendingFileRequest PendingRequest = FileProgressRequestsMap.FindChecked(HttpRequest);
// Just forward this to anyone that is listening
TriggerOnReadFileProgressDelegates(PendingRequest.FileName, BytesReceived);
}
/**
* Find/create cloud file entry
*
* @param FileName cached file entry to find
* @param bCreateIfMissing create the file entry if not found
*
* @return cached cloud file entry
*/
FCloudEntry* GetCloudFile(const FString& FileName, bool bCreateIfMissing)
{
FCloudEntry* CloudFile = NULL;
for (int Idx = 0; Idx < Files.Num(); Idx++)
{
if (Files[Idx].FileName == FileName)
{
CloudFile = &Files[Idx];
break;
}
}
if (CloudFile == NULL && bCreateIfMissing)
{
CloudFile = new(Files)FCloudEntry(FileName);
}
return CloudFile;
}
/**
* Find cloud file header entry
*
* @param FileName cached file entry to find
*
* @return cached cloud file header entry
*/
FCloudHeader* GetCloudFileHeader(const FString& FileName)
{
FCloudHeader* CloudFileHeader = NULL;
for (int Idx = 0; Idx < FileHeaders.Num(); Idx++)
{
if (FileHeaders[Idx].DLName == FileName)
{
CloudFileHeader = &FileHeaders[Idx];
break;
}
}
return CloudFileHeader;
}
/**
* Converts filename into a local file cache path
*
* @param FileName name of file being loaded
*
* @return unreal file path to be used by file manager
*/
FString GetLocalFilePath(const FString& FileName)
{
return GetLocalCachePath() + FileName;
}
/**
* @return full path to cache directory
*/
FString GetLocalCachePath()
{
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3548365) #lockdown Nick.Penwarden ============================ MAJOR FEATURES & CHANGES ============================ Change 3494741 by Steve.Robb Generated code size savings. #jira UE-43048 Change 3495484 by Steve.Robb Fix for generated indices of static arrays when saving configs. Change 3497926 by Robert.Manuszewski Removed FPackageFileSummary's CompressedChunks array as it was no longer being used by anything. Change 3498077 by Robert.Manuszewski Only use the recursion guard in async loading code when the event driven loader is enabled. Change 3498112 by Ben.Marsh UBT: Respect the option to not create debug info in the Android toolchain. This option is already being respected by the compiler, but the linker adds debug info of its own. Change 3500239 by Robert.Manuszewski Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes. Change 3500395 by Steve.Robb Extra codegen savings when not in hot reload. Change 3501004 by Steve.Robb EObjectFlags now have constexpr operators. Change 3502079 by Ben.Marsh UBT: Pad multi-line error messages so that they align under the prefix for the first line, and include the timestamp if necessary. Change 3502527 by Steve.Robb Fix for zero-sized array compile error in generated code when all functions are editor-only. Change 3502542 by Ben.Marsh UAT: Remove the custom source parameter from log functions, and add support for a customizable indent instead. Change 3502868 by Steve.Robb Workaround for inefficient generated code with stateless lambdas on Clang. Change 3503550 by Steve.Robb Another generated code lambda optimization. Change 3503582 by Ben.Marsh BuildGraph: Add support for nullable parameter types. Change 3504424 by Steve.Robb New AllOf, AnyOf and NoneOf algorithms. Change 3504712 by Ben.Marsh UAT: Less spammy log and error output from UAT. * Callstacks for AutomationExceptions are suppressed by default but still included in the log (the path to the log is noted in console output with the message from the exception). * Add a mechanism for any exceptions to be caught and rethrown with additional lines of context (CommandUtils.AddContext()) that will be appended to the error output by UAT. Avoids decaying the exception type or masking the inner exception message while still adding additional information. * AggregateExceptions resulting from exceptions on child threads are automatically unwrapped (full details are still appended to the log) * Name of the calling function is not included in console output by default, but still included in the log. Change 3504808 by Ben.Marsh UAT: Suppress P4 output when running a recursive instance of UAT. Change 3505044 by Steve.Robb Code generation improved for TCppClassType code. Change 3505485 by Ben.Marsh Fix deterministic cooking issue; always use a pseudo-random number stream when compiling a module. Change 3505699 by Ben.Marsh Plugins: Store the bEnabledByDefault flag exactly as it was read from disk rather than collapsing it to an absolute value based on the default for the location it was read from. This allows loading/saving plugin descriptors without any knowledge of whether they are game or engine plugins. Change 3506055 by Ben.Marsh UAT: Add a class to apply a log indent for the lifetime of an object (ScopedLogIndent), and use it to apply an indent to MegaXGE/ParallelExecutor output. Change 3507745 by Robert.Manuszewski Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses). Change 3507911 by Ben.Marsh Plugins: Minor changes to plugin descriptors. * Add a distinct setting for an unspecified EnabledByDefault setting in plugin descriptors. * Add a function to IPlugin to determine the effective EnabledByDefault setting, based on where the plugin was loaded from. Change 3508669 by Ben.Marsh EC: Parse multi-line messages from UBT and UAT. Change 3508691 by Ben.Marsh Fix double-spacing of cook stats. Change 3509245 by Steve.Robb UHT makefiles removed. Flag audit removed. Change 3509275 by Steve.Robb Fix for mismatched stat categories in AudioMixer. #jira UE-46129 Change 3509289 by Robert.Manuszewski Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably. Change 3509294 by Robert.Manuszewski UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there's no UObject references in it. Change 3509312 by Steve.Robb GitHub# 3679: Add TArray constructor that takes a raw pointer and a count Check improved for Append() to allow nullptr in empty ranges, and added to new constructor too. #jira UE-46136 Change 3509396 by Steve.Robb GitHub# 3676: Fix TUnion operator<< compile error #jira UE-46099 Change 3509633 by Steve.Robb Fix for line numbers on multiline macros. Change 3509938 by Gil.Gribb UE4 - Fix rare assert involving cancelled precache requests and non-pak-file loading. Change 3510593 by Daniel.Lamb Fixed up unsoilicited files getting populated with files which aren't finished being created yet. #test None Change 3510594 by Daniel.Lamb Fixed up temp files directory for patching. Thanks David Yerkess @ Milestone #review@Ben.Marsh Change 3511628 by Ben.Marsh PR #3707: Fixed UBT stack size (Contributed by gildor2) Change 3511808 by Ben.Marsh Optimize checks for whether the game project contains source code. Now stops as soon as the first file is found and ignores directories beginning with a '.' character (eg. .git) #jira UE-46540 Change 3512017 by Ben.Marsh Plugins: Deprecate the QueryStatusForAllPlugins() function; the same functionality is available via the IPlugin interface. Change 3513935 by Steve.Robb Reverted array iteration in FPropertyNode::PropagatePropertyChange as this is now covered in TProperty::InitializeValueInternal() as of CL# 3293477. Change 3514142 by Steve.Robb MemoryProfiler2 added to generated solution. Change 3516463 by Ben.Marsh Plugins: Create a manifest for each PAK file containing all the plugin descriptors in one place. Eliminates need to recurse through directories and read separate multiple files in serial at startup, and allows reading all plugin descriptors with one read. The "Mods" directory is excluded from the manifest, since these are intended to be installed separately by the user. Change 3517860 by Ben.Marsh PR #3727: FString Dereference Fixes (Contributed by jovisgCL) Change 3517967 by Ben.Marsh Suppress additional system error dialogs when loading DLLs if -unnattended is on the command line. Change 3518070 by Steve.Robb Disable Binned2 stats in shipping non-editor builds. Change 3520079 by Steve.Robb Fixed bad codegen TAssetPtrs being passed into BlueprintImplementableEvent functions. #jira UE-24034 Change 3520080 by Robert.Manuszewski Made max package summary size to be configurable with ini setting Change 3520083 by Steve.Robb Force a GC after hot reload to clean up reinstanced objects which may still tick. #jira UE-40421 Change 3520480 by Robert.Manuszewski Improved assert message when the initial package read request was too small. Change 3520590 by Graeme.Thornton SignedArchiveReader optimizations - Loads more stats - Stop chunk cache worker from waking up continuously to poll for work. Only wake up when triggered by the archive reader - Signed archive reader just yields when waiting for buffers to finish loading, rather than sleeping for some arbitrary amount of time - Track the number of pending read requests in an atomic counter, to save having to lock the request queue to check for new entries Change 3521023 by Graeme.Thornton Remove spin from signed archive reader. Main thread waits on an event triggered by the chunk worker to indicate that new chunks are ready for processing Change 3521787 by Ben.Marsh PR #3736: Small static code analysis fixes (Contributed by jovisgCL) Change 3521789 by Ben.Marsh PR #3735: Fix case sensitivity issue in FWindowsPlatformProcess::IsApplicationRunning. (Contributed by samhocevar) Change 3524721 by Ben.Marsh Move Linux SDL initialization into FLinuxPlatformApplicationMisc. Attempting to move functionality related to interactive applications (graphics, input, etc...) into a separate place, so it can ultimately be moved out of Core. Change 3524741 by Ben.Marsh Move PumpMessages() into FPlatformApplicationMisc. Change 3525399 by Ben.Marsh UGS: Use the default Perforce server port when opening P4V if there is not one set in the environment. Change 3525743 by Ben.Marsh UAT: Add a parameter to allow updating version files without updating Version.h, to allow faster link times on incremental builds. Change 3525746 by Ben.Marsh EC: Include the clobber option on new workspaces, to allow overriding version files when syncing. Change 3526453 by Ben.Marsh UGS: Do not generate project files when syncing precompiled binaries. Change 3527045 by Ben.Marsh Fix hot reload generating import libraries without DLLs. Now that they are produced by separate actions by default, it was removing DLLs from the action graph due to the bSkipLinkingWhenNothingToCompile setting. Change 3527420 by Ben.Marsh UGS: Add additional search paths for UGS config files, and fix a few cosmetic issues (inability to display ampersands in tools menu, showing changelist -1 when running a tool without syncing). Config files are now read from: Engine/Programs/UnrealGameSync/UnrealGameSync.ini Engine/Programs/UnrealGameSync/NotForLicensees/UnrealGameSync.ini If a project is selected: <ProjectDir>/Build/UnrealGameSync.ini <ProjectDir>/Build/NotForLicensees/UnrealGameSync.ini If the .uprojectdirs file is selected: Engine/Programs/UnrealGameSync/DefaultProject.ini Engine/Programs/UnrealGameSync/NotForLicensees/DefaultProject.ini Change 3528063 by Ben.Marsh Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse. Change 3528415 by Ben.Marsh UAT: Remove \r characters from the end of multiline log messages. Change 3528427 by Ben.Marsh EC: Fix spaces being converted to tabs at start of line in failure emails (by Gmail), and wrap following lines at the same indent. Change 3528485 by Ben.Marsh EC: Remove zero-width word break characters from slashes in notification emails; can cause really hard to debug problems when copy pasted into other places. Change 3528505 by Steve.Robb PR #3755: MallocProfiler - Remove subfolder from profiling save directory (Contributed by Josef-CL) #jira UE-46819 Change 3528772 by Robert.Manuszewski Enabling actor and blueprint clustering in ShooterGame Change 3528786 by Robert.Manuszewski PR #3760: Fix typo (Contributed by jesseyeh) Change 3528792 by Steve.Robb PR #3764: MallocProfiler - Refactoring Scopelock (Contributed by Josef-CL) #jira UE-46962 Change 3528941 by Robert.Manuszewski Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object. #jira UE-44996 Change 3530241 by Ben.Marsh UAT: Only pass -submit or -nosubmit to child instances of UAT if they were specified on the original command line. BuildCookRun uses this flag to determine whether to submit, rather than just whether to allow submitting, so we shouldn't pass an inferred value. Change 3531377 by Ben.Marsh Plugins: Allow plugins to specify a list of supported target platforms, which is propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: * Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. * References to dependent plugins from platform-specific plugins can now be eliminated. * Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn't support that platform; now it is possible to specify supported platforms explicitly). * The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary. Change 3531502 by Jin.Zhang Add support for GPUCrash #rb Change 3531664 by Ben.Marsh UBT: Change output format from C# JSON writer to match output by the engine. Change 3531848 by Ben.Marsh UAT: Add script to resaving all project descriptors under a folder, embedding information for any supported platforms for the plugins they enable. Change 3531869 by Ben.Marsh UAT: Add parameter to the ResaveProjectDescriptors command to update the engine association field. Change 3532474 by Ben.Marsh UBT: Use the same mechanism as UAT for logging exceptions. Change 3532734 by Graeme.Thornton Initial VSCode Support - Tasks generated for building all game/engine/program targets - Debugging support for targets on Win64 Change 3532789 by Steve.Robb FScriptSet::Add and TScriptMap::Add now replace the element, matching the behavior of TSet and TMap. Set_Add and Map_Add no longer have a return value. FScriptSet::Find and FScriptMap::Find functions are now FindIndex. FScriptSetHelper::FindElementFromHash is now FindElementIndexFromHash. Change 3532845 by Steve.Robb Obsolete UHT settings deleted. Change 3532875 by Graeme.Thornton VSCode - Add debug targets for different target configurations - Choose between VS debugger (windows) and GDB (mac/linux) Change 3532906 by Graeme.Thornton VSCode - Point all builds directly at UBT rather than the batch files - Adjust mac build tasks to run through mono Change 3532924 by Ben.Marsh UAT: Set the UAT working directory immediately on startup. This ensures that any command line arguments containing paths are resolved consistently to the branch root. Change 3535234 by Graeme.Thornton VSCode - Pass intellisense system a list of paths to use for header resolution Change 3535247 by Graeme.Thornton UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation Change 3535376 by Graeme.Thornton VSCode - Added build jobs for C# projects - Linked launch tasks to relevant build task Change 3537083 by Ben.Marsh EC: Change P4 swarm links to start at the changelist for a build. Change 3537368 by Graeme.Thornton Fix for crash in FSignedArchiveReader when multithreading is disabled Change 3537550 by Graeme.Thornton Fixed a crash in the taskgraph when running single threaded Change 3537922 by Steve.Robb Missing PF_ATC_RGBA_I added to FOREACH_ENUM_EPIXELFORMAT. Change 3539691 by Graeme.Thornton VSCode - Various updates to get PC and Mac C++ projects building and debugging. - Some other changes to C# setup to allow compilation. Debugging doesn't work. Change 3539775 by Ben.Marsh Plugins: Various fixes to settings for enabling plugins. * Fix crash on startup when trying to disable a missing plugin (was keeping pointers to elements in the project's plugin reference array, which may be modified if a plugin is disabled). * Revert fix to set PluginDescriptor.bRequiresBuildPlatform = true by default. This was the originally intended behavior, but it was accidentally defaulted to false during serialization unless specified in the .uplugin file. Many plugins may rely on this behavior (they may not declare asset classes otherwise, for example, which could result in loss of data), so change the default value to false instead. Also fixes popups to disable platform-specific plugins if platform SDKs are not installed. * Fix plugins which are referenced but do not exist not showing the appropriate prompt to disable them. Change 3540788 by Ben.Marsh UBT: Add support for declaring custom pre-build steps and post-build steps from .target.cs files. Similarly to the custom build steps configurable from .uproject and .uplugin files, these specify commands which will be executed by the host platform's shell before or after a build. The following variables are expanded within the list of commands before execution: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile). Example usage: public class UnrealPakTarget : TargetRules { public UnrealPakTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; LinkType = TargetLinkType.Monolithic; LaunchModuleName = "UnrealPak"; if(HostPlatform == UnrealTargetPlatform.Win64) { PreBuildSteps.Add("echo Before building:"); PreBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); PostBuildSteps.Add("echo After building!"); PostBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); } } } Change 3541664 by Graeme.Thornton VSCode - Add problemMatcher tag to cpp build targets Change 3541732 by Graeme.Thornton VSCode - Change UBT command line switch to "-vscode" for simplicity Change 3541967 by Graeme.Thornton VSCode - Fixes for Mac/Linux build steps Change 3541968 by Ben.Marsh CRP: Pass through the EnabledPlugins element in crash context XML files. #jira UE-46912 Change 3542519 by Ben.Marsh UBT: Add chain of references to error messages when configuring plugins. Change 3542523 by Ben.Marsh UBT: Add more useful error message when attempt to parse a JSON object fails. Change 3542658 by Ben.Marsh UBT: Include a chain of references when reporting errors instantiating modules. Change 3543432 by Ben.Marsh Plugins: Fix plugins which are enabled by default not being enabled unless a project file is set. Change 3543436 by Ben.Marsh UBT: Prevent recursing through the same module more than once when building out the referenced modules. Produces much shorter reference chains when something fails. Change 3543536 by Ben.Marsh UBT: Downgrade message about redundant plugin references to a warning. Change 3543871 by Gil.Gribb UE4 - Fixed a critical crash bug with non-EDL loading from pak files. Change 3543924 by Robert.Manuszewski Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes. +Small optimization to token stream generation code. Change 3544469 by Jin.Zhang Crashes page displays the list of plugins from the crash context #rb Change 3544608 by Steve.Robb Fix for nativized generated code. #jira UE-47452 Change 3544612 by Ben.Marsh Add callback into FMacPlatformMisc::PumpMessages() from FMacPlatformApplicationMisc::PumpMessages(). #jira UE-47449 Change 3545954 by Gil.Gribb Fixed a critical crash bug relating to a race condition in async package summary reading. Change 3545968 by Ben.Marsh UAT: Fix incorrect username in BuildGraph <Submit> task. Should use the username from the Perforce environment, not assume the logged in user name is the same. #jira UE-47419 Change 3545976 by Ben.Marsh EC: Delete the AutoSDK client if the directory doesn't exist. When we format build machines, we need to force everything to be resynced from scratch. Change 3546185 by Ben.Marsh Hacky fix for deployment on IOS/TVOS. Since deployment directly references the NonUFS manifest files that are written out, merge all the SystemNonUFS files back into the NonUFS list after the regular NonUFS files have been remapped. Change 3547084 by Gil.Gribb Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms. Change 3547968 by Gil.Gribb Fixed critical race which potentially could cause a crash in the pak precacher. Change 3504722 by Ben.Marsh BuildGraph: Improved tracing for error messages. All errors are now propagated as exceptions, and are tagged with additional context information about the task currently being run. For example, throwing new AutomationException("Unable to write foo.txt") from SetVersionTask.Execute is now displayed in the log as: ERROR: Unable to write to foo.txt while executing <SetVersion Change="0" CompatibleChange="0" Branch="Unknown" Promoted="True" /> at Engine\Build\InstalledEngineBuild.xml(91) (see D:\P4 UE4\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace) Change 3512255 by Ben.Marsh Rename FPaths functions with a "Game" prefix (GameDir(), GameContentDir(), etc...) to have a "Project" prefix (ProjectDir(), ProjectContentDir(), etc...) for clarity with non-game uses of UE4. Old functions still exist but are deprecated. Change 3512332 by Ben.Marsh Rename "Game" functions in FApp to be "Project" functions (FApp::GetGameName() -> FApp::GetProjectName(), etc...) for clarity with non-game uses of UE4. Change 3512393 by Ben.Marsh Rename FPaths::GameLogDir() to FPaths::ProjectLogDir(). Change 3513452 by Ben.Marsh Plugins: Rename EPluginLoadedFrom::GameProject to EPluginLoadedFrom::Project. Change 3516262 by Ben.Marsh Add support for a "Mods" folder distinct from the project's "Plugins" folder, instead of using the bIsMod flag on the plugin descriptor. * Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. * The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders). Change 3517565 by Ben.Marsh Remove fixed engine version numbers from OSS plugins. Change 3518005 by Ben.Marsh UAT: Remove the bUFSFile parameter from DeployLowerCaseFilenames(). Every platform returns false if the argument is false. Change 3518054 by Ben.Marsh UAT: Use an enum to direct whether all directories should be searched when finding files to stage, rather than a bool. Having so many optional boolean arguments makes code unreadable and refactoring hard. Change 3524496 by Ben.Marsh Start moving GUI application code into a separate static platform class, hopefully ultimately removing it from Core. Change 3524641 by Ben.Marsh Move more functionality related to windowed/graphical applications into FPlatformApplicationMisc. Change 3528723 by Steve.Robb MoveTemp now static asserts if passed a const reference or rvalue. MoveTempIfPossible still follows the old (std::move) rule, which is useful for templates where the nature of the argument is not obvious. Fixes to violations of these new rules. Change 3528876 by Ben.Marsh Move FPlatformMisc::ClipboardCopy and FPlatformMisc::ClipboardPaste to FPlatformApplicationMisc::ClipboardCopy and FPlatformApplicationMisc::ClipboardPaste. Change 3529073 by Ben.Marsh Add script to package ShooterGame for any platforms. Change 3531493 by Ben.Marsh Update platform-specific plugins to declare the target platforms they support. Change 3531611 by Ben.Marsh UAT: Add a ResavePluginDescriptors command, which resaves all plugin descriptors under a given folder, removing any outdated fields and rewrites them in a consistent style. Many plugins in the wild contain redundant or no-longer used fields due to using our plugins as templates. Change 3531868 by Ben.Marsh Resaving project descriptors to remove invalid fields. Change 3531983 by Ben.Marsh UAT: Simplify logic for staging code, and add validation against shipping files in restricted folders. * Added a new SystemNonUFS type for staged files, which excludes files from being remapped or renamed by the platform layer. * Replaced the DeplyomentContext.StageFiles() function with simpler overloads for particular use cases (options for remapping are replaced with the SystemNonUFS file type) * Config entries in the [Staging] category in DefaultGame.ini file allow remapping one directory to another, so restricted content can be made public in packaged builds (Example syntax: +RemapDirectory=(From="Foo/NoRedist", To="Foo")) * An error is output if any restricted folder names other than the output platform are in the staged output. Change 3540315 by Ben.Marsh UAT: Moving StreamCopyDescription command into a NotForLicensees folder, since it's only meant to be used by engine developers. Change 3542410 by Ben.Marsh UBT: Deprecate accessing properties through BuildConfiguration.* or UEBuildConfiguration.* from .target.cs files. These have been aliases to the current TargetRules instance for several releases already. Change 3543018 by Ben.Marsh UBT: Deprecate the BuildConfiguration and UEBuildConfiguration aliases from the ModuleRules class. These have been implemented as an alias ot the ReadOnlyTargetRules instance passed to the constructor for several engine versions. Change 3544371 by Steve.Robb Fixes to TSet_Add and TMap_Add BPs. #jira UE-47441 [CL 3548391 by Ben Marsh in Main branch]
2017-07-21 12:42:36 -04:00
return FPaths::ProjectPersistentDownloadDir() / TEXT("EMS/");
}
/**
* Save a file from a given user to disk
*
* @param FileName name of file being saved
* @param Data data to write to disk
*/
void SaveCloudFileToDisk(const FString& Filename, const TArray<uint8>& Data)
{
// save local disk copy as well
FString LocalFilePath = GetLocalFilePath(Filename);
bool bSavedLocal = FFileHelper::SaveArrayToFile(Data, *LocalFilePath);
if (bSavedLocal)
{
UE_LOG(LogHTTPChunkInstaller, Verbose, TEXT("WriteUserFile request complete. Local file cache updated =%s"),
*LocalFilePath);
}
else
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("WriteUserFile request complete. Local file cache failed to update =%s"),
*LocalFilePath);
}
}
/**
* Should use the initialization constructor instead
*/
FOnlineTitleFileHttp() = delete;
/** Config based url for enumerating list of cloud files*/
FString EnumerateFilesUrl;
/** Config based url for accessing the HTTP server */
FString BaseUrl;
FString GetBaseUrl()
{
return TEXT("http://") + BaseUrl + TEXT("/");
}
/** List of pending Http requests for enumerating files */
TMap<FHttpRequestPtr, FCloudPagedQuery> EnumerateFilesRequests;
/** Info used to send request for a file */
struct FPendingFileRequest
{
/**
* Constructor
*/
FPendingFileRequest(const FString& InFileName = FString(TEXT("")))
: FileName(InFileName)
{
}
/**
* Equality op
*/
inline bool operator==(const FPendingFileRequest& Other) const
{
return FileName == Other.FileName;
}
/** File being operated on by the pending request */
FString FileName;
};
/** List of pending Http requests for reading files */
TMap<FHttpRequestPtr, FPendingFileRequest> FileRequests;
TMap<FHttpRequestPtr, FPendingFileRequest> FileProgressRequestsMap;
TArray<FCloudHeader> FileHeaders;
TArray<FCloudEntry> Files;
bool bCacheFiles;
bool bPlatformSupportsSHA256;
/** Information about local file reads that are in progress */
struct FTitleAsyncReadData
{
/** Name of the file being loaded */
FString Filename;
/** Amount of data that has been loaded on the async thread so far */
FThreadSafeCounter64 BytesRead;
/** Bytes read last time game thread noticed */
int64 LastBytesRead;
/** Async tasks doing the work */
FAsyncTask<FTitleFileHttpAsyncLoadAndVerify>* AsyncTask;
FTitleAsyncReadData() :
LastBytesRead(0),
AsyncTask(nullptr)
{ }
bool operator==(const FTitleAsyncReadData& Other) const
{
return Filename == Other.Filename && AsyncTask == Other.AsyncTask;
}
};
/** Holds the outstanding tasks for hitch free loading and hash calculation */
TIndirectArray<FTitleAsyncReadData> AsyncLocalReads;
};
// Helper class to find all pak file manifests.
class FChunkSearchVisitor: public IPlatformFile::FDirectoryVisitor
{
public:
TArray<FString> PakManifests;
FChunkSearchVisitor()
{}
virtual bool Visit(const TCHAR* FilenameOrDirectory,bool bIsDirectory)
{
if(bIsDirectory == false)
{
FString Filename(FilenameOrDirectory);
if(FPaths::GetBaseFilename(Filename).MatchesWildcard("*.manifest"))
{
PakManifests.AddUnique(Filename);
}
}
return true;
}
};
FHTTPChunkInstall::FHTTPChunkInstall()
: InstallingChunkID(-1)
, InstallerState(ChunkInstallState::Setup)
, InstallSpeed(EChunkInstallSpeed::Fast)
, bFirstRun(true)
, bSystemInitialised(false)
#if !UE_BUILD_SHIPPING
, bDebugNoInstalledRequired(false)
#endif
{
}
FHTTPChunkInstall::~FHTTPChunkInstall()
{
if (InstallService.IsValid())
{
InstallService->CancelInstall();
InstallService.Reset();
}
}
bool FHTTPChunkInstall::Tick(float DeltaSeconds)
{
QUICK_SCOPE_CYCLE_COUNTER(STAT_FHTTPChunkInstall_Tick);
if (!bSystemInitialised)
{
InitialiseSystem();
}
switch (InstallerState)
{
case ChunkInstallState::Setup:
{
check(OnlineTitleFile.IsValid());
EnumFilesCompleteHandle = OnlineTitleFile->AddOnEnumerateFilesCompleteDelegate_Handle(FOnEnumerateFilesCompleteDelegate::CreateRaw(this,&FHTTPChunkInstall::OSSEnumerateFilesComplete));
ReadFileCompleteHandle = OnlineTitleFile->AddOnReadFileCompleteDelegate_Handle(FOnReadFileCompleteDelegate::CreateRaw(this,&FHTTPChunkInstall::OSSReadFileComplete));
ChunkSetupTask.SetupWork(BPSModule, InstallDir, ContentDir, HoldingDir, MountedPaks);
ChunkSetupTaskThread.Reset(FRunnableThread::Create(&ChunkSetupTask, TEXT("Chunk discovery thread")));
InstallerState = ChunkInstallState::SetupWait;
} break;
case ChunkInstallState::SetupWait:
{
if (ChunkSetupTask.IsDone())
{
ChunkSetupTaskThread->WaitForCompletion();
ChunkSetupTaskThread.Reset();
for (auto It = ChunkSetupTask.InstalledChunks.CreateConstIterator(); It; ++It)
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to installed manifests"), It.Key());
InstalledManifests.Add(It.Key(), It.Value());
}
for (auto It = ChunkSetupTask.HoldingChunks.CreateConstIterator(); It; ++It)
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to holding manifests"), It.Key());
PrevInstallManifests.Add(It.Key(), It.Value());
}
MountedPaks.Append(ChunkSetupTask.MountedPaks);
InstallerState = ChunkInstallState::QueryRemoteManifests;
}
} break;
case ChunkInstallState::QueryRemoteManifests:
{
//Now query the title file service for the chunk manifests. This should return the list of expected chunk manifests
check(OnlineTitleFile.IsValid());
OnlineTitleFile->ClearFiles();
InstallerState = ChunkInstallState::RequestingTitleFiles;
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Enumerating manifest files"));
OnlineTitleFile->EnumerateFiles();
} break;
case ChunkInstallState::SearchTitleFiles:
{
FString CleanName;
TArray<FCloudHeader> FileList;
TitleFilesToRead.Reset();
RemoteManifests.Reset();
ExpectedChunks.Empty();
OnlineTitleFile->GetFileList(FileList);
for (int32 FileIndex = 0, FileCount = FileList.Num(); FileIndex < FileCount; ++FileIndex)
{
if (FileList[FileIndex].FileName.MatchesWildcard(TEXT("*.manifest")))
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Found manifest %s"), *FileList[FileIndex].FileName);
TitleFilesToRead.Add(FileList[FileIndex]);
}
}
InstallerState = ChunkInstallState::ReadTitleFiles;
} break;
case ChunkInstallState::ReadTitleFiles:
{
if (TitleFilesToRead.Num() > 0 && InstallSpeed != EChunkInstallSpeed::Paused)
{
if (!IsDataInFileCache(TitleFilesToRead[0].Hash))
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Reading manifest %s from remote source"), *TitleFilesToRead[0].FileName);
InstallerState = ChunkInstallState::WaitingOnRead;
OnlineTitleFile->ReadFile(TitleFilesToRead[0].DLName);
}
else
{
InstallerState = ChunkInstallState::ReadComplete;
}
}
else
{
InstallerState = ChunkInstallState::PostSetup;
}
} break;
case ChunkInstallState::ReadComplete:
{
FileContentBuffer.Reset();
bool bReadOK = false;
bool bAlreadyLoaded = ManifestsInMemory.Contains(TitleFilesToRead[0].Hash);
if (!IsDataInFileCache(TitleFilesToRead[0].Hash))
{
bReadOK = OnlineTitleFile->GetFileContents(TitleFilesToRead[0].DLName, FileContentBuffer);
if (bReadOK)
{
AddDataToFileCache(TitleFilesToRead[0].Hash, FileContentBuffer);
}
}
else if (!bAlreadyLoaded)
{
bReadOK = GetDataFromFileCache(TitleFilesToRead[0].Hash, FileContentBuffer);
if (!bReadOK)
{
RemoveDataFromFileCache(TitleFilesToRead[0].Hash);
}
}
if (bReadOK)
{
if (!bAlreadyLoaded)
{
ParseTitleFileManifest(TitleFilesToRead[0].Hash);
}
// Even if the Parse failed remove the file from the list
TitleFilesToRead.RemoveAt(0);
}
if (TitleFilesToRead.Num() == 0)
{
if (bFirstRun)
{
ChunkMountTask.SetupWork(BPSModule, ContentDir, MountedPaks, ExpectedChunks);
ChunkMountTaskThread.Reset(FRunnableThread::Create(&ChunkMountTask, TEXT("Chunk mounting thread")));
}
InstallerState = ChunkInstallState::PostSetup;
}
else
{
InstallerState = ChunkInstallState::ReadTitleFiles;
}
} break;
case ChunkInstallState::EnterOfflineMode:
{
for (auto It = InstalledManifests.CreateConstIterator(); It; ++It)
{
ExpectedChunks.Add(It.Key());
}
ChunkMountTask.SetupWork(BPSModule, ContentDir, MountedPaks, ExpectedChunks);
ChunkMountTaskThread.Reset(FRunnableThread::Create(&ChunkMountTask, TEXT("Chunk mounting thread")));
InstallerState = ChunkInstallState::PostSetup;
} break;
case ChunkInstallState::PostSetup:
{
if (bFirstRun)
{
if (ChunkMountTask.IsDone())
{
ChunkMountTaskThread->WaitForCompletion();
ChunkMountTaskThread.Reset();
MountedPaks.Append(ChunkMountTask.MountedPaks);
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Completed First Run"));
bFirstRun = false;
if (PriorityQueue.Num() == 0)
{
SetInstallSpeed(EChunkInstallSpeed::Paused);
}
}
}
else
{
InstallerState = ChunkInstallState::Idle;
}
} break;
case ChunkInstallState::Idle:
{
UpdatePendingInstallQueue();
} break;
case ChunkInstallState::CopyToContent:
{
if (!ChunkCopyInstall.IsDone() || !InstallService->IsComplete())
{
break;
}
check(InstallingChunkID != -1);
if (InstallService.IsValid())
{
InstallService.Reset();
}
ChunkCopyInstallThread.Reset();
check(RemoteManifests.Find(InstallingChunkID));
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to installed manifests"), InstallingChunkID);
InstalledManifests.Add(InstallingChunkID, InstallingChunkManifest);
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Removing Chunk %d from remote manifests"), InstallingChunkID);
RemoteManifests.Remove(InstallingChunkID, InstallingChunkManifest);
MountedPaks.Append(ChunkCopyInstall.MountedPaks);
if (!RemoteManifests.Contains(InstallingChunkID))
{
// No more manifests relating to the chunk ID are left to install.
// Inform any listeners that the install has been completed.
FPlatformChunkInstallCompleteMultiDelegate* FoundDelegate = DelegateMap.Find(InstallingChunkID);
if (FoundDelegate)
{
FoundDelegate->Broadcast(InstallingChunkID);
}
Copying //UE4/Dev-Framework to //UE4/Dev-Main (Source: //UE4/Dev-Framework @ 3544039) #lockdown Nick.Penwarden #rb none #rnx ===================================== MAJOR FEATURES + CHANGES ===================================== Change 3343905 by Dan.Oconnor ResolveMember optimizations and moved into cpp. ResolveMember<UFunction> now checks UClass::FuncMap before doing more expensive searches Change 3346637 by Ben.Zeigler Actually fix in non editor builds Change 3355484 by Dan.Oconnor Back out FMemberReference Optimization Change 3425833 by Ben.Zeigler #jira UE-31749 Fix it so Undo works properly when modifying a local variable #jira UE-44736 Fix it so changing the type of a local variable correctly resets the default value Change 3510091 by Marc.Audy Expose on Spawn functional test #rnx Change 3510100 by Marc.Audy Fix spelling error #rnx Change 3510132 by Marc.Audy Fix issues with marking a widget blueprint class as abstract Change 3510133 by Marc.Audy Minor code cleanup #rnx Change 3510178 by Ben.Zeigler #jira UE-46500 Fix it so editor-only and transient stuct members are not serialized for literal blueprint structs. It's unsafe to serialize them because they may not exist in the cooked build Change 3510466 by Ben.Zeigler Start adding basic ability system tests to enginetest, very minimal so far Change 3511295 by Marc.Audy Fix wasted work going weak -> object -> weak -> object #rnx Change 3511824 by Marc.Audy Fix spelling error in tooltip #jira UE-46515 #rnx Change 3514446 by Ben.Zeigler Fix ActorBoundEvent and ComponentBoundEvent to always refresh their event signature from the delegate property they are bound to. This is required to correctly deal with delegate signatures being moved or renamed. Both types now do the fixup one time, in ReconstructNode. Change 3514578 by Marc.Audy Move clearing of the actor component need end of frame update mark to base class instead of just primitive component Change 3514583 by Ben.Zeigler Better fix to last delegate checkin that also handles moving functions between modules but not renaming Change 3515325 by Dan.Oconnor Fix for rare orphan pin false positive, rare exposed on spawn false positive #rnx Change 3515761 by Marc.Audy fix shipping configuration #rnx Change 3515772 by Marc.Audy Fix static analysis warnings #rnx Change 3516287 by Marc.Audy Fix references to instanced components not being updated when resetting component to default #jira UE-44706 #rnx Change 3516303 by Marc.Audy Back out CL# 3516287 while an oddity is investigated #rnx Change 3516563 by Marc.Audy (4.17) Fix references to instanced components not being updated when resetting component to default #jira UE-44706 Change 3516637 by Phillip.Kavan #jira UE-44661 - Fix potential crash when changing the ChildActorComponent class default value on a Blueprint that also sets the class in the Construction Script. Change summary: - Modified UChildActorComponent::DestroyChildActor() to move the check for PendingKill/Unreachable so that we can also rename a defunct ChildActor instance out of the way in order to allow for a new ChildActor instance w/ the cached name. Change 3517735 by Marc.Audy Avoid unnecessary string copy #rnx Change 3517931 by Marc.Audy Small optimization to CleanupActors Change 3518221 by Dan.Oconnor Fix rare crash when running ConformImplementedEvents when async loading #jira UE-45348 Change 3518270 by Ben.Zeigler #jira UE-46574 Add FCollectionReference type and customization to allow setting an FName to an editor collection Add AssetCollection to PrimaryAssetLabel that derives the bundled assets from an editor collection Change 3518271 by Marc.Audy Get rid of unnecessary construction differentiation if custom reset is being used Change 3518310 by Ben.Marsh Re-adding IOS files with correct case. Change 3518423 by Ben.Zeigler #jira UE-46574 Initial support for chunk installation in Asset Manager. Refactor AssetManagerSettings so it copies runtime bools into the asset manager for fast access Add a concept of a stalled streamable manager handle, handles can be created stalled and will not execute their async load until all needed resources have been acquired externally Change 3518480 by Marc.Audy Correctly get the variable reference for an input variable get from the member scope rather than a member variable of the same name on the class #jira UE-46737 Change 3518498 by Ben.Zeigler Fix bug with AssetManager where requesting the same load twice in a row before the first one finishes caused the complete callback to get called too early for the second load Update test map to catch this Change 3518526 by Ben.Zeigler IOS Fix Change 3518619 by Ben.Zeigler #jira UE-46744 Fix issue where refreshing asset manager editor settings would throw away asset label rules overrides, causing the recursive flag to accidentally get set Change 3518747 by Phillip.Kavan #jira UE-43154 - Prevent ConstructGenericObject nodes from compiling if the selected type does not include 'BlueprintType' in its inheritance hierarchy. Change summary: - Moved UGameplayStatics::CanSpawnObjectOfClass() into UK2Node_GenericCreateObject as a local util method (per JIRA notes). This was not exposed to Blueprints and as such was inconsistent with the rest of the API. - Modified UGameplayStatics::SpawnObject() to no longer call CanSpawnObjectOfClass(). This seemed redundant as this will already have been called during node validation at Blueprint compile time. - Refactored CanSpawnObjectOfClass() into FK2Node_GenericCreateObject_Utils. Walking up the inheritance chain no longer starts out w/ the assumption that 'BlueprintType' is set by default, which was previously including a lot of engine-specific classes into the "allowed" set (e.g. UByteProperty). Also unified the 2 loop iterations that were being used to check for 'BlueprintType'/'NotBlueprintType' and 'DontUseGenericSpawnObjectName', as well as the check for whether or not the class is a derivative of AActor/UActorComponent. - Modified UK2Node_GenericCreateObject::EarlyValidation() to call FK2Node_GenericCreateObject_Utils::CanSpawnObjectOfClass() and emit a slightly more informative error message to the BP compiler message log. Change 3518756 by Michael.Noland (4.17) Framework: Prevent various asserts when USplineComponent methods are called on a spline with no points Change 3518760 by Michael.Noland Core: Changed FRuntimeAssetCache ensures to ensureAsRuntimeWarning Change 3518771 by Michael.Noland AI: Prevent an ensure in UBlackboardComponent::ClearValue when called on a component with a null BlackboardAsset Change 3518818 by Michael.Noland Rendering: Fixed a whitespace issue in UCanvasRenderTarget2D::RepaintCanvas() #rnx Change 3518822 by Michael.Noland Sequencer: Prevented crashes in some methods of UMovieSceneSequencePlayer when there is no Sequence set Sequencer: Prevented a crash in FMovieSceneRootEvaluationTemplateInstance::Evaluate when the instance has no template set Change 3518824 by Michael.Noland Landscape: Marked ULandscapeComponent and ULandscapeHeightfieldCollisionComponent as Within=LandscapeProxy, since they do CastChecked on their Outer all the time Change 3519073 by Michael.Noland QAGame: Fixed a crash in UQASynth::PlaySynth() if called on a directly created instance rather than using the factory method Change 3519076 by Michael.Noland Preventing crashes in UAutomationPerformaceHelper (sic) when spawned abnormally for fuzzing (assumes that the outer will have a route to a world) #rnx Change 3519079 by Michael.Noland Sequencer: Fixed a potential crash in UMediaPlaylist::Insert and UMediaPlaylist::RemoveAt when passed an invalid index Change 3519081 by Michael.Noland Blueprints: Added support for creating appropriate outers for objects that must be nested within another class during fuzzing (ones that specify Within=, other relationships aren't knowable yet) Change 3519082 by Michael.Noland VR: Prevent a crash in UMRMeshComponent::ConnectReconstructor when passed a null reconstructor Change 3519084 by Michael.Noland Rendering: Prevent crashes when UNiagaraComponent::GetEffectDataInterface is called on a component with no effect asset set Change 3521889 by Michael.Noland Sequencer: Prevented a bogus static analysis warning by reworking the code (FixedFrameInterval could have only been set if the pointer were valid from the line above) #rnx Change 3521987 by Michael.Noland Animation: Prevent a couple of potential asserts in UControlRig::GetOrAllocateSubControlRig Change 3522101 by Michael.Noland Physics: Improved the comment on UPhysicalMaterial::Friction #rn Change 3522105 by Michael.Noland Physics: Fixed a few crashes in UVehicleWheel when spawned directly Change 3522106 by Michael.Noland Framework: Marked ULevelStreaming as Within=World, since it does CastChecked on the Outer all the time Change 3522109 by Michael.Noland Animation: Marked UAnimInstance as Within=SkeletalMeshComponent since it assumes the outer in various places Change 3522121 by Michael.Noland Mobile: Prevent UMobileInstalledContent methods from crashing when called on a created instance in an uncooked build (no installed manifest) Change 3522783 by Zak.Middleton #ue4 - Imported new simple collision for Engine/Content/BasicShaps/Cylinder.uasset which is a single convex shape (rather than being 4 shapes as before). Change 3525477 by Dan.Oconnor Remove Tooltip, Category, and HideCategories tooltip from the blueprint generated class if source data is cleared Change 3526538 by Ben.Zeigler Refresh primary asset labels if their bundles are different at all and not just if they're added or removed. This is required because they now work based on collections or directories. This fixes issue with the onboarding collection changes not correctly modifying chunks Copy of CL #3526501 Change 3526817 by Ben.Zeigler #jira UE-46917 Fix issue where maps that do not contain level script blueprints were being counted as unindexed for find in blueprints. The old behavior depended on detecting the existence of empty tags, but the asset registry now filters those out so treat maps with no FiB data as indexed Change 3526873 by Ben.Zeigler #jira UE-46627 Change it so blueprint or native subclasses of static mesh actor cannot be added to clusters, as they are not likely to be immutable the way the base class is Add code to to the ubergraph frame to fall back to hard reference serialization if the reference collector doesn't support weak references, such as the cluster collector Change 3526958 by Marc.Audy (4.17) Don't copy and then break pin links when reconstructing. Instead simply move. #jira UE-46935 Change 3528916 by Marc.Audy PR #3609: Adds GetKeysForAxis() to complement GetKeysForAction() in UPlayerInput (Contributed by alanedwardes) #jira UE-45347 Change 3529080 by mason.seay BP asset for undetermined type bug Change 3529381 by Marc.Audy Fix ability to insert duplicates in to a set or map Change 3529471 by Dan.Oconnor Fix for clang 4.0 error: definition of builtin function '__rdtsc' inline unsigned long long __rdtsc() Change 3530876 by Marc.Audy Based on PR #3457: Add MakeSet BP node (Contributed by projectgheist) Also refactored MakeArray/Set to share a base MakeContainer class Cleaned up some dead code from MakeArray Added icon for MakeSet Added Functional Test for MakeSet #jira UE-43717 Change 3531070 by Phillip.Kavan #jira UE-46866 - Fix crash on load when an external variable member reference's owning type cannot be loaded. Change summary: - Modified FBlueprintEditorUtils::GetSkeletonClass() to check for NULL before attempting to check for the generating BP. Change 3531081 by Marc.Audy Remove deprecated CustomMapParamValue code Change 3531094 by Phillip.Kavan #jira UE-46952 - Fix a packaging code build failure that will occur with a nativized Blueprint class that contains a UInterfaceProperty. Change summary: - Modified TScriptInterface::operator=() to cast the given 'SourceObject' instance to the 'InterfaceType' type before assigning to 'SourceInterface'. This was necessary because if the caller (in this case nativized codegen) passes in a UObject* that does not explicitly inherit from 'InterfaceType', then it will need to go through the object's GetInterfaceAddress() API instead and cast the result back to an 'InterfaceType' pointer. Change 3531186 by Phillip.Kavan Back out changelist 3531094 (temp CIS fix). #rnx Change 3532082 by Marc.Audy Move garbage collection timers and other management to UEngine instead of UWorld Fixes CollectGarbage blueprint node not working in shipping #jira UE-46566 Change 3532134 by Phillip.Kavan Restored changelist 3531094 w/ fix for non-unity. - Mirrored from //UE4/Release-4.17 (CL# 3531232). #rnx Change 3533009 by Marc.Audy Fixup missing function and deprecation warnings Change 3534056 by Marc.Audy (4.17) Fix expose on spawn of map and sets to work #jira UE-47140 Change 3534761 by Marc.Audy (4.17) Apply code review changes to Dev-Framework as well #rnx Change 3535147 by Dan.Oconnor Build fix, already made in 4.17 #rnx Change 3535530 by mason.seay Resaving to remove error when opening level blueprint Change 3535581 by Marc.Audy Class Properties are only identical if they are literally the same object. Do not consider the deep compare port flags as object property base does. #jira UE-46533 Change 3535583 by Marc.Audy When properties are imported in to a child actor component the cached instance data is invalidated, so clear it. #jira UE-46533 Change 3535617 by Marc.Audy PR #3788: UE-39237: Prevent (im-)pure casting during BP debugging (Contributed by projectgheist) #jira UE-47188 #jira UE-39237 Change 3535671 by Marc.Audy Change NodeFactory to look at interface to use sequence node instead of each node having to add itself Change 3535955 by Marc.Audy Prevent MakeSet from removing split pins Change 3536114 by Michael.Noland Paper2D: Removing deprecated code from 4.3/4.4 era #rnx Change 3536120 by Michael.Noland Animation: Removed deprecated FTAlphaBlend class and AlphaBlendType.h header Change 3536124 by Michael.Noland Physics: Removed deprecated methods that were replaced by _AssumesLocked variations Change 3536131 by Michael.Noland Slate: Converting remaining uses of EKeyboardFocusCause to EFocusCause and properly deprecating it Change 3536138 by Michael.Noland Slate: Removed any deprecated code older than 4.10 that didn't affect content compatibility Change 3536167 by Dan.Oconnor When a client provides a skeleton class as the self scope, make sure we also use a skel class for non-self scopes - but only if using the compilation manager. Skel classes are not reliably up to date when not using the compilation manager #jira UE-46904 Change 3536221 by Michael.Noland Editor: Removing deprecated code from 4.9 or earlier Change 3536240 by Michael.Noland Blueprints: Removed long-deprecated TypeToString method from the K2 schema #rnx Change 3536243 by Michael.Noland AI: Prevent crashes if UMockTask_Log is created manually rather than via the CreateTask factory method Change 3536244 by Michael.Noland Core: Prevent FScopedExternalProfilerBase::StopScopedTimer() from asserting if called an unmatched number of times with StartScopedTimer, as both are exposed to BPs now Change 3536250 by Michael.Noland CoreUObject: Removed any deprecated code older than 4.10 that didn't affect content compatibility Change 3536253 by Michael.Noland Core: Removed any deprecated code older than 4.10 that didn't affect content compatibility Change 3536310 by Michael.Noland Engine: Removed any deprecated code older than 4.10 that didn't affect content compatibility Change 3536397 by Mieszko.Zielinski Fixed UCrowdFollowingComponent::UpdateCachedDirections crashing when CharacterMovement is not set #UE4 #jira UE-46860 Change 3536404 by Michael.Noland Platform: Added a warning for others when they try to remove this 'deprecated' method Change 3536639 by Michael.Noland CharacterMovement: Changed the name of a variable introduced in CL# 3536397 to better match intent #rnx Change 3536893 by Michael.Noland Blueprints: Clear the stale value on the value pin when a map find node fails to find an item #jira UE-47233 Change 3536902 by Michael.Noland Framework: Killed a couple of more deprecated methods that were not exposed to Blueprints #rnx Change 3537038 by Ben.Marsh Fixing case of iOS directories, pt1 Change 3537039 by Ben.Marsh Fixing case of iOS directories, pt2 Change 3538246 by Michael.Noland UnrealTournament: Fixing issues with renamed enum #rnx Change 3538618 by Ben.Zeigler Fix ensure when closing sequencer transform UI Change 3540213 by Ben.Zeigler #jira UE-47313 Fix crash serializing a MapProperty where the value type has changed for a type that implements ConvertFromType. The address passed to ConvertFromType needs to be the container root, not the specific value address, keys worked because the offset was 0. Change 3540253 by Marc.Audy Only copy default values for input pins as output pins do not have them #rnx Change 3540376 by Marc.Audy Add utility FromPinType for FEdGraphTerminalType #rnx Change 3540433 by Marc.Audy Add MakeMap #jira UE-47093 Unify IsConnectionDisallowed for containers and fix static analysis warning #jira UE-47291 Change 3540585 by Phillip.Kavan #jira UE-47117 - Fix crash on launch of a nativized build that includes an instanced default subobject that's referenced by another instanced default subobject. Change summary: - Modified FEmitDefaultValueHelper::HandleSpecialTypes() to only direct HandleInstancedSubobject() to emit code to create the instanced subobject if it's not a default subobject. This was previously being incorrectly interpreted as an object having the 'RF_ArchetypeObject' flag set; however, default subobjects will also have that flag set in addition to the 'RF_DefaultSubobject' flag. - Modified FEmitDefaultValueHelper::HandleInstancedSubobject() to assert in the 'GetDefaultSubobjectByName' case if the given object is not also a default subobject. Change 3541147 by Dan.Oconnor Fix for not being able to override custom events when using the compilation manager post 3536167 #jira UE-47292 #rnx Change 3541177 by Ben.Zeigler #jira UE-46595, UE-46553 Fix issue where creating a widget template could cause a widget blueprint being cooked to have the wrong package flags, making it appear to be an uncooked package Copy of CL #3541027 Change 3541325 by Dan.Oconnor K2node data table data needs to preload data before the compilation queue is flushed #rnx #jira UE-47319 Change 3541409 by Michael.Noland Blueprints: Added code to reapply any active breakpoints after recompilation when using the BP compilation manager #jira UE-47322 [reimplementing CL# 3541404 in Dev-Framework] Change 3541418 by Dan.Oconnor Fix for bad SKEL_ CDO reference in blueprint bytecode #jira UE-47265 #rnx Change 3541482 by Dan.Oconnor Blanket fix up of preload calls that are being done in AllocateDefaultPins. AllocatDefaultPins is not called until compile, meaning if these preload calls load blueprints they will be loaded while the compilation manager is compiling blueprints #rnx #jira UE-47319 Change 3541817 by Marc.Audy Fix static analysis warnings #rnx Change 3542299 by Michael.Noland Blueprints: Speculative fix for static analysis warning #rnx Change 3542406 by Marc.Audy Use a check slow to avoid any cost #rnx Change 3542486 by Michael.Noland Asset Manager: Removing an unnecessary ensure (it's a potentially expected case) #jira UE-47380 Change 3542659 by Michael.Noland Blueprints: Clear out null entries in the LastEditedDocuments list during PostLoad() and remove entries when a graph is being deleted to prevent their generation in the first place #jira UE-47385 Change 3543620 by Dan.Oconnor Remove overzealous ensure - we may recompile blueprints that are asynchronously loading when a user triggers a synchronous compile #jira UE-47415 #rnx Change 3518415 by Ben.Zeigler #jira UE-46574 Deprecate IPlatformChunkInstall::SetChunkInstallDelgate as it was spelled wrong, was only half implemented, and did not support success vs failure Replace with AddChunkInstallDelegate, which supports a bool error code and is bound once instead of separately for each chunk. All implementations support this delegate at a basic level, although several could be improved to call the failure delegate in more cases Change 3534339 by Michael.Noland Platforms: Changed DEPRECATED() macro description to use 4.xx rather than a speciifc version in examples, so it doesn't show up when removing deprecated code [CL 3544050 by Marc Audy in Main branch]
2017-07-19 09:49:59 -04:00
InstallDelegate.Broadcast(InstallingChunkID, true);
}
EndInstall();
} break;
case ChunkInstallState::Installing:
case ChunkInstallState::RequestingTitleFiles:
case ChunkInstallState::WaitingOnRead:
default:
break;
}
if (OnlineTitleFileHttp.IsValid())
{
static_cast<FOnlineTitleFileHttp*>(OnlineTitleFileHttp.Get())->Tick(DeltaSeconds);
}
return true;
}
void FHTTPChunkInstall::UpdatePendingInstallQueue()
{
if (InstallingChunkID != -1
#if !UE_BUILD_SHIPPING
|| bDebugNoInstalledRequired
#endif
)
{
return;
}
check(!InstallService.IsValid());
bool bPatch = false;
while (PriorityQueue.Num() > 0 && InstallerState != ChunkInstallState::Installing)
{
const FChunkPrio& NextChunk = PriorityQueue[0];
TArray<IBuildManifestPtr> FoundChunkManifests;
RemoteManifests.MultiFind(NextChunk.ChunkID, FoundChunkManifests);
if (FoundChunkManifests.Num() > 0)
{
auto ChunkManifest = FoundChunkManifests[0];
auto ChunkIDField = ChunkManifest->GetCustomField("ChunkID");
if (ChunkIDField.IsValid())
{
BeginChunkInstall(NextChunk.ChunkID, ChunkManifest, FindPreviousInstallManifest(ChunkManifest));
}
else
{
PriorityQueue.RemoveAt(0);
}
}
else
{
PriorityQueue.RemoveAt(0);
}
}
if (InstallingChunkID == -1)
{
// Install the first available chunk
for (auto It = RemoteManifests.CreateConstIterator(); It; ++It)
{
if (It)
{
IBuildManifestPtr ChunkManifest = It.Value();
auto ChunkIDField = ChunkManifest->GetCustomField("ChunkID");
if (ChunkIDField.IsValid())
{
BeginChunkInstall(ChunkIDField->AsInteger(), ChunkManifest, FindPreviousInstallManifest(ChunkManifest));
return;
}
}
}
}
}
EChunkLocation::Type FHTTPChunkInstall::GetChunkLocation(uint32 ChunkID)
{
#if !UE_BUILD_SHIPPING
if(bDebugNoInstalledRequired)
{
return EChunkLocation::BestLocation;
}
#endif
// Safe to assume Chunk0 is ready
if (ChunkID == 0)
{
return EChunkLocation::BestLocation;
}
if (bFirstRun || !bSystemInitialised)
{
/** Still waiting on setup to finish, report that nothing is installed yet... */
return EChunkLocation::NotAvailable;
}
TArray<IBuildManifestPtr> FoundManifests;
RemoteManifests.MultiFind(ChunkID, FoundManifests);
if (FoundManifests.Num() > 0)
{
return EChunkLocation::NotAvailable;
}
InstalledManifests.MultiFind(ChunkID, FoundManifests);
if (FoundManifests.Num() > 0)
{
return EChunkLocation::BestLocation;
}
return EChunkLocation::DoesNotExist;
}
float FHTTPChunkInstall::GetChunkProgress(uint32 ChunkID,EChunkProgressReportingType::Type ReportType)
{
#if !UE_BUILD_SHIPPING
if (bDebugNoInstalledRequired)
{
return 100.f;
}
#endif
// Safe to assume Chunk0 is ready
if (ChunkID == 0)
{
return 100.f;
}
if (bFirstRun || !bSystemInitialised)
{
/** Still waiting on setup to finish, report that nothing is installed yet... */
return 0.f;
}
TArray<IBuildManifestPtr> FoundManifests;
RemoteManifests.MultiFind(ChunkID, FoundManifests);
if (FoundManifests.Num() > 0)
{
float Progress = 0;
if (InstallingChunkID == ChunkID && InstallService.IsValid())
{
Progress = InstallService->GetUpdateProgress();
}
return Progress / FoundManifests.Num();
}
InstalledManifests.MultiFind(ChunkID, FoundManifests);
if (FoundManifests.Num() > 0)
{
return 100.f;
}
return 0.f;
}
void FHTTPChunkInstall::OSSEnumerateFilesComplete(bool bSuccess)
{
InstallerState = bSuccess ? ChunkInstallState::SearchTitleFiles : ChunkInstallState::EnterOfflineMode;
}
void FHTTPChunkInstall::OSSReadFileComplete(bool bSuccess, const FString& Filename)
{
InstallerState = bSuccess ? ChunkInstallState::ReadComplete : ChunkInstallState::EnterOfflineMode;
}
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
void FHTTPChunkInstall::OSSInstallComplete(const IBuildInstallerRef& Installer)
{
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
if (Installer->CompletedSuccessfully())
{
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
if (!ensure(Installer->GetConfiguration().InstallerActions.Num() > 0))
{
EndInstall();
return;
}
IBuildManifestRef BuildManifest = Installer->GetConfiguration().InstallerActions[0].GetInstallManifest();
// Completed OK. Write the manifest. If the chunk doesn't exist, copy to the content dir.
// Otherwise, writing the manifest will prompt a copy on next start of the game
FString ManifestName;
FString ChunkFdrName;
uint32 ChunkID;
bool bIsPatch;
if (!BuildChunkFolderName(BuildManifest, ChunkFdrName, ManifestName, ChunkID, bIsPatch))
{
//Something bad has happened, bail
EndInstall();
return;
}
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Chunk %d install complete, preparing to copy to content directory"), ChunkID);
FString ManifestPath = FPaths::Combine(*InstallDir, *ChunkFdrName, *ManifestName);
FString HoldingManifestPath = FPaths::Combine(*HoldingDir, *ChunkFdrName, *ManifestName);
FString SrcDir = FPaths::Combine(*InstallDir, *ChunkFdrName);
FString DestDir = FPaths::Combine(*ContentDir, *ChunkFdrName);
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
bool bCopyDir = InstallDir != ContentDir;
TArray<IBuildManifestPtr> FoundManifests;
InstalledManifests.MultiFind(ChunkID, FoundManifests);
for (const auto& It : FoundManifests)
{
auto FoundPatchField = It->GetCustomField("bIsPatch");
bool bFoundPatch = FoundPatchField.IsValid() ? FoundPatchField->AsString() == TEXT("true") : false;
if (bFoundPatch == bIsPatch)
{
bCopyDir = false;
}
}
ChunkCopyInstall.SetupWork(ManifestPath, HoldingManifestPath, SrcDir, DestDir, BPSModule, BuildManifest, MountedPaks, bCopyDir);
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Copying Chunk %d to content directory"), ChunkID);
ChunkCopyInstallThread.Reset(FRunnableThread::Create(&ChunkCopyInstall, TEXT("Chunk Install Copy Thread")));
InstallerState = ChunkInstallState::CopyToContent;
}
else
{
//Something bad has happened, return to the Idle state. We'll re-attempt the install
EndInstall();
}
}
void FHTTPChunkInstall::ParseTitleFileManifest(const FString& ManifestFileHash)
{
#if !UE_BUILD_SHIPPING
if (bDebugNoInstalledRequired)
{
// Forces the installer to think that no remote manifests exist, so nothing needs to be installed.
return;
}
#endif
Copying //UE4/Dev-Main to //UE4/Main (Source: //Portal/Main/Engine @ 4247640) #rb none #lockdown Nick.Penwarden ============================ MAJOR FEATURES & CHANGES ============================ Change 4247640 by Daniel.Lamb BuildPatchTool: PackageChunks: Fixed issue with filenames not being set for chunkdbs in particular cases where the chunkdbs were small. Change 4247246 by Leigh.Swift BuildPatchTool: Adding support to BPT PackageChunks to filter by tagsets, and also split chunkdb output by them too. Change 4173518 by Wes.Fudala WebBrowser: Adding support to enable allowing net security expirations. Change 4102451 by Leigh.Swift BuildPatchTool: PackageChunks: Adding tool mode JSON output for listing created chunkdb files. Change 4099951 by Leigh.Swift BuildPatchTool: PackageChunks: Adding PrevManifestFile commandline support to BPT PackageChunks mode, allowing us to generate chunkdbs that only cover data required to perform an update. Change 4051406 by Leigh.Swift BuildPatchServices: Update default number of simultaneous downloads for an installer to 16 which is now well proven in the wild. Change 4036807 by Leigh.Swift BuildPatchServices: Added new message type for receiving updates about which files have been touched by the installation. BuildPatchServices: Cloud enumeration is now threaded to improve speed. Change 4036477 by Richard.Fawcett Thirdparty: AWSSDK: Update AWS SDK to version 3.3 as speculative fix for object is used after being disposed error. Confirmed this exception is being raised from within the AWS SDK, and _not_ in Epic code. Advice by Amazon on AWS forums for people experiencing this exception is always to update to the latest version of the SDK in the first instance. Change 3922493 by Justin.Sargent Runtime: Added shortcircuit support to the ExpressionParser. More documentation to come. AgreementExpressionEvaluator has been updated to use the shortcircuit logic so it now processes expressions lef to right as expected in all cases. AgreementExpressionEvaluator was also updated to perform evaluation as a two pass system. The tow pass solution prevents over prompting eulas in certain scenarios where the expression would ultimately resolve true without them. Change 3983713 by Barnabas.McManners BuildPatchServices: Fix for verification logging error counts for unique runs. Solved the issue by using an external cache of the errors encountered each run to deduct from the total. Reporting only the delta. Change 3966915 by Wes.Fudala WebBrowser: CEF: Potential fix for a rare issue encountered when we attempting to release resources outside of the game thread. Change 3955168 by Justin.Sargent BuildPatchServices: Updated primary messaging of overall install status to now display Updating when patching an existing installation rather than Installing. Change 3954610 by Leigh.Swift BuildPatchServices: Fixing issue with Cloud Chunk Source which would erroneously conclude that it needed to re-download a chunk due to external system failure. There is now an explicit concept of 'lost chunk' which is tracked and bubbled up by the system errors that cause the loss in the first place, so that each source knows exactly when it should be required to retrieve a chunk that it had already retrieved previously. Being explicit, these lost chunks can also now contribute to the total download required stat. Also fixing some tracking that was missing to update the total download required stat if a local Install Chunk Source failed to load data from the files on disk and so these chunks needed to be additionally downloaded. Change 3947928 by Chad.Garyet UAT: Changing commandutils to attempt to find the Win8.1sdk signtool before the win10 one. There's currently a bug related to vs2017/server2012r2/win10sdk signtool that causes it to exit with an undefined error when signing from a service account. Using the win8.1sdk circumvents this issue. Change 3942776 by Rob.Cannaday Http: Fix for Mac sending up duplicate header strings Change 3940306 by Leigh.Swift BuildPatchServices: Refactor to isolate CoreUObject dependency and be able to compile out usage. Change 3936655 by Justin.Sargent Slate: Changed the invalid fontcache ensure in ShapedTextCache from always to only once to reduce ensure spamChange 3917840 by Leigh.Swift BuildPatchTool: DiffManifests mode now also saves info for New, Removed, Changed, and Unchanged file to the output json file. Change 3911756 by Justin.Sargent WebBrowser: SWebBrowserView now ensures that it has a valid pointer to it's parent window in it's onpaint to avoid issues with the first frame being scaled incorrectly due to not being able to access the parent windows dpi scaling. Change 3906670 by Justin.Sargent Slate: Change the ShapedTextCache to hold a weakptr to the Slate FontCache instead of a reference. This will allow it to detect if the FontCache has become invalid since it was linked with the ShapedTextCache, thus making it able to avoid crashing. Change 3889008 by Justin.Sargent StandaloneRenderer: Made the SlateD3DRenderingPolicy more resilient to graphics device errors. Change 3886969 by Justin.Sargent StandaloneRenderer:Changed SlateD3DConstantBuffer to no longer check on a D3DDevice failure and instead soft fail, so the application can go through the process of attempting to re-establish the D3DDevice. Change 3886960 by Justin.Sargent WebBrowser: Made CEFWebBrowserWindow more resilient to issues with creating textures. Change 3855821 by Barnabas.McManners BuildPatchServices: Added logging of the configuration to the start of all installs. Change 3839245 by Wes.Fudala WebBrowser: Adding support for web browser drag regions. These are areas of a page tagged with -webkit-app-region: drag or -webkit-app-region: no-drag. The application can now pass a handler function to the browser to handle window drag events. This handler will be called if the browser detects mouse drag events inside of a tagged drag region. Change 3835225 by Jacob.Hedges Slate: Fix for SScrollBarTrack size issue Change 3824320 by Wes.Fudala WebBrowser: Fix for reported deadlock in WebBrowserSingleton. Associated with github pull request #4303. #jira UE-53420 GitHub 4330 : Fixed deadlock in FWebBrowserSingleton #4303 Change 3811191 by Barnabas.McManners BuildPatchServices: Expanded MF01-X into MF01-X-X and MF02-X where X is the os error codes Change 3807662 by Barnabas.McManners BuildPatchServices: Broke down build verification errors into 4 new cases. Change 3805698 by Leigh.Swift BuildPatchServices: Speculative fixes for Unit test crashes / failures. Change 3804175 by Wes.Fudala ThirdParty: CEF: Adding browser locale pak files for es-MX, and es-ES as the typical mapping/fallback does not seem functional on mac browser. They are copies of es_419 and es respectively. Change 3786628 by Leigh.Swift WebBrowser: Exposing ability to customise tool tip widgets produced from SWebBrowserView. Change 3775678 by Richard.Fawcett BuildPatchServices: Allow a Prerequisite install only mode. Change 3774365 by Justin.Sargent BuildPatchServices: Updated Build Stat report that is logged after every installation to use FText::AsMemory instead of the UnitConversion logic, and now it outputs multiple unit types for convenience. Change 3774361 by Justin.Sargent Http: Remove Pragma: no-cache header from libcurl requests Change 3774258 by Leigh.Swift BuildPatchServices: Fix for destructive patch destroy files that contain useful data. Change 3766156 by Barnabas.McManners Http: Various lower changes to enable Hardware testing and to enable proxy configuration. Change 3756723 by Leigh.Swift BuildPatchServices: Hooking up disk chunk store operation states to the installer statistics. BuildPatchServices: Memory chunk store statistics fix for booted chunks that have been reloaded. Change 3756320 by Rob.Cannaday Http: Add default headers added to every HTTP request. Change 3741274 by Wes.Fudala WebBrowser: Release CEF related references prior to CEF shutdown. Change 3738003 by Leigh.Swift BuildPatchServices: Fix-ups for install stats when failures are occurring NumFilesOutdated now only set on first run, so it is not set to the number of files that are retried. Total downloaded data and total download requirement stats fixed up for runtime as well as final values. Initial chunk counters now only set for first run. Moving the GetBytesDownloaded api from cloud source to download service so that it correctly accumulates. InstallSource was multiply attempting, and counting, recycle failures, throwing that stat out of proportion. Change 3729851 by Barnabas.McManners BuildPatchServices: Changed the installer's MoveFile method to default to not retry. We currently only have uses of move file which already handle retry. Change 3725611 by Leigh.Swift Core: FText::AsMemory - Fix for numerical edges. Added unit tests to check all edges up to full uint64 range. Change 3725127 by Leigh.Swift BuildPatchServices: ManifestDiff: Correcting string format padding for new data size output uints. Change 3725126 by Leigh.Swift Core: FText::AsMemory fix. Shifting (equivalent of divide 2 per shift) does not work for calculating SI units which are base 10. Change 3721926 by Justin.Sargent ThirdParty: LibCurl update performed by Simon Tourangeau. We now have 100MB/sec download speed with libcurl on Win64, compared to 3MB/sec originally Change 3700670 by Michael.Trepka SlateReflector: Fixed mouse click highlighting in Widget Reflector's Demo Mode in high DPI Change 3697526 by Leigh.Swift BuildPatchServices: Exposing a suite of runtime statistics for BuildPatchInstallers. Change 3686439 by Leigh.Swift BuildPatchServices: Stop installers from always logging a shutdown error on destruction. This should only occur if the installer is actually running. Change 3684747 by Leigh.Swift BuildPatchTool: Fix file ignore list to parse using platform agnostic method. Change 3643038 by Michael.Trepka Core: Don't defer Cocoa calls in FMacWindow Show and Hide to make sure both actions complete before we exit these functions. This solves the problem with the blocks being called after window was destroyed. Change 3639692 by Michael.Trepka Fixes for a couple of issues found by address sanitizer Change 3625568 by Leigh.Swift BuildPatchServices: Fixing numerical limits problem with double -> uint64 in FStatsCollector::SecondsToCycles(). Change 3617948 by Leigh.Swift BuildPatchServices: Disk space requirement can now be lower when patching if destructive patch mode is enabled. This mode will delete existing old files once they are not needed. BuildPatchServices: Adding new installation mode setting on installer config. BuildPatchServices: If destructive installation mode is enabled, the file constructor will delete old existing files after completing the new one. BuildPatchServices: Adding missing file path length check for install location to cover situation where staging directory is outside the install directory. Change 3593632 by Leigh.Swift BuildPatchServices: Adding additional installation tracking to BuildPatchServices. See Engine/Source/Runtime/Online/BuildPatchServices/Public/Interfaces/IBuildInstaller.h [CL 4273704 by Leigh Swift in Main branch]
2018-08-09 17:55:56 -04:00
auto RemoteManifest = BPSModule->MakeManifestFromData(FileContentBuffer);
if (!RemoteManifest.IsValid())
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Manifest was invalid"));
return;
}
auto RemoteChunkIDField = RemoteManifest->GetCustomField("ChunkID");
if (!RemoteChunkIDField.IsValid())
{
UE_LOG(LogHTTPChunkInstaller, Warning, TEXT("Manifest ChunkID was invalid or missing"));
return;
}
//Compare to installed manifests and add to the remote if it needs to be installed.
uint32 ChunkID = (uint32)RemoteChunkIDField->AsInteger();
ExpectedChunks.Add(ChunkID);
TArray<IBuildManifestPtr> FoundManifests;
InstalledManifests.MultiFind(ChunkID, FoundManifests);
uint32 FoundCount = FoundManifests.Num();
if (FoundCount > 0)
{
auto RemotePatchManifest = RemoteManifest->GetCustomField("bIsPatch");
auto RemoteVersion = RemoteManifest->GetVersionString();
bool bRemoteIsPatch = RemotePatchManifest.IsValid() ? RemotePatchManifest->AsString() == TEXT("true") : false;
for (uint32 FoundIndex = 0; FoundIndex < FoundCount; ++FoundIndex)
{
const auto& InstalledManifest = FoundManifests[FoundIndex];
auto InstalledVersion = InstalledManifest->GetVersionString();
auto InstallPatchManifest = InstalledManifest->GetCustomField("bIsPatch");
bool bInstallIsPatch = InstallPatchManifest.IsValid() ? InstallPatchManifest->AsString() == TEXT("true") : false;
if (InstalledVersion != RemoteVersion && bInstallIsPatch == bRemoteIsPatch)
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to remote manifests"), ChunkID);
RemoteManifests.Add(ChunkID, RemoteManifest);
if(!ManifestFileHash.IsEmpty())
{
ManifestsInMemory.Add(ManifestFileHash);
}
//Remove from the installed map
if (bFirstRun)
{
// Prevent the paks from being mounted by removing the manifest file
FString ChunkFdrName;
FString ManifestName;
bool bIsPatch;
if (BuildChunkFolderName(InstalledManifest.ToSharedRef(), ChunkFdrName, ManifestName, ChunkID, bIsPatch))
{
FString ManifestPath = FPaths::Combine(*ContentDir, *ChunkFdrName, *ManifestName);
FString HoldingPath = FPaths::Combine(*HoldingDir, *ChunkFdrName, *ManifestName);
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
PlatformFile.CreateDirectoryTree(*FPaths::Combine(*HoldingDir, *ChunkFdrName));
PlatformFile.MoveFile(*HoldingPath, *ManifestPath);
}
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to previous installed manifests"), ChunkID);
PrevInstallManifests.Add(ChunkID, InstalledManifest);
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Removing Chunk %d from installed manifests"), ChunkID);
InstalledManifests.Remove(ChunkID, InstalledManifest);
}
}
}
}
else
{
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding Chunk %d to remote manifests"), ChunkID);
RemoteManifests.Add(ChunkID, RemoteManifest);
if (!ManifestFileHash.IsEmpty())
{
ManifestsInMemory.Add(ManifestFileHash);
}
}
}
bool FHTTPChunkInstall::BuildChunkFolderName(IBuildManifestRef Manifest, FString& ChunkFdrName, FString& ManifestName, uint32& ChunkID, bool& bIsPatch)
{
auto ChunkIDField = Manifest->GetCustomField("ChunkID");
auto ChunkPatchField = Manifest->GetCustomField("bIsPatch");
if (!ChunkIDField.IsValid())
{
return false;
}
ChunkID = ChunkIDField->AsInteger();
bIsPatch = ChunkPatchField.IsValid() ? ChunkPatchField->AsString() == TEXT("true") : false;
ManifestName = FString::Printf(TEXT("chunk_%u"), ChunkID);
if (bIsPatch)
{
ManifestName += TEXT("_patch");
}
ManifestName += TEXT(".manifest");
ChunkFdrName = FString::Printf(TEXT("%s%d"), !bIsPatch ? TEXT("base") : TEXT("patch"), ChunkID);
return true;
}
bool FHTTPChunkInstall::PrioritizeChunk(uint32 ChunkID, EChunkPriority::Type Priority)
{
int32 FoundIndex;
PriorityQueue.Find(FChunkPrio(ChunkID, Priority), FoundIndex);
if (FoundIndex != INDEX_NONE)
{
PriorityQueue.RemoveAt(FoundIndex);
}
// Low priority is assumed if the chunk ID doesn't exist in the queue
if (Priority != EChunkPriority::Low)
{
PriorityQueue.AddUnique(FChunkPrio(ChunkID, Priority));
PriorityQueue.Sort();
}
return true;
}
FDelegateHandle FHTTPChunkInstall::SetChunkInstallDelgate(uint32 ChunkID, FPlatformChunkInstallCompleteDelegate Delegate)
{
FPlatformChunkInstallCompleteMultiDelegate* FoundDelegate = DelegateMap.Find(ChunkID);
if (FoundDelegate)
{
return FoundDelegate->Add(Delegate);
}
else
{
FPlatformChunkInstallCompleteMultiDelegate MC;
auto RetVal = MC.Add(Delegate);
DelegateMap.Add(ChunkID, MC);
return RetVal;
}
return FDelegateHandle();
}
void FHTTPChunkInstall::RemoveChunkInstallDelgate(uint32 ChunkID, FDelegateHandle Delegate)
{
FPlatformChunkInstallCompleteMultiDelegate* FoundDelegate = DelegateMap.Find(ChunkID);
if (!FoundDelegate)
{
return;
}
FoundDelegate->Remove(Delegate);
}
void FHTTPChunkInstall::BeginChunkInstall(uint32 ChunkID,IBuildManifestPtr ChunkManifest, IBuildManifestPtr PrevInstallChunkManifest)
{
check(ChunkManifest->GetCustomField("ChunkID").IsValid());
InstallingChunkID = ChunkID;
check(ChunkID > 0);
InstallingChunkManifest = ChunkManifest;
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
auto PatchField = ChunkManifest->GetCustomField("bIsPatch");
bool bIsPatch = PatchField.IsValid() ? PatchField->AsString() == TEXT("true") : false;
auto ChunkFolderName = FString::Printf(TEXT("%s%d"),!bIsPatch ? TEXT("base") : TEXT("patch"), InstallingChunkID);
auto ChunkInstallDir = FPaths::Combine(*InstallDir,*ChunkFolderName);
auto ChunkStageDir = FPaths::Combine(*StageDir,*ChunkFolderName);
if(!PlatformFile.DirectoryExists(*ChunkStageDir))
{
PlatformFile.CreateDirectoryTree(*ChunkStageDir);
}
if(!PlatformFile.DirectoryExists(*ChunkInstallDir))
{
PlatformFile.CreateDirectoryTree(*ChunkInstallDir);
}
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
TArray<BuildPatchServices::FInstallerAction> InstallerActions;
InstallerActions.Add(BuildPatchServices::FInstallerAction::MakeInstallOrUpdate(PrevInstallChunkManifest, ChunkManifest.ToSharedRef(), TSet<FString>()));
BuildPatchServices::FBuildInstallerConfiguration Configuration(MoveTemp(InstallerActions));
Configuration.StagingDirectory = ChunkStageDir;
Configuration.CloudDirectories = { CloudDir + TEXT("/") + CloudDirectory };
Configuration.InstallDirectory = ChunkInstallDir;
UE_LOG(LogHTTPChunkInstaller,Log,TEXT("Starting Chunk %d install"),InstallingChunkID);
Copying //UE4/Portal-Staging to //UE4/Main (Source: //Portal/Main/Engine @ 8661229) Change 8553543 by Wes.Fudala We now set a fixed value of 24 to CEF screenInfo colorDepth when off screen rendering is enabled. Change 8235770 by Wes.Fudala Fix for CEFJsScripting memory stomp and memory alignment errors called out by the stomp memory allocator when running with -stompmalloc on the commandline. Change 8065597 by Leigh.Swift BuildPatchServices: Improving ChunkBuildDirectory behaviour when dealing with empty build or builds only containing empty files. This is now fully supported as part of the generation flow rather than an early detected edge case. Change 7641628 by Leigh.Swift BuildPatchServices: Tweaks to serialisation safety. BuildPatchServices: DiskChunkStore fix for crash when chunkdump serialisation fails due to disk space. Change 7436869 by Leigh.Swift BuildPatchServices: Fix regression in BPT package chunks for cloud save improvements now require message pumping. Change 7326553 by Wes.Fudala BuildPatchServices: Attempt to restore functionality of the -SkipBuildPatchPrereq commandline. This stopped functioning in CL# 6655502 with the BPS DLC related refactors. The issue was reported by a number of users that were relying on this commandline as a last resort workaround for prereq install issues. Change 7323945 by Leigh.Swift BuildPatchServices: BuildPatchTool: Install time coefficient values exposed by DiffManifests. This gives an indicative install duration. The time is not necessarily accurate, but the simulation is a constant and so the value is highly comparable between different builds. Change 7310352 by Antony.Carter BuildPatchServices: Adding support for overriding http path for chunk requests. This allows the ability to support signed urls when downloading patch data. Change 7095282 by Leigh.Swift BuildPatchServices: Fix regression with manifests that have no core files. Change 7092198 by leigh.swift BuildPatchServices: Reuse existing code from FBuildPatchAppManifest::GetChunkShaHash in FBuildPatchManifestSet::GetChunkShaHash. This fixes an issue where older manifest files that did not ship with chunk sha values in them, can skip sha validation of chunks like pre-DLC launcher did. Change 6959115 by Wes.Fudala Added functionality that will optionally expose embedded browser console logs to the client. Change 6835841 by Leigh.Swift BuildPatchServices: Rearranging manifest save logic to avoid unnecessary seeking forwards, which avoids an assert when undetected write failures occur. Change 6684994 by Leigh.Swift BuildPatchServices: Don't clean empty directories if staging only. Change 6655502 by Mike.Erickson, Leigh.Swift, Wes.Fudala BuildPatchServices: Restructuring how installers are configured and make use of manifest files in order to combine multiple actions on an installation directory into one installer. This resembles a feature set for a better DLC installation experience. Change 6404031 by Richard.Fawcett BuildPatchTool: Only append ".manifest" to output filename if output filename has been specified on the command line. This was causing a manifest file called literally ".manifest" to be output to the clouddir if -OutputFilename was not specified. Change 6077240 by Wes.Fudala Execution of browser resource load complete delegate now happens on the main thread. Change 6076171 by Leigh.Swift BuildPatchTool: PatchGeneration: ChunkDeltaOptimise: PackageChunks: Improved corrupt output protection against ill timed taskkill, by serialising to temp filename, and then rename on success. BuildPatchTool: PatchGeneration: Manifest file extension added if not provided, fixing an oversight and inconsistency with other mode behaviours. BuildPatchTool: Compactify: Only warn when failing to get a file size, if the file still exists. Otherwise log instead. Change 6049003 by Leigh.Swift BuildPatchServices: Adding ProcessRequiredDiskSpace to Launcher.Install.Stats which represents how much disk space the install/update process needed to complete. BuildPatchServices: Adding ProcessAvailableDiskSpace to Launcher.Install.Stats which represents how much disk space was available at the time of checking required disk space. Change 5915157 by Leigh.Swift BuildPatchTool: Adding a statistic to diffmanifests for temporary disk space requirement to apply the patch. Change 5934838 by Leigh.Swift BuildPatchTool: PackageChunks: Adding support to provide a tagset for the previous build manifest when producing chunkdbs. This allows expanding the chunks saved out to cover tagsets not installed in the previous build. Change 5838666 by wes.fudala Browser can now bubble up the state of completed web resource loads. Change 5689493 by Leigh.Swift Adding new x86 and x64 MS VC141 CRT redist, version 14.16.27012 Change 5689462 by Leigh.Swift Fixing process handle leaks on windows. Core was leaking for getting an application name. Change 5500917 by Leigh.Swift BuildPatchTool: Adding new arg DiffAbortThreshold to ChunkDeltaOptimise mode which allows skipping of the operation if the original delta is so large that it would take too long to process, and likely have little benefit. BuildPatchTool: Switching some Log output to use Display so that it will appear in EC and CMD windows. Change 5337482 by Leigh.Swift BuildPatchTool: Fix for DiffManifests mode not accurately representing delta size for tagged install sets. Change 5261246 by Leigh.Swift BuildPatchServices: Fix for file download needing to mock response codes for higher layer statistics code which tracks data sizes and speeds. This is a regression from previous change to correct download failure vs corruption statistics. Change 5224725 by Leigh.Swift BuildPatchServices: Fix for delta download of more than 0 bytes when no update is necessary. BuildPatchServices: Skip requesting delta metafile if no file changes are actually required for a patch. BuildPatchTool: Reduce unnecessary data produced by BPT ChunkDeltaOptimise mode. Change 5010941 by Mike.Erickson BuildPatchServices: Add download scaling based on average speed per request, maximum count, and download health. Change 5010845 by Wes.Fudala BuildPatchServices: IDownload refactored to have specific request and response success functions, to make it clearer that a successful request does not mean the response was also good. BuildPatchServices: Fixed issues with download failures reporting as corruptions. Change 5000643 by Wes.Hunt Remove HttpServiceTracker from UE4. Change 4884381 by Leigh.Swift BuildPatchTool: Fix for Package Chunks mode hanging when no chunks were required. Change 4848675 by Justin.Sargent, Leigh.Swift Speculative fixes for graphics device lost related crash, by adding additional d3d api result checks. Improved logging for graphics device lost handling. Improved logging for tracking down common font loading failure resulting in an ensure. Change 4831134 by Leigh.Swift BuildPatchTool: Fix for crash in patchgeneration when fast-forward path replays no match. Change 4801714 by Wes.Fudala Fix for CEF issue encountered when building using Mac Mojave + XCode10. Change 4719149 by Leigh.Swift BuildPatchTool: PatchGeneration mode cyclic data optimisation, reduces SHA calculation requirement counts for cyclic data. BuildPatchTool: PatchGeneration mode fix for a bug causing non-optimal match insertion idx searching when there are 10k+ matches per scanner. Change 4680963 by Leigh.Swift BuildPatchTool: ChunkDeltaOptimise mode is now FeatureLevel upgrade / downgrade aware. Change 4680947 by Leigh.Swift BuildPatchTool: Compactify speed improvements for massive network cloud directories. Change 4656991 by Leigh.Swift BuildPatchServices: Make sure chunk writer robustly discovers if a chunk fails to save out. Change 4647815 by Leigh.Swift Upping the minimum wait time for UdpMessageBeacon thread so that it will not always wait 0ms when network sends are failing, reducing disconnect CPU usage. Adding configurable tick rate logic to XmppConnectionJingle thread. It will now default to 100Hz max. Change 4627355 by Michael.Trepka Fixed a problem with CEF being unable to find locale pak files on Mac for certain language/region combinations Change 4620800 by Leigh.Swift Fix for CEF crash when disabling a web window that has not yet got a parent window. There's no need to worry about focus in this case. Change 4590207 by Leigh.Swift BuildPatchTool: PackageChunks mode now supports FeatureLevel arg Change 4590103 by leigh.swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4590089 by Leigh.Swift BuildPatchTool: Adding new mode ChunkDeltaOptimise which reducing the download size when patching between two specific builds in a specific direction. BuildPatchTool: Updated Enumeration, DiffManifests, Compactify, PackageChunks, and VerifyChunks modes to take account of new delta data. BuildPatchServices: Installers now have a single shared memory chunk store, which reduces the requirement for booting Change 4341076 by Leigh.Swift BuildPatchServices: Making FBuildPatchAppManifest::GetRemovableFiles more robust to handle directories with or without trailing slash. Change 4331754 by Leigh.Swift BuildPatchTool: Added support for selecting ChunkWindowSize when generating patches. BuildPatchTool: Added support for providing the FeatureLevel command-line argument to indicate the data version that should be saved out by patch generation. This warns about defaulting to LatestJson if not provided. BuildPatchTool: Added support for generating patches with recognition for any chunks with any ChunkWindowSize found in the provided CloudDir. BuildPatchTool: Added command-line -IgnoreOtherWindowSizes param which if provided, the generation code will only accept chunk matches that are the same as ChunkWindowSize. BuildPatchServices: Fixes for supporting installations that use any ChunkWindowSize. BuildPatchServices: New manifest file format to reduce file size, this is now raw compressed binary data. #lockdown Nick.Penwarden #rb none [CL 8675597 by Leigh Swift in Main branch]
2019-09-13 13:24:23 -04:00
InstallService = BPSModule->CreateBuildInstaller(Configuration, FBuildPatchInstallerDelegate::CreateRaw(this, &FHTTPChunkInstall::OSSInstallComplete));
InstallService->StartInstallation();
if(InstallSpeed == EChunkInstallSpeed::Paused && !InstallService->IsPaused())
{
InstallService->TogglePauseInstall();
}
InstallerState = ChunkInstallState::Installing;
}
/**
* Note: the following cache functions are synchronous and may need to become asynchronous...
*/
bool FHTTPChunkInstall::AddDataToFileCache(const FString& ManifestHash,const TArray<uint8>& Data)
{
if (ManifestHash.IsEmpty())
{
return false;
}
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Adding data hash %s to file cache"), *ManifestHash);
return FFileHelper::SaveArrayToFile(Data, *FPaths::Combine(*CacheDir, *ManifestHash));
}
bool FHTTPChunkInstall::IsDataInFileCache(const FString& ManifestHash)
{
if(ManifestHash.IsEmpty())
{
return false;
}
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
return PlatformFile.FileExists(*FPaths::Combine(*CacheDir, *ManifestHash));
}
bool FHTTPChunkInstall::GetDataFromFileCache(const FString& ManifestHash, TArray<uint8>& Data)
{
if(ManifestHash.IsEmpty())
{
return false;
}
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Reading data hash %s from file cache"), *ManifestHash);
return FFileHelper::LoadFileToArray(Data, *FPaths::Combine(*CacheDir, *ManifestHash));
}
bool FHTTPChunkInstall::RemoveDataFromFileCache(const FString& ManifestHash)
{
if(ManifestHash.IsEmpty())
{
return false;
}
UE_LOG(LogHTTPChunkInstaller, Log, TEXT("Removing data hash %s from file cache"), *ManifestHash);
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
auto ManifestPath = FPaths::Combine(*CacheDir, *ManifestHash);
if (PlatformFile.FileExists(*ManifestPath))
{
return PlatformFile.DeleteFile(*ManifestPath);
}
return false;
}
void FHTTPChunkInstall::InitialiseSystem()
{
BPSModule = GetBuildPatchServices();
#if !UE_BUILD_SHIPPING
const TCHAR* CmdLine = FCommandLine::Get();
if (!FPlatformProperties::RequiresCookedData() || FParse::Param(CmdLine, TEXT("NoPak")) || FParse::Param(CmdLine, TEXT("NoChunkInstall")))
{
bDebugNoInstalledRequired = true;
}
#endif
// Grab the title file interface
FString TitleFileSource;
bool bValidTitleFileSource = GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("TitleFileSource"), TitleFileSource, GEngineIni);
if (bValidTitleFileSource && TitleFileSource == TEXT("Http"))
{
OnlineTitleFile = OnlineTitleFileHttp = MakeShareable(new FOnlineTitleFileHttp(CloudDir));
}
/* else if (bValidTitleFileSource && TitleFileSource != TEXT("Local"))
{
OnlineTitleFile = Online::GetTitleFileInterface(*TitleFileSource);
}*/
else
{
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3548365) #lockdown Nick.Penwarden ============================ MAJOR FEATURES & CHANGES ============================ Change 3494741 by Steve.Robb Generated code size savings. #jira UE-43048 Change 3495484 by Steve.Robb Fix for generated indices of static arrays when saving configs. Change 3497926 by Robert.Manuszewski Removed FPackageFileSummary's CompressedChunks array as it was no longer being used by anything. Change 3498077 by Robert.Manuszewski Only use the recursion guard in async loading code when the event driven loader is enabled. Change 3498112 by Ben.Marsh UBT: Respect the option to not create debug info in the Android toolchain. This option is already being respected by the compiler, but the linker adds debug info of its own. Change 3500239 by Robert.Manuszewski Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes. Change 3500395 by Steve.Robb Extra codegen savings when not in hot reload. Change 3501004 by Steve.Robb EObjectFlags now have constexpr operators. Change 3502079 by Ben.Marsh UBT: Pad multi-line error messages so that they align under the prefix for the first line, and include the timestamp if necessary. Change 3502527 by Steve.Robb Fix for zero-sized array compile error in generated code when all functions are editor-only. Change 3502542 by Ben.Marsh UAT: Remove the custom source parameter from log functions, and add support for a customizable indent instead. Change 3502868 by Steve.Robb Workaround for inefficient generated code with stateless lambdas on Clang. Change 3503550 by Steve.Robb Another generated code lambda optimization. Change 3503582 by Ben.Marsh BuildGraph: Add support for nullable parameter types. Change 3504424 by Steve.Robb New AllOf, AnyOf and NoneOf algorithms. Change 3504712 by Ben.Marsh UAT: Less spammy log and error output from UAT. * Callstacks for AutomationExceptions are suppressed by default but still included in the log (the path to the log is noted in console output with the message from the exception). * Add a mechanism for any exceptions to be caught and rethrown with additional lines of context (CommandUtils.AddContext()) that will be appended to the error output by UAT. Avoids decaying the exception type or masking the inner exception message while still adding additional information. * AggregateExceptions resulting from exceptions on child threads are automatically unwrapped (full details are still appended to the log) * Name of the calling function is not included in console output by default, but still included in the log. Change 3504808 by Ben.Marsh UAT: Suppress P4 output when running a recursive instance of UAT. Change 3505044 by Steve.Robb Code generation improved for TCppClassType code. Change 3505485 by Ben.Marsh Fix deterministic cooking issue; always use a pseudo-random number stream when compiling a module. Change 3505699 by Ben.Marsh Plugins: Store the bEnabledByDefault flag exactly as it was read from disk rather than collapsing it to an absolute value based on the default for the location it was read from. This allows loading/saving plugin descriptors without any knowledge of whether they are game or engine plugins. Change 3506055 by Ben.Marsh UAT: Add a class to apply a log indent for the lifetime of an object (ScopedLogIndent), and use it to apply an indent to MegaXGE/ParallelExecutor output. Change 3507745 by Robert.Manuszewski Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses). Change 3507911 by Ben.Marsh Plugins: Minor changes to plugin descriptors. * Add a distinct setting for an unspecified EnabledByDefault setting in plugin descriptors. * Add a function to IPlugin to determine the effective EnabledByDefault setting, based on where the plugin was loaded from. Change 3508669 by Ben.Marsh EC: Parse multi-line messages from UBT and UAT. Change 3508691 by Ben.Marsh Fix double-spacing of cook stats. Change 3509245 by Steve.Robb UHT makefiles removed. Flag audit removed. Change 3509275 by Steve.Robb Fix for mismatched stat categories in AudioMixer. #jira UE-46129 Change 3509289 by Robert.Manuszewski Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably. Change 3509294 by Robert.Manuszewski UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there's no UObject references in it. Change 3509312 by Steve.Robb GitHub# 3679: Add TArray constructor that takes a raw pointer and a count Check improved for Append() to allow nullptr in empty ranges, and added to new constructor too. #jira UE-46136 Change 3509396 by Steve.Robb GitHub# 3676: Fix TUnion operator<< compile error #jira UE-46099 Change 3509633 by Steve.Robb Fix for line numbers on multiline macros. Change 3509938 by Gil.Gribb UE4 - Fix rare assert involving cancelled precache requests and non-pak-file loading. Change 3510593 by Daniel.Lamb Fixed up unsoilicited files getting populated with files which aren't finished being created yet. #test None Change 3510594 by Daniel.Lamb Fixed up temp files directory for patching. Thanks David Yerkess @ Milestone #review@Ben.Marsh Change 3511628 by Ben.Marsh PR #3707: Fixed UBT stack size (Contributed by gildor2) Change 3511808 by Ben.Marsh Optimize checks for whether the game project contains source code. Now stops as soon as the first file is found and ignores directories beginning with a '.' character (eg. .git) #jira UE-46540 Change 3512017 by Ben.Marsh Plugins: Deprecate the QueryStatusForAllPlugins() function; the same functionality is available via the IPlugin interface. Change 3513935 by Steve.Robb Reverted array iteration in FPropertyNode::PropagatePropertyChange as this is now covered in TProperty::InitializeValueInternal() as of CL# 3293477. Change 3514142 by Steve.Robb MemoryProfiler2 added to generated solution. Change 3516463 by Ben.Marsh Plugins: Create a manifest for each PAK file containing all the plugin descriptors in one place. Eliminates need to recurse through directories and read separate multiple files in serial at startup, and allows reading all plugin descriptors with one read. The "Mods" directory is excluded from the manifest, since these are intended to be installed separately by the user. Change 3517860 by Ben.Marsh PR #3727: FString Dereference Fixes (Contributed by jovisgCL) Change 3517967 by Ben.Marsh Suppress additional system error dialogs when loading DLLs if -unnattended is on the command line. Change 3518070 by Steve.Robb Disable Binned2 stats in shipping non-editor builds. Change 3520079 by Steve.Robb Fixed bad codegen TAssetPtrs being passed into BlueprintImplementableEvent functions. #jira UE-24034 Change 3520080 by Robert.Manuszewski Made max package summary size to be configurable with ini setting Change 3520083 by Steve.Robb Force a GC after hot reload to clean up reinstanced objects which may still tick. #jira UE-40421 Change 3520480 by Robert.Manuszewski Improved assert message when the initial package read request was too small. Change 3520590 by Graeme.Thornton SignedArchiveReader optimizations - Loads more stats - Stop chunk cache worker from waking up continuously to poll for work. Only wake up when triggered by the archive reader - Signed archive reader just yields when waiting for buffers to finish loading, rather than sleeping for some arbitrary amount of time - Track the number of pending read requests in an atomic counter, to save having to lock the request queue to check for new entries Change 3521023 by Graeme.Thornton Remove spin from signed archive reader. Main thread waits on an event triggered by the chunk worker to indicate that new chunks are ready for processing Change 3521787 by Ben.Marsh PR #3736: Small static code analysis fixes (Contributed by jovisgCL) Change 3521789 by Ben.Marsh PR #3735: Fix case sensitivity issue in FWindowsPlatformProcess::IsApplicationRunning. (Contributed by samhocevar) Change 3524721 by Ben.Marsh Move Linux SDL initialization into FLinuxPlatformApplicationMisc. Attempting to move functionality related to interactive applications (graphics, input, etc...) into a separate place, so it can ultimately be moved out of Core. Change 3524741 by Ben.Marsh Move PumpMessages() into FPlatformApplicationMisc. Change 3525399 by Ben.Marsh UGS: Use the default Perforce server port when opening P4V if there is not one set in the environment. Change 3525743 by Ben.Marsh UAT: Add a parameter to allow updating version files without updating Version.h, to allow faster link times on incremental builds. Change 3525746 by Ben.Marsh EC: Include the clobber option on new workspaces, to allow overriding version files when syncing. Change 3526453 by Ben.Marsh UGS: Do not generate project files when syncing precompiled binaries. Change 3527045 by Ben.Marsh Fix hot reload generating import libraries without DLLs. Now that they are produced by separate actions by default, it was removing DLLs from the action graph due to the bSkipLinkingWhenNothingToCompile setting. Change 3527420 by Ben.Marsh UGS: Add additional search paths for UGS config files, and fix a few cosmetic issues (inability to display ampersands in tools menu, showing changelist -1 when running a tool without syncing). Config files are now read from: Engine/Programs/UnrealGameSync/UnrealGameSync.ini Engine/Programs/UnrealGameSync/NotForLicensees/UnrealGameSync.ini If a project is selected: <ProjectDir>/Build/UnrealGameSync.ini <ProjectDir>/Build/NotForLicensees/UnrealGameSync.ini If the .uprojectdirs file is selected: Engine/Programs/UnrealGameSync/DefaultProject.ini Engine/Programs/UnrealGameSync/NotForLicensees/DefaultProject.ini Change 3528063 by Ben.Marsh Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse. Change 3528415 by Ben.Marsh UAT: Remove \r characters from the end of multiline log messages. Change 3528427 by Ben.Marsh EC: Fix spaces being converted to tabs at start of line in failure emails (by Gmail), and wrap following lines at the same indent. Change 3528485 by Ben.Marsh EC: Remove zero-width word break characters from slashes in notification emails; can cause really hard to debug problems when copy pasted into other places. Change 3528505 by Steve.Robb PR #3755: MallocProfiler - Remove subfolder from profiling save directory (Contributed by Josef-CL) #jira UE-46819 Change 3528772 by Robert.Manuszewski Enabling actor and blueprint clustering in ShooterGame Change 3528786 by Robert.Manuszewski PR #3760: Fix typo (Contributed by jesseyeh) Change 3528792 by Steve.Robb PR #3764: MallocProfiler - Refactoring Scopelock (Contributed by Josef-CL) #jira UE-46962 Change 3528941 by Robert.Manuszewski Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object. #jira UE-44996 Change 3530241 by Ben.Marsh UAT: Only pass -submit or -nosubmit to child instances of UAT if they were specified on the original command line. BuildCookRun uses this flag to determine whether to submit, rather than just whether to allow submitting, so we shouldn't pass an inferred value. Change 3531377 by Ben.Marsh Plugins: Allow plugins to specify a list of supported target platforms, which is propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: * Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. * References to dependent plugins from platform-specific plugins can now be eliminated. * Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn't support that platform; now it is possible to specify supported platforms explicitly). * The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary. Change 3531502 by Jin.Zhang Add support for GPUCrash #rb Change 3531664 by Ben.Marsh UBT: Change output format from C# JSON writer to match output by the engine. Change 3531848 by Ben.Marsh UAT: Add script to resaving all project descriptors under a folder, embedding information for any supported platforms for the plugins they enable. Change 3531869 by Ben.Marsh UAT: Add parameter to the ResaveProjectDescriptors command to update the engine association field. Change 3532474 by Ben.Marsh UBT: Use the same mechanism as UAT for logging exceptions. Change 3532734 by Graeme.Thornton Initial VSCode Support - Tasks generated for building all game/engine/program targets - Debugging support for targets on Win64 Change 3532789 by Steve.Robb FScriptSet::Add and TScriptMap::Add now replace the element, matching the behavior of TSet and TMap. Set_Add and Map_Add no longer have a return value. FScriptSet::Find and FScriptMap::Find functions are now FindIndex. FScriptSetHelper::FindElementFromHash is now FindElementIndexFromHash. Change 3532845 by Steve.Robb Obsolete UHT settings deleted. Change 3532875 by Graeme.Thornton VSCode - Add debug targets for different target configurations - Choose between VS debugger (windows) and GDB (mac/linux) Change 3532906 by Graeme.Thornton VSCode - Point all builds directly at UBT rather than the batch files - Adjust mac build tasks to run through mono Change 3532924 by Ben.Marsh UAT: Set the UAT working directory immediately on startup. This ensures that any command line arguments containing paths are resolved consistently to the branch root. Change 3535234 by Graeme.Thornton VSCode - Pass intellisense system a list of paths to use for header resolution Change 3535247 by Graeme.Thornton UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation Change 3535376 by Graeme.Thornton VSCode - Added build jobs for C# projects - Linked launch tasks to relevant build task Change 3537083 by Ben.Marsh EC: Change P4 swarm links to start at the changelist for a build. Change 3537368 by Graeme.Thornton Fix for crash in FSignedArchiveReader when multithreading is disabled Change 3537550 by Graeme.Thornton Fixed a crash in the taskgraph when running single threaded Change 3537922 by Steve.Robb Missing PF_ATC_RGBA_I added to FOREACH_ENUM_EPIXELFORMAT. Change 3539691 by Graeme.Thornton VSCode - Various updates to get PC and Mac C++ projects building and debugging. - Some other changes to C# setup to allow compilation. Debugging doesn't work. Change 3539775 by Ben.Marsh Plugins: Various fixes to settings for enabling plugins. * Fix crash on startup when trying to disable a missing plugin (was keeping pointers to elements in the project's plugin reference array, which may be modified if a plugin is disabled). * Revert fix to set PluginDescriptor.bRequiresBuildPlatform = true by default. This was the originally intended behavior, but it was accidentally defaulted to false during serialization unless specified in the .uplugin file. Many plugins may rely on this behavior (they may not declare asset classes otherwise, for example, which could result in loss of data), so change the default value to false instead. Also fixes popups to disable platform-specific plugins if platform SDKs are not installed. * Fix plugins which are referenced but do not exist not showing the appropriate prompt to disable them. Change 3540788 by Ben.Marsh UBT: Add support for declaring custom pre-build steps and post-build steps from .target.cs files. Similarly to the custom build steps configurable from .uproject and .uplugin files, these specify commands which will be executed by the host platform's shell before or after a build. The following variables are expanded within the list of commands before execution: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile). Example usage: public class UnrealPakTarget : TargetRules { public UnrealPakTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; LinkType = TargetLinkType.Monolithic; LaunchModuleName = "UnrealPak"; if(HostPlatform == UnrealTargetPlatform.Win64) { PreBuildSteps.Add("echo Before building:"); PreBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); PostBuildSteps.Add("echo After building!"); PostBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); } } } Change 3541664 by Graeme.Thornton VSCode - Add problemMatcher tag to cpp build targets Change 3541732 by Graeme.Thornton VSCode - Change UBT command line switch to "-vscode" for simplicity Change 3541967 by Graeme.Thornton VSCode - Fixes for Mac/Linux build steps Change 3541968 by Ben.Marsh CRP: Pass through the EnabledPlugins element in crash context XML files. #jira UE-46912 Change 3542519 by Ben.Marsh UBT: Add chain of references to error messages when configuring plugins. Change 3542523 by Ben.Marsh UBT: Add more useful error message when attempt to parse a JSON object fails. Change 3542658 by Ben.Marsh UBT: Include a chain of references when reporting errors instantiating modules. Change 3543432 by Ben.Marsh Plugins: Fix plugins which are enabled by default not being enabled unless a project file is set. Change 3543436 by Ben.Marsh UBT: Prevent recursing through the same module more than once when building out the referenced modules. Produces much shorter reference chains when something fails. Change 3543536 by Ben.Marsh UBT: Downgrade message about redundant plugin references to a warning. Change 3543871 by Gil.Gribb UE4 - Fixed a critical crash bug with non-EDL loading from pak files. Change 3543924 by Robert.Manuszewski Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes. +Small optimization to token stream generation code. Change 3544469 by Jin.Zhang Crashes page displays the list of plugins from the crash context #rb Change 3544608 by Steve.Robb Fix for nativized generated code. #jira UE-47452 Change 3544612 by Ben.Marsh Add callback into FMacPlatformMisc::PumpMessages() from FMacPlatformApplicationMisc::PumpMessages(). #jira UE-47449 Change 3545954 by Gil.Gribb Fixed a critical crash bug relating to a race condition in async package summary reading. Change 3545968 by Ben.Marsh UAT: Fix incorrect username in BuildGraph <Submit> task. Should use the username from the Perforce environment, not assume the logged in user name is the same. #jira UE-47419 Change 3545976 by Ben.Marsh EC: Delete the AutoSDK client if the directory doesn't exist. When we format build machines, we need to force everything to be resynced from scratch. Change 3546185 by Ben.Marsh Hacky fix for deployment on IOS/TVOS. Since deployment directly references the NonUFS manifest files that are written out, merge all the SystemNonUFS files back into the NonUFS list after the regular NonUFS files have been remapped. Change 3547084 by Gil.Gribb Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms. Change 3547968 by Gil.Gribb Fixed critical race which potentially could cause a crash in the pak precacher. Change 3504722 by Ben.Marsh BuildGraph: Improved tracing for error messages. All errors are now propagated as exceptions, and are tagged with additional context information about the task currently being run. For example, throwing new AutomationException("Unable to write foo.txt") from SetVersionTask.Execute is now displayed in the log as: ERROR: Unable to write to foo.txt while executing <SetVersion Change="0" CompatibleChange="0" Branch="Unknown" Promoted="True" /> at Engine\Build\InstalledEngineBuild.xml(91) (see D:\P4 UE4\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace) Change 3512255 by Ben.Marsh Rename FPaths functions with a "Game" prefix (GameDir(), GameContentDir(), etc...) to have a "Project" prefix (ProjectDir(), ProjectContentDir(), etc...) for clarity with non-game uses of UE4. Old functions still exist but are deprecated. Change 3512332 by Ben.Marsh Rename "Game" functions in FApp to be "Project" functions (FApp::GetGameName() -> FApp::GetProjectName(), etc...) for clarity with non-game uses of UE4. Change 3512393 by Ben.Marsh Rename FPaths::GameLogDir() to FPaths::ProjectLogDir(). Change 3513452 by Ben.Marsh Plugins: Rename EPluginLoadedFrom::GameProject to EPluginLoadedFrom::Project. Change 3516262 by Ben.Marsh Add support for a "Mods" folder distinct from the project's "Plugins" folder, instead of using the bIsMod flag on the plugin descriptor. * Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. * The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders). Change 3517565 by Ben.Marsh Remove fixed engine version numbers from OSS plugins. Change 3518005 by Ben.Marsh UAT: Remove the bUFSFile parameter from DeployLowerCaseFilenames(). Every platform returns false if the argument is false. Change 3518054 by Ben.Marsh UAT: Use an enum to direct whether all directories should be searched when finding files to stage, rather than a bool. Having so many optional boolean arguments makes code unreadable and refactoring hard. Change 3524496 by Ben.Marsh Start moving GUI application code into a separate static platform class, hopefully ultimately removing it from Core. Change 3524641 by Ben.Marsh Move more functionality related to windowed/graphical applications into FPlatformApplicationMisc. Change 3528723 by Steve.Robb MoveTemp now static asserts if passed a const reference or rvalue. MoveTempIfPossible still follows the old (std::move) rule, which is useful for templates where the nature of the argument is not obvious. Fixes to violations of these new rules. Change 3528876 by Ben.Marsh Move FPlatformMisc::ClipboardCopy and FPlatformMisc::ClipboardPaste to FPlatformApplicationMisc::ClipboardCopy and FPlatformApplicationMisc::ClipboardPaste. Change 3529073 by Ben.Marsh Add script to package ShooterGame for any platforms. Change 3531493 by Ben.Marsh Update platform-specific plugins to declare the target platforms they support. Change 3531611 by Ben.Marsh UAT: Add a ResavePluginDescriptors command, which resaves all plugin descriptors under a given folder, removing any outdated fields and rewrites them in a consistent style. Many plugins in the wild contain redundant or no-longer used fields due to using our plugins as templates. Change 3531868 by Ben.Marsh Resaving project descriptors to remove invalid fields. Change 3531983 by Ben.Marsh UAT: Simplify logic for staging code, and add validation against shipping files in restricted folders. * Added a new SystemNonUFS type for staged files, which excludes files from being remapped or renamed by the platform layer. * Replaced the DeplyomentContext.StageFiles() function with simpler overloads for particular use cases (options for remapping are replaced with the SystemNonUFS file type) * Config entries in the [Staging] category in DefaultGame.ini file allow remapping one directory to another, so restricted content can be made public in packaged builds (Example syntax: +RemapDirectory=(From="Foo/NoRedist", To="Foo")) * An error is output if any restricted folder names other than the output platform are in the staged output. Change 3540315 by Ben.Marsh UAT: Moving StreamCopyDescription command into a NotForLicensees folder, since it's only meant to be used by engine developers. Change 3542410 by Ben.Marsh UBT: Deprecate accessing properties through BuildConfiguration.* or UEBuildConfiguration.* from .target.cs files. These have been aliases to the current TargetRules instance for several releases already. Change 3543018 by Ben.Marsh UBT: Deprecate the BuildConfiguration and UEBuildConfiguration aliases from the ModuleRules class. These have been implemented as an alias ot the ReadOnlyTargetRules instance passed to the constructor for several engine versions. Change 3544371 by Steve.Robb Fixes to TSet_Add and TMap_Add BPs. #jira UE-47441 [CL 3548391 by Ben Marsh in Main branch]
2017-07-21 12:42:36 -04:00
FString LocalTileFileDirectory = FPaths::ProjectConfigDir();
auto bGetConfigDir = GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("LocalTitleFileDirectory"), LocalTileFileDirectory, GEngineIni);
OnlineTitleFile = MakeShareable(new FLocalTitleFile(LocalTileFileDirectory));
#if !UE_BUILD_SHIPPING
bDebugNoInstalledRequired = !bGetConfigDir;
#endif
}
CloudDirectory = TEXT("");
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3548365) #lockdown Nick.Penwarden ============================ MAJOR FEATURES & CHANGES ============================ Change 3494741 by Steve.Robb Generated code size savings. #jira UE-43048 Change 3495484 by Steve.Robb Fix for generated indices of static arrays when saving configs. Change 3497926 by Robert.Manuszewski Removed FPackageFileSummary's CompressedChunks array as it was no longer being used by anything. Change 3498077 by Robert.Manuszewski Only use the recursion guard in async loading code when the event driven loader is enabled. Change 3498112 by Ben.Marsh UBT: Respect the option to not create debug info in the Android toolchain. This option is already being respected by the compiler, but the linker adds debug info of its own. Change 3500239 by Robert.Manuszewski Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes. Change 3500395 by Steve.Robb Extra codegen savings when not in hot reload. Change 3501004 by Steve.Robb EObjectFlags now have constexpr operators. Change 3502079 by Ben.Marsh UBT: Pad multi-line error messages so that they align under the prefix for the first line, and include the timestamp if necessary. Change 3502527 by Steve.Robb Fix for zero-sized array compile error in generated code when all functions are editor-only. Change 3502542 by Ben.Marsh UAT: Remove the custom source parameter from log functions, and add support for a customizable indent instead. Change 3502868 by Steve.Robb Workaround for inefficient generated code with stateless lambdas on Clang. Change 3503550 by Steve.Robb Another generated code lambda optimization. Change 3503582 by Ben.Marsh BuildGraph: Add support for nullable parameter types. Change 3504424 by Steve.Robb New AllOf, AnyOf and NoneOf algorithms. Change 3504712 by Ben.Marsh UAT: Less spammy log and error output from UAT. * Callstacks for AutomationExceptions are suppressed by default but still included in the log (the path to the log is noted in console output with the message from the exception). * Add a mechanism for any exceptions to be caught and rethrown with additional lines of context (CommandUtils.AddContext()) that will be appended to the error output by UAT. Avoids decaying the exception type or masking the inner exception message while still adding additional information. * AggregateExceptions resulting from exceptions on child threads are automatically unwrapped (full details are still appended to the log) * Name of the calling function is not included in console output by default, but still included in the log. Change 3504808 by Ben.Marsh UAT: Suppress P4 output when running a recursive instance of UAT. Change 3505044 by Steve.Robb Code generation improved for TCppClassType code. Change 3505485 by Ben.Marsh Fix deterministic cooking issue; always use a pseudo-random number stream when compiling a module. Change 3505699 by Ben.Marsh Plugins: Store the bEnabledByDefault flag exactly as it was read from disk rather than collapsing it to an absolute value based on the default for the location it was read from. This allows loading/saving plugin descriptors without any knowledge of whether they are game or engine plugins. Change 3506055 by Ben.Marsh UAT: Add a class to apply a log indent for the lifetime of an object (ScopedLogIndent), and use it to apply an indent to MegaXGE/ParallelExecutor output. Change 3507745 by Robert.Manuszewski Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses). Change 3507911 by Ben.Marsh Plugins: Minor changes to plugin descriptors. * Add a distinct setting for an unspecified EnabledByDefault setting in plugin descriptors. * Add a function to IPlugin to determine the effective EnabledByDefault setting, based on where the plugin was loaded from. Change 3508669 by Ben.Marsh EC: Parse multi-line messages from UBT and UAT. Change 3508691 by Ben.Marsh Fix double-spacing of cook stats. Change 3509245 by Steve.Robb UHT makefiles removed. Flag audit removed. Change 3509275 by Steve.Robb Fix for mismatched stat categories in AudioMixer. #jira UE-46129 Change 3509289 by Robert.Manuszewski Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably. Change 3509294 by Robert.Manuszewski UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there's no UObject references in it. Change 3509312 by Steve.Robb GitHub# 3679: Add TArray constructor that takes a raw pointer and a count Check improved for Append() to allow nullptr in empty ranges, and added to new constructor too. #jira UE-46136 Change 3509396 by Steve.Robb GitHub# 3676: Fix TUnion operator<< compile error #jira UE-46099 Change 3509633 by Steve.Robb Fix for line numbers on multiline macros. Change 3509938 by Gil.Gribb UE4 - Fix rare assert involving cancelled precache requests and non-pak-file loading. Change 3510593 by Daniel.Lamb Fixed up unsoilicited files getting populated with files which aren't finished being created yet. #test None Change 3510594 by Daniel.Lamb Fixed up temp files directory for patching. Thanks David Yerkess @ Milestone #review@Ben.Marsh Change 3511628 by Ben.Marsh PR #3707: Fixed UBT stack size (Contributed by gildor2) Change 3511808 by Ben.Marsh Optimize checks for whether the game project contains source code. Now stops as soon as the first file is found and ignores directories beginning with a '.' character (eg. .git) #jira UE-46540 Change 3512017 by Ben.Marsh Plugins: Deprecate the QueryStatusForAllPlugins() function; the same functionality is available via the IPlugin interface. Change 3513935 by Steve.Robb Reverted array iteration in FPropertyNode::PropagatePropertyChange as this is now covered in TProperty::InitializeValueInternal() as of CL# 3293477. Change 3514142 by Steve.Robb MemoryProfiler2 added to generated solution. Change 3516463 by Ben.Marsh Plugins: Create a manifest for each PAK file containing all the plugin descriptors in one place. Eliminates need to recurse through directories and read separate multiple files in serial at startup, and allows reading all plugin descriptors with one read. The "Mods" directory is excluded from the manifest, since these are intended to be installed separately by the user. Change 3517860 by Ben.Marsh PR #3727: FString Dereference Fixes (Contributed by jovisgCL) Change 3517967 by Ben.Marsh Suppress additional system error dialogs when loading DLLs if -unnattended is on the command line. Change 3518070 by Steve.Robb Disable Binned2 stats in shipping non-editor builds. Change 3520079 by Steve.Robb Fixed bad codegen TAssetPtrs being passed into BlueprintImplementableEvent functions. #jira UE-24034 Change 3520080 by Robert.Manuszewski Made max package summary size to be configurable with ini setting Change 3520083 by Steve.Robb Force a GC after hot reload to clean up reinstanced objects which may still tick. #jira UE-40421 Change 3520480 by Robert.Manuszewski Improved assert message when the initial package read request was too small. Change 3520590 by Graeme.Thornton SignedArchiveReader optimizations - Loads more stats - Stop chunk cache worker from waking up continuously to poll for work. Only wake up when triggered by the archive reader - Signed archive reader just yields when waiting for buffers to finish loading, rather than sleeping for some arbitrary amount of time - Track the number of pending read requests in an atomic counter, to save having to lock the request queue to check for new entries Change 3521023 by Graeme.Thornton Remove spin from signed archive reader. Main thread waits on an event triggered by the chunk worker to indicate that new chunks are ready for processing Change 3521787 by Ben.Marsh PR #3736: Small static code analysis fixes (Contributed by jovisgCL) Change 3521789 by Ben.Marsh PR #3735: Fix case sensitivity issue in FWindowsPlatformProcess::IsApplicationRunning. (Contributed by samhocevar) Change 3524721 by Ben.Marsh Move Linux SDL initialization into FLinuxPlatformApplicationMisc. Attempting to move functionality related to interactive applications (graphics, input, etc...) into a separate place, so it can ultimately be moved out of Core. Change 3524741 by Ben.Marsh Move PumpMessages() into FPlatformApplicationMisc. Change 3525399 by Ben.Marsh UGS: Use the default Perforce server port when opening P4V if there is not one set in the environment. Change 3525743 by Ben.Marsh UAT: Add a parameter to allow updating version files without updating Version.h, to allow faster link times on incremental builds. Change 3525746 by Ben.Marsh EC: Include the clobber option on new workspaces, to allow overriding version files when syncing. Change 3526453 by Ben.Marsh UGS: Do not generate project files when syncing precompiled binaries. Change 3527045 by Ben.Marsh Fix hot reload generating import libraries without DLLs. Now that they are produced by separate actions by default, it was removing DLLs from the action graph due to the bSkipLinkingWhenNothingToCompile setting. Change 3527420 by Ben.Marsh UGS: Add additional search paths for UGS config files, and fix a few cosmetic issues (inability to display ampersands in tools menu, showing changelist -1 when running a tool without syncing). Config files are now read from: Engine/Programs/UnrealGameSync/UnrealGameSync.ini Engine/Programs/UnrealGameSync/NotForLicensees/UnrealGameSync.ini If a project is selected: <ProjectDir>/Build/UnrealGameSync.ini <ProjectDir>/Build/NotForLicensees/UnrealGameSync.ini If the .uprojectdirs file is selected: Engine/Programs/UnrealGameSync/DefaultProject.ini Engine/Programs/UnrealGameSync/NotForLicensees/DefaultProject.ini Change 3528063 by Ben.Marsh Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse. Change 3528415 by Ben.Marsh UAT: Remove \r characters from the end of multiline log messages. Change 3528427 by Ben.Marsh EC: Fix spaces being converted to tabs at start of line in failure emails (by Gmail), and wrap following lines at the same indent. Change 3528485 by Ben.Marsh EC: Remove zero-width word break characters from slashes in notification emails; can cause really hard to debug problems when copy pasted into other places. Change 3528505 by Steve.Robb PR #3755: MallocProfiler - Remove subfolder from profiling save directory (Contributed by Josef-CL) #jira UE-46819 Change 3528772 by Robert.Manuszewski Enabling actor and blueprint clustering in ShooterGame Change 3528786 by Robert.Manuszewski PR #3760: Fix typo (Contributed by jesseyeh) Change 3528792 by Steve.Robb PR #3764: MallocProfiler - Refactoring Scopelock (Contributed by Josef-CL) #jira UE-46962 Change 3528941 by Robert.Manuszewski Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object. #jira UE-44996 Change 3530241 by Ben.Marsh UAT: Only pass -submit or -nosubmit to child instances of UAT if they were specified on the original command line. BuildCookRun uses this flag to determine whether to submit, rather than just whether to allow submitting, so we shouldn't pass an inferred value. Change 3531377 by Ben.Marsh Plugins: Allow plugins to specify a list of supported target platforms, which is propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: * Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. * References to dependent plugins from platform-specific plugins can now be eliminated. * Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn't support that platform; now it is possible to specify supported platforms explicitly). * The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary. Change 3531502 by Jin.Zhang Add support for GPUCrash #rb Change 3531664 by Ben.Marsh UBT: Change output format from C# JSON writer to match output by the engine. Change 3531848 by Ben.Marsh UAT: Add script to resaving all project descriptors under a folder, embedding information for any supported platforms for the plugins they enable. Change 3531869 by Ben.Marsh UAT: Add parameter to the ResaveProjectDescriptors command to update the engine association field. Change 3532474 by Ben.Marsh UBT: Use the same mechanism as UAT for logging exceptions. Change 3532734 by Graeme.Thornton Initial VSCode Support - Tasks generated for building all game/engine/program targets - Debugging support for targets on Win64 Change 3532789 by Steve.Robb FScriptSet::Add and TScriptMap::Add now replace the element, matching the behavior of TSet and TMap. Set_Add and Map_Add no longer have a return value. FScriptSet::Find and FScriptMap::Find functions are now FindIndex. FScriptSetHelper::FindElementFromHash is now FindElementIndexFromHash. Change 3532845 by Steve.Robb Obsolete UHT settings deleted. Change 3532875 by Graeme.Thornton VSCode - Add debug targets for different target configurations - Choose between VS debugger (windows) and GDB (mac/linux) Change 3532906 by Graeme.Thornton VSCode - Point all builds directly at UBT rather than the batch files - Adjust mac build tasks to run through mono Change 3532924 by Ben.Marsh UAT: Set the UAT working directory immediately on startup. This ensures that any command line arguments containing paths are resolved consistently to the branch root. Change 3535234 by Graeme.Thornton VSCode - Pass intellisense system a list of paths to use for header resolution Change 3535247 by Graeme.Thornton UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation Change 3535376 by Graeme.Thornton VSCode - Added build jobs for C# projects - Linked launch tasks to relevant build task Change 3537083 by Ben.Marsh EC: Change P4 swarm links to start at the changelist for a build. Change 3537368 by Graeme.Thornton Fix for crash in FSignedArchiveReader when multithreading is disabled Change 3537550 by Graeme.Thornton Fixed a crash in the taskgraph when running single threaded Change 3537922 by Steve.Robb Missing PF_ATC_RGBA_I added to FOREACH_ENUM_EPIXELFORMAT. Change 3539691 by Graeme.Thornton VSCode - Various updates to get PC and Mac C++ projects building and debugging. - Some other changes to C# setup to allow compilation. Debugging doesn't work. Change 3539775 by Ben.Marsh Plugins: Various fixes to settings for enabling plugins. * Fix crash on startup when trying to disable a missing plugin (was keeping pointers to elements in the project's plugin reference array, which may be modified if a plugin is disabled). * Revert fix to set PluginDescriptor.bRequiresBuildPlatform = true by default. This was the originally intended behavior, but it was accidentally defaulted to false during serialization unless specified in the .uplugin file. Many plugins may rely on this behavior (they may not declare asset classes otherwise, for example, which could result in loss of data), so change the default value to false instead. Also fixes popups to disable platform-specific plugins if platform SDKs are not installed. * Fix plugins which are referenced but do not exist not showing the appropriate prompt to disable them. Change 3540788 by Ben.Marsh UBT: Add support for declaring custom pre-build steps and post-build steps from .target.cs files. Similarly to the custom build steps configurable from .uproject and .uplugin files, these specify commands which will be executed by the host platform's shell before or after a build. The following variables are expanded within the list of commands before execution: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile). Example usage: public class UnrealPakTarget : TargetRules { public UnrealPakTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; LinkType = TargetLinkType.Monolithic; LaunchModuleName = "UnrealPak"; if(HostPlatform == UnrealTargetPlatform.Win64) { PreBuildSteps.Add("echo Before building:"); PreBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); PostBuildSteps.Add("echo After building!"); PostBuildSteps.Add("echo This is $(TargetName) $(TargetConfiguration) $(TargetPlatform)"); } } } Change 3541664 by Graeme.Thornton VSCode - Add problemMatcher tag to cpp build targets Change 3541732 by Graeme.Thornton VSCode - Change UBT command line switch to "-vscode" for simplicity Change 3541967 by Graeme.Thornton VSCode - Fixes for Mac/Linux build steps Change 3541968 by Ben.Marsh CRP: Pass through the EnabledPlugins element in crash context XML files. #jira UE-46912 Change 3542519 by Ben.Marsh UBT: Add chain of references to error messages when configuring plugins. Change 3542523 by Ben.Marsh UBT: Add more useful error message when attempt to parse a JSON object fails. Change 3542658 by Ben.Marsh UBT: Include a chain of references when reporting errors instantiating modules. Change 3543432 by Ben.Marsh Plugins: Fix plugins which are enabled by default not being enabled unless a project file is set. Change 3543436 by Ben.Marsh UBT: Prevent recursing through the same module more than once when building out the referenced modules. Produces much shorter reference chains when something fails. Change 3543536 by Ben.Marsh UBT: Downgrade message about redundant plugin references to a warning. Change 3543871 by Gil.Gribb UE4 - Fixed a critical crash bug with non-EDL loading from pak files. Change 3543924 by Robert.Manuszewski Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes. +Small optimization to token stream generation code. Change 3544469 by Jin.Zhang Crashes page displays the list of plugins from the crash context #rb Change 3544608 by Steve.Robb Fix for nativized generated code. #jira UE-47452 Change 3544612 by Ben.Marsh Add callback into FMacPlatformMisc::PumpMessages() from FMacPlatformApplicationMisc::PumpMessages(). #jira UE-47449 Change 3545954 by Gil.Gribb Fixed a critical crash bug relating to a race condition in async package summary reading. Change 3545968 by Ben.Marsh UAT: Fix incorrect username in BuildGraph <Submit> task. Should use the username from the Perforce environment, not assume the logged in user name is the same. #jira UE-47419 Change 3545976 by Ben.Marsh EC: Delete the AutoSDK client if the directory doesn't exist. When we format build machines, we need to force everything to be resynced from scratch. Change 3546185 by Ben.Marsh Hacky fix for deployment on IOS/TVOS. Since deployment directly references the NonUFS manifest files that are written out, merge all the SystemNonUFS files back into the NonUFS list after the regular NonUFS files have been remapped. Change 3547084 by Gil.Gribb Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms. Change 3547968 by Gil.Gribb Fixed critical race which potentially could cause a crash in the pak precacher. Change 3504722 by Ben.Marsh BuildGraph: Improved tracing for error messages. All errors are now propagated as exceptions, and are tagged with additional context information about the task currently being run. For example, throwing new AutomationException("Unable to write foo.txt") from SetVersionTask.Execute is now displayed in the log as: ERROR: Unable to write to foo.txt while executing <SetVersion Change="0" CompatibleChange="0" Branch="Unknown" Promoted="True" /> at Engine\Build\InstalledEngineBuild.xml(91) (see D:\P4 UE4\Engine\Programs\AutomationTool\Saved\Logs\UAT_Log.txt for full exception trace) Change 3512255 by Ben.Marsh Rename FPaths functions with a "Game" prefix (GameDir(), GameContentDir(), etc...) to have a "Project" prefix (ProjectDir(), ProjectContentDir(), etc...) for clarity with non-game uses of UE4. Old functions still exist but are deprecated. Change 3512332 by Ben.Marsh Rename "Game" functions in FApp to be "Project" functions (FApp::GetGameName() -> FApp::GetProjectName(), etc...) for clarity with non-game uses of UE4. Change 3512393 by Ben.Marsh Rename FPaths::GameLogDir() to FPaths::ProjectLogDir(). Change 3513452 by Ben.Marsh Plugins: Rename EPluginLoadedFrom::GameProject to EPluginLoadedFrom::Project. Change 3516262 by Ben.Marsh Add support for a "Mods" folder distinct from the project's "Plugins" folder, instead of using the bIsMod flag on the plugin descriptor. * Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. * The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders). Change 3517565 by Ben.Marsh Remove fixed engine version numbers from OSS plugins. Change 3518005 by Ben.Marsh UAT: Remove the bUFSFile parameter from DeployLowerCaseFilenames(). Every platform returns false if the argument is false. Change 3518054 by Ben.Marsh UAT: Use an enum to direct whether all directories should be searched when finding files to stage, rather than a bool. Having so many optional boolean arguments makes code unreadable and refactoring hard. Change 3524496 by Ben.Marsh Start moving GUI application code into a separate static platform class, hopefully ultimately removing it from Core. Change 3524641 by Ben.Marsh Move more functionality related to windowed/graphical applications into FPlatformApplicationMisc. Change 3528723 by Steve.Robb MoveTemp now static asserts if passed a const reference or rvalue. MoveTempIfPossible still follows the old (std::move) rule, which is useful for templates where the nature of the argument is not obvious. Fixes to violations of these new rules. Change 3528876 by Ben.Marsh Move FPlatformMisc::ClipboardCopy and FPlatformMisc::ClipboardPaste to FPlatformApplicationMisc::ClipboardCopy and FPlatformApplicationMisc::ClipboardPaste. Change 3529073 by Ben.Marsh Add script to package ShooterGame for any platforms. Change 3531493 by Ben.Marsh Update platform-specific plugins to declare the target platforms they support. Change 3531611 by Ben.Marsh UAT: Add a ResavePluginDescriptors command, which resaves all plugin descriptors under a given folder, removing any outdated fields and rewrites them in a consistent style. Many plugins in the wild contain redundant or no-longer used fields due to using our plugins as templates. Change 3531868 by Ben.Marsh Resaving project descriptors to remove invalid fields. Change 3531983 by Ben.Marsh UAT: Simplify logic for staging code, and add validation against shipping files in restricted folders. * Added a new SystemNonUFS type for staged files, which excludes files from being remapped or renamed by the platform layer. * Replaced the DeplyomentContext.StageFiles() function with simpler overloads for particular use cases (options for remapping are replaced with the SystemNonUFS file type) * Config entries in the [Staging] category in DefaultGame.ini file allow remapping one directory to another, so restricted content can be made public in packaged builds (Example syntax: +RemapDirectory=(From="Foo/NoRedist", To="Foo")) * An error is output if any restricted folder names other than the output platform are in the staged output. Change 3540315 by Ben.Marsh UAT: Moving StreamCopyDescription command into a NotForLicensees folder, since it's only meant to be used by engine developers. Change 3542410 by Ben.Marsh UBT: Deprecate accessing properties through BuildConfiguration.* or UEBuildConfiguration.* from .target.cs files. These have been aliases to the current TargetRules instance for several releases already. Change 3543018 by Ben.Marsh UBT: Deprecate the BuildConfiguration and UEBuildConfiguration aliases from the ModuleRules class. These have been implemented as an alias ot the ReadOnlyTargetRules instance passed to the constructor for several engine versions. Change 3544371 by Steve.Robb Fixes to TSet_Add and TMap_Add BPs. #jira UE-47441 [CL 3548391 by Ben Marsh in Main branch]
2017-07-21 12:42:36 -04:00
CloudDir = FPaths::Combine(*FPaths::ProjectContentDir(), TEXT("Cloud"));
StageDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Staged"));
InstallDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Installed")); // By default this should match ContentDir
BackupDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Backup"));
CacheDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Cache"));
HoldingDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Hold"));
ContentDir = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Chunks"), TEXT("Installed")); // By default this should match InstallDir
FString TmpString1;
FString TmpString2;
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("CloudDirectory"), TmpString1, GEngineIni))
{
CloudDirectory = CloudDir = TmpString1;
}
if ((GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("CloudProtocol"), TmpString1, GEngineIni)) && (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("CloudDomain"), TmpString2, GEngineIni)))
{
CloudDir = FString::Printf(TEXT("%s://%s"), *TmpString1, *TmpString2);
}
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("StageDirectory"), TmpString1, GEngineIni))
{
StageDir = TmpString1;
}
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("InstallDirectory"), TmpString1, GEngineIni))
{
InstallDir = TmpString1;
}
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("BackupDirectory"), TmpString1, GEngineIni))
{
BackupDir = TmpString1;
}
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("ContentDirectory"), TmpString1, GEngineIni))
{
ContentDir = TmpString1;
}
if (GConfig->GetString(TEXT("HTTPChunkInstall"), TEXT("HoldingDirectory"), TmpString1, GEngineIni))
{
HoldingDir = TmpString1;
}
bFirstRun = true;
bSystemInitialised = true;
}
IBuildManifestPtr FHTTPChunkInstall::FindPreviousInstallManifest(const IBuildManifestPtr& ChunkManifest)
{
auto ChunkIDField = ChunkManifest->GetCustomField("ChunkID");
if (!ChunkIDField.IsValid())
{
return IBuildManifestPtr();
}
auto ChunkID = ChunkIDField->AsInteger();
TArray<IBuildManifestPtr> FoundManifests;
PrevInstallManifests.MultiFind(ChunkID, FoundManifests);
return FoundManifests.Num() == 0 ? IBuildManifestPtr() : FoundManifests[0];
}
void FHTTPChunkInstall::EndInstall()
{
if (InstallService.IsValid())
{
//InstallService->CancelInstall();
InstallService.Reset();
}
InstallingChunkID = -1;
InstallingChunkManifest.Reset();
InstallerState = ChunkInstallState::Idle;
}
/**
* Module for the HTTP Chunk Installer
*/
class FHTTPChunkInstallerModule : public IPlatformChunkInstallModule
{
public:
TUniquePtr<IPlatformChunkInstall> ChunkInstaller;
FHTTPChunkInstallerModule()
: ChunkInstaller(new FHTTPChunkInstall())
{
}
virtual IPlatformChunkInstall* GetPlatformChunkInstall()
{
return ChunkInstaller.Get();
}
};
#undef LOCTEXT_NAMESPACE
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3847469) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 3805828 by Gil.Gribb UE4 - Fixed a bug in the lock free stalling task queue and adjusted a comment. The code is not current used, so this is not actually change the way the code works. Change 3806784 by Ben.Marsh UAT: Remove code to compile UBT when using UE4Build. It should already be compiled as a dependency of UAT. Change 3807549 by Graeme.Thornton Add a cook timer around VerifyCanCookPackage. A licensee reports this taking a lot of time so it'll be good to account for it. Change 3807727 by Graeme.Thornton Unhide the text asset format experimental editor option Change 3807746 by Josh.Engebretson Remove WER from iOS platform Change 3807928 by Robert.Manuszewski When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet Change 3808221 by Steve.Robb GitHub #4307 - Made GetModulePtr() thread safe by not using GetModule() ^ I'm not convinced by how much thread-safer this is really, but it's tidier anyway. Change 3809233 by Graeme.Thornton TBA: Misc changes to text asset commandlet - Rename mode to "loadsave" - Add -outputFormat option which can be assigned "text" or "binary" - When saving binary, use a differentiated filename so that source assets aren't overwritten Change 3809518 by Ben.Marsh Remove the outdated UnrealSync automation script. Change 3809643 by Steve.Robb GitHub #4277 : fix bug; FMath::FormatIntToHumanReadable 3rd comma and negative value #jira UE-53037 Change 3809862 by Steve.Robb GitHub #3342 : [FRotator.h] Fix to DecompressAxisFromByte to be more efficient and reflect its intent accurately #jira UE-42593 Change 3811190 by Graeme.Thornton Add support for writing specific log channels to their own files Change 3811197 by Graeme.Thornton Minor updates to output formatting and timing for the text asset commandlet Change 3811257 by Robert.Manuszewski Cluster creation will now be time-sliced Change 3811565 by Steve.Robb Define out non-monolithic module functions. Change 3812561 by Steve.Robb GitHub #3886 : Enable Brace-Initialization for Declaring Variables Incorrect semi-colon search removed after discussion with author. Test added. #jira UE-48242 Change 3812864 by Steve.Robb Removal of some unproven code which was supposed to fix hot reloading BP class functions in plugins. See: https://udn.unrealengine.com/questions/376978/aitask-blueprint-nodes-disappear-when-their-module.html #jira UE-53089 Change 3820358 by Ben.Marsh PR #4358: Incredibuild use ShowAgent by default (Contributed by projectgheist) Change 3822594 by Ben.Marsh UAT: Improvements to log file handling. - Always create log files in the final location, rather than writing to a temp directory and copying in later. - Now supports -Verbose and -VeryVerbose for increasing log verbosity, rather than -Verbose=XXX. - Keep a backlog of log output before the log system is initialized, and flush it to the log file once it is. - Allow buildmachines to specify the uebp_FinalLogFolder environment variable, which is used to form paths for display. When build machines copy log files elsewhere after UAT finishes (eg. a network share), this allows error messages to display the right location. Change 3823695 by Ben.Marsh UGS: Fix issue where precompiled binaries would not be shown as available for a change until scrolling the last submitted code change into the buffer (other symptoms, like de-focussing the main window would cause it to go back to an unavailable state, since the changes buffer was shrunk). Now always queries changes up to the last change for which zipped binaries are available. Change 3823845 by Ben.Marsh UBT: Exclude C# projects for unsupported platforms when generating project files. Change 3824180 by Ben.Marsh UGS: Add an option to show changes by build machines, and move the "only show reviewed" option in there too (Options > Show Changes). #jira Change 3825777 by Steve.Robb Fix to return value of StringToBytes. Change 3825810 by Ben.Marsh UBT: Reduce length of include paths for MSVC toolchain. Change 3825822 by Robert.Manuszewski Optimized PIE lazy pointer fixup. Should be up to 8x faster now. Change 3826734 by Ben.Marsh Remove code to disable TextureFormatAndroid on Linux. It seems to be an editor dependency. Change 3827730 by Steve.Robb Try to avoid decltype(auto) if it's not supported. See: https://udn.unrealengine.com/questions/395644/build-417-with-c11-on-linux-ttuple-errors.html Change 3827745 by Steve.Robb Initializer list support for TMap. Change 3827770 by Steve.Robb GitHub #4399 : Added a CONSTEXPR qualifiers to FVariant::GetType() #jira UE-53813 Change 3829189 by Ben.Marsh UBT: Now always writes a minimal log file. By default, just contains the regular console output and any reasons why actions are outdated and needed to be executed. UAT directs child UBT instances to output logs into its own log folder, so that build machines can save them off. Change 3830444 by Steve.Robb BuildVersion and ModuleManifest moved to Core, and parsing of these files reimplemented to avoid a JSON library. This should be revisited when Core has its own JSON library. Change 3830718 by Ben.Marsh Fix incorrect group name being returned by FStatNameAndInfo::GetGroupName() for stat groups. The editor populates the viewport stats list by calling this for every registered stat and stat group (via FLevelViewportCommands::HandleNewStatGroup). The menu entry attempts to show the stat name with STAT_XXX stripped from the start as the menu item label, with the free-form text description as a tooltip. For stat groups, the it would previously just return the stat group name as "Groups" (due to the raw naming convention of "//Groups//STATGROUP_Foo//..."). Since this didn't match the expected naming convention in FLevelViewportCommands::HandleNewStat (ie. STAT_XXX or STATGROUP_XXX), it would fail to add it. When the first actual stat belonging to that group is added, it would add a menu entry for the group based on that, but the stat description no longer makes sense as a tooltip for the group. As a result, all the editor tooltips were junk. #jira UE-53845 Change 3831064 by Ben.Marsh Fix log file contention when spawning UBT recursively. Change 3832654 by Ben.Marsh UGS: Fix error panel not being selected when opened, and weird alignment/color issues on it. Change 3832680 by Ben.Marsh UGS: Fix failing to detect workspace if synced to a different stream. Seems to be a regression caused by recent P4D upgrade. Change 3832695 by Ben.Marsh UGS: Invert the options in the 'Show Changes' submenu for simplicity. Change 3833528 by Ben.Marsh UAT: Script to rewrite source files with public include paths relative to the 'Public' folder. Usage is: RebasePublicIncludePaths -UpdateDir=<Dir> [-Project=<Dir>] [-Write]. Change 3833543 by Ben.Marsh UBT: Allow targets to opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target, which has recently become a problem with larger games (due to Microsoft's compiler embedding the command line into each object file, with a maximum length of 64kb). All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs, as may individual modules. Change 3834354 by Robert.Manuszewski Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks. #jira UE-52035 Change 3834400 by Robert.Manuszewski Fixing crash on exit caused by cached archetypes not being cleaned up before static exit cleanup. #jira UE-52035 Change 3834947 by Steve.Robb USE_FORMAT_STRING_TYPE_CHECKING removed from FMsg::Logf and FMsg::Logf_Internal. Change 3835004 by Ben.Marsh Fix code that relies on dubious behavior of requiring referenced "include path only" modules having their _API macros set to be empty, even if the module is actually implemented in a separate DLL. Change 3835340 by Ben.Marsh Fix errors making installed build from directories with spaces in the name. Change 3835972 by Ben.Marsh UBT: Improved diagnostic message for targets which don't need a version file. Change 3836019 by Ben.Marsh UBT: Fix warnings caused by defining linkage macros for third party libraries. Change 3836269 by Ben.Marsh Fix message box larger than the screen height being created when a large number of modules are incompatible on startup. Change 3836543 by Ben.Marsh Enable SoundMod plugin on Linux, since it's already supported through the editor. Change 3836546 by Ben.Marsh PR #4412: fix type mismatch (Contributed by nakapon) Change 3836805 by Ben.Marsh Fix commandlet to compile marketplace plugins. Change 3836829 by Ben.Marsh UBT: Fix ability to precompile plugins from installed engine builds. Change 3837036 by Ben.Marsh UBT: Write the previous and new contents of intermediate files to the log if they change. Makes it easier to debug unexpected rebuilds. Change 3837037 by Ben.Marsh UBT: Fix engine modules having inconsistent definitions depending on whether modules are only referenced for their include paths vs being linked into a binary (due to different _API macro). Change 3837040 by Ben.Marsh UBT: Remove code that initializes members in ModuleRules and TargetRules objects before the constructor is run. This is no longer necessary, now that the backwards-compatible default constructors have been removed. Change 3837247 by Ben.Marsh UBT: Remove UELinkerFixups module, now that plugins and precompiled modules do not require hacks to force initialization (since they're linked in as object files). Encryption and signing keys are now set via macros expanded from the IMPLEMENT_PRIMARY_GAME_MODULE macro, via project-specific macros added in the TargetRules constructor. Change 3837262 by Ben.Marsh UBT: Set whether a module is an engine module or not via a default value for the rules assembly. All non-program engine and enterprise modules are created with this flag set to true; program targets and modules are now created from a different assembly that sets it to false. This removes hacks from UEBuildModule needed to adjust behavior for different module types based on the directory containing the module. Also add a bUseBackwardsCompatibleDefaults flag to the TargetRules class, also initialized to a default value from a setting passed to the RulesAssembly constructor. This controls whether modules created for the target should be configured to allow breaking changes to default settings, and is set to false for all engine targets, and true for all project targets. Change 3837343 by Ben.Marsh UBT: Remove the OverrideExecutableFileExtension target property. Change the only current use for this (the MayaLiveLinkPlugin target) to use a post build step to copy the file instead. Change 3837356 by Ben.Marsh Fix invalid character encodings. Change 3837727 by Graeme.Thornton UnrealPak: KeyGenerator: Only generate prime table when required, not all the time Change 3837823 by Ben.Marsh UBT: Output warnings and errors when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window. Change 3837831 by Graeme.Thornton UBT: When parsing crypto settings, always load legacy data first, then allow the new system to override it. Provides the same key backwards compatibility that the editor settings class gives Change 3837857 by Robert.Manuszewski PR #4404: Make FGCArrayPool singleton global instead of per-CU (Contributed by mhutch) Change 3837943 by Robert.Manuszewski PR #4405: Fix FGarbageCollectionTracer (Contributed by mhutch) Change 3838451 by Ben.Marsh UBT: Fix exceptions thrown on a background thread while caching C++ includes not being caught and logged correctly. Now captures exceptions and re-throws on the main thread. #jira UE-53996 Change 3839519 by Ben.Marsh UBT: Simplify configuring bPrecompile and bUsePrecompile settings for modules. Each rules assembly can now be configured as installed, which defaults the module rules it creates to use precompiled data. Change 3843790 by Graeme.Thornton UnrealPak: Log the size of all encrypted data Change 3844258 by Ben.Marsh Fix plugin compile failure when created via new plugin wizard. Passing -plugin on the command line is unnecessary, and is now reserved for packaging external plugins for the marketplace. Also extend the length of time that the error toast stays visible, and don't delete the plugin on failure. #jira UE-54157 Change 3845796 by Ben.Marsh Workaround for slow performance of String.EndsWith() on Mono. Change 3845823 by Ben.Marsh Fix case sensitive matching of platform names in -TargetPlatform=X argument to BuildCookRun. #jira UE-54123 Change 3845901 by Arciel.Rekman Linux: fix crash due to lambda lifetime issues (UE-54040). - The lambda goes out of scope in FBufferVisualizationMenuCommands::CreateVisualizationCommands, crashing the editor if compiled with a recent clang (5.0+). (Edigrating 3819174 to Dev-Core) Change 3846439 by Ben.Marsh Revert CL 3822742 to always call Process.WaitForExit(). The Android target platform module in the editor spawns ADB.EXE, which inherits the editor's stdout/stderr handles and forks itself. Process.WaitForExit() waits for EOF on those pipes, which never occurs because the forked process never terminates. Proper fix is probably to have the engine explicitly duplicate stdout/stderr handles for new pipes to output process, but too risky before copying up to Main. Change 3816608 by Ben.Marsh UBT: Use DirectoryReference objects for all include paths. Change 3816954 by Ben.Marsh UBT: Remove bIncludeDependentLibrariesInLibrary option. This is not widely supported by platform toolchains, and is not used anywhere. Change 3816986 by Ben.Marsh UBT: Remove UEBuildBinaryConfig; UEBuildBinary objects are now just created directly. Change 3816991 by Ben.Marsh UBT: Deprecate PlatformSpecificDynamicallyLoadedModules. We no longer have any special behavior for these modules. Change 3823090 by Ben.Marsh UAT: Improve logging for child UAT instances. - Calling RunUAT now requires an identifier for prefixing into the parent log, which is also used to determine the name of the log folder. - Stdout is no longer written to its own output file, since it's written to the parent stdout, the parent log file, and the child log file anyway. - Log folders for child UAT instances are left intact, rather than being copied to the parent folder. The derived names for the copied names were confusing and hard to read. - Output from UAT is no longer returned as a string. It should not be parsed anyway (but may be huge!). ProcessResult now supports running without capturing output. Change 3826082 by Ben.Marsh UBT: Add a check to make sure that all modules that are precompiled are correctly marked to enable it, even if they are part of the build target. Change 3827025 by Ben.Marsh UBT: Move the compile output directory into a property on the module, and explicitly pass it to the toolchain when compiling. Change 3829927 by James.Hopkin Made HTTP interface const correct Change 3833533 by Ben.Marsh Rewrite engine source files to base include paths relative to the "Public" directory. This allows reducing the number of public include paths that have to be added for engine modules. Change 3835826 by Ben.Marsh UBT: Precompiled targets now generate a separate manifest for each precompiled module, rather than adding object files to a library. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced. Change 3835969 by Ben.Marsh UBT: Fix cases where text is being written directly to the console rather than via logging functions. Change 3837777 by Steve.Robb Format string type checking added to FOutputDevice::Logf. Fixes for those. Change 3838569 by Steve.Robb Algo moved up a folder. [CL 3847482 by Ben Marsh in Main branch]
2018-01-20 11:19:29 -05:00
IMPLEMENT_MODULE(FHTTPChunkInstallerModule, HTTPChunkInstaller);