parent
9c54341af8
commit
36c4e827bd
@ -1,30 +0,0 @@
|
||||
*.ilk
|
||||
*.suo
|
||||
*.user
|
||||
*.o
|
||||
*.temp
|
||||
*.bootstrap.digests
|
||||
*.log
|
||||
*.exp
|
||||
*.vssettings
|
||||
*.exportlog
|
||||
*.mayaSwatches
|
||||
*.ma.swatches
|
||||
*.bak
|
||||
*.bak2
|
||||
*.akd
|
||||
Solutions
|
||||
BinTemp
|
||||
*.options
|
||||
*.pyc
|
||||
*.db
|
||||
Cache
|
||||
AssetProcessor_tmp.exe
|
||||
Builders_Temp
|
||||
Bin64vc*
|
||||
$tmp*
|
||||
.pytest_cache
|
||||
__pycache__
|
||||
# Python Module egg file
|
||||
*.egg
|
||||
*.egg-link
|
||||
@ -1,590 +0,0 @@
|
||||
; ---- Enable/Disable platforms for the entire project. AssetProcessor will automatically add the current platform by default.
|
||||
|
||||
; PLATFORM DEFINITIONS
|
||||
; [Platform (unique identifier)]
|
||||
; tags=(comma-seperated-tags)
|
||||
;
|
||||
; note: the 'identifier' of a platform is the word(s) following the "Platform" keyword (so [Platform pc] means identifier
|
||||
; is 'pc' for example. This is used to name its assets folder in the cache and should be used in your bootstrap.cfg
|
||||
; or your main.cpp to choose what assets to load for that particular platform.
|
||||
; Its primary use is to enable additional non-host platforms (Ios, android...) that are not the current platform.
|
||||
; note: 'tags' is a comma-seperated list of tags to tag the platform with that builders can inspect to decide what to do.
|
||||
|
||||
; while builders can accept any tags you add in order to make decisions, common tags are
|
||||
; tools - this platform can host the tools and editor and such
|
||||
; renderer - this platform runs the client engine and renders on a GPU. If missing we could be on a server-only platform
|
||||
; mobile - a mobile platform such as a set top box or phone with limited resources
|
||||
; console - a console platform
|
||||
; server - a server platform of some kind, usually headless, no renderer.
|
||||
|
||||
[Platform pc]
|
||||
tags=tools,renderer,dx12,vulkan
|
||||
|
||||
[Platform es3]
|
||||
tags=android,mobile,renderer,vulkan
|
||||
|
||||
[Platform ios]
|
||||
tags=mobile,renderer,metal
|
||||
|
||||
[Platform osx_gl]
|
||||
tags=tools,renderer,metal
|
||||
|
||||
; this is an example of a headless platform that has no renderer.
|
||||
; To use this you would still need to make sure 'assetplatform' in your startup params in your main() chooses this 'server' platform as your server 'assets' flavor
|
||||
[Platform server]
|
||||
tags=server,dx12,vulkan
|
||||
|
||||
; this section allows you to turn on various platforms in addition to the host platform you're running on
|
||||
; 'enabled' is AUTOMATICALLY TRUE for the current platform that you are running on, so it is not necessary to force it to true for that platform
|
||||
; To enable any additional platform, just uncomment the appropriate line below.
|
||||
|
||||
[Platforms]
|
||||
;pc=enabled
|
||||
;es3=enabled
|
||||
;ios=enabled
|
||||
;osx_gl=enabled
|
||||
;jasper=enabled
|
||||
;provo=enabled
|
||||
;salem=enabled
|
||||
;server=enabled
|
||||
|
||||
; ---- The number of worker jobs, 0 means use the number of Logical Cores
|
||||
[Jobs]
|
||||
minJobs=1
|
||||
maxJobs=0
|
||||
|
||||
; cacheServerAddress is the location of the asset server cache.
|
||||
; Currently for a network share server this would be the absolute file path to the network share folder.
|
||||
[Server]
|
||||
;cacheServerAddress=
|
||||
|
||||
; ---- add any metadata file type here that needs to be monitored by the AssetProcessor.
|
||||
; Modifying these meta file will cause the source asset to re-compile again.
|
||||
; They are specified in the following format
|
||||
; metadata extension=original extension to replace
|
||||
; if the metadata extension does not replace the original, then the original can be blank
|
||||
; so for example if your normal file is blah.tif and your metafile for that file is blah.tif.exportsettings
|
||||
; then your declaration would be exportsettings= ; ie, it would be blank
|
||||
; however if your metafile REPLACES the extension (for example, if you have the file blah.i_caf and its metafile is blah.exportsettings)
|
||||
; then you specify the original extension here to narrow the scope.
|
||||
; If a relative path to a specific file is provided instead of an extension, a change to the file will change all files
|
||||
; with the associated extension (e.g. Animations/SkeletonList.xml=i_caf will cause all i_caf files to recompile when
|
||||
; Animations/SkeletonList.xml within the current game project changes)
|
||||
|
||||
[MetaDataTypes]
|
||||
exportsettings=
|
||||
animsettings=i_caf
|
||||
Animations/SkeletonList.xml=i_caf
|
||||
cbc=abc
|
||||
fbx.assetinfo=fbx
|
||||
|
||||
; ---- add any folders to scan here. The priority order is the order they appear here
|
||||
; available macros are
|
||||
; @ROOT@ - the location of engineroot.txt
|
||||
; @GAMENAME@ - the name of the current game project, for example 'RPGSample'
|
||||
; note that they are sorted by their 'order' value, and the lower the order the more important an asset is
|
||||
; lower order numbers override higher ones.
|
||||
; If specified, output will be prepended to every path found in that recognizer's watch folder.
|
||||
; Note that you can also make the scan folder platform specific by using the keywords include and exclude.
|
||||
; Both include and exclude can contain either platform tags, platform identifiers or both.
|
||||
; if no include is specified, all currently enabled platforms are included by default.
|
||||
; If includes ARE specified, it will be filtered down by the list of currently enabled platforms.
|
||||
; [ScanFolder (unique identifier)]
|
||||
; include = (comma seperated platform tags or identifiers)
|
||||
; exclude = (comma seperated platform tags or identifiers)
|
||||
; For example if you want to include a scan folder only for platforms that have the platform tags tools and renderer
|
||||
; but omit it for platform osx_gl, you will have a scanfolder rule like
|
||||
; [ScanFolder (unique identifier)]
|
||||
; watch=@ROOT@/foo
|
||||
; include = tools, renderer
|
||||
; exclude = osx_gl
|
||||
|
||||
[ScanFolder Game]
|
||||
watch=@ROOT@/@GAMENAME@
|
||||
display=@GAMENAME@
|
||||
recursive=1
|
||||
order=0
|
||||
|
||||
; gems will be auto-added from 100 onwards
|
||||
|
||||
[ScanFolder Root]
|
||||
watch=@ROOT@
|
||||
recursive=0
|
||||
order=10000
|
||||
|
||||
[ScanFolder Engine]
|
||||
watch=@ENGINEROOT@/Engine
|
||||
recursive=1
|
||||
order=20000
|
||||
|
||||
[ScanFolder Editor]
|
||||
watch=@ENGINEROOT@/Editor
|
||||
output=editor
|
||||
recursive=1
|
||||
order=30000
|
||||
include=tools,renderer
|
||||
|
||||
|
||||
;Excludes files that match the pattern or glob
|
||||
; if you use a pattern, remember to escape your backslashes (\\)
|
||||
[Exclude _LevelBackups]
|
||||
pattern=.*\\/Levels\\/.*\\/_savebackup\\/.*
|
||||
|
||||
[Exclude _LevelAutoBackups]
|
||||
pattern=.*\\/Levels\\/.*\\/_autobackup\\/.*
|
||||
|
||||
[Exclude HoldFiles]
|
||||
pattern=.*\\/Levels\\/.*_hold\\/.*
|
||||
|
||||
[Exclude TempFiles]
|
||||
; note that $ has meaning to regex, so we escape it.
|
||||
pattern=.*\\/\\$tmp[0-9]*_.*
|
||||
|
||||
[Exclude AlembicCompressionTemplates]
|
||||
pattern=.*\\/Presets\\/GeomCache\\/.*
|
||||
|
||||
[Exclude TmpAnimationCompression]
|
||||
pattern=.*\\/Editor\\/Tmp\\/AnimationCompression\\/.*
|
||||
|
||||
[Exclude EventLog]
|
||||
pattern=.*\\/Editor\\/.*eventlog\\.xml
|
||||
|
||||
[Exclude GameGemsCode]
|
||||
pattern=.*\\/Gem\\/Code\\/.*
|
||||
|
||||
[Exclude GameGemsResources]
|
||||
pattern=.*\\/Gem\\/Resources\\/.*
|
||||
|
||||
[Exclude Private Certs]
|
||||
pattern=.*\DynamicContent\\/Certificates\\/Private\\/.*
|
||||
|
||||
[Exclude CMakeLists]
|
||||
pattern=.*\\/CMakeLists.txt
|
||||
|
||||
[Exclude CMakeFiles]
|
||||
pattern=.*\\/.*\\.cmake
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Large Worlds Test
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
[Exclude Work In Progress Folders]
|
||||
pattern=.*\\/WIP\\/.*
|
||||
|
||||
[Exclude Content Source Folders]
|
||||
pattern=.*\\/CONTENT_SOURCE\\/.*
|
||||
|
||||
[Exclude Art Source Folders]
|
||||
pattern=.*\\/ArtSource\\/.*
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; RC params mapping examples
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
; note that productAssetType is a means of setting the output asset Type (as in AZ::Data::AssetType) of a simple job
|
||||
; and is the recommended way to specify that a certain kind of file (such as '*.myextension') becomes registered as the
|
||||
; actual UUID of that type in the engine itself.
|
||||
|
||||
; Use a regex for matching files, same params for all platforms
|
||||
;[RC TGAs]
|
||||
;pattern=.+\\.tga$
|
||||
;params=/tga /texture
|
||||
|
||||
; Use a glob, have special params for es3 platform
|
||||
;[RC TIFFs]
|
||||
;glob=*.tif
|
||||
;params=/texture
|
||||
;es3=/pvrt
|
||||
|
||||
; You can also modify a version to compile all matching files again
|
||||
; By default the version is empty
|
||||
;[RC tif]
|
||||
;glob=*.tif
|
||||
;params = \\someparams
|
||||
;version =1.0
|
||||
; This will make the AssetProcessor compile all the .tif files again
|
||||
|
||||
; you can also optionally supply a priority.
|
||||
; this is used to sort jobs when no other external circumstance sorts them
|
||||
; for example, copy jobs will be higher in priority than other jobs that are not copy jobs
|
||||
; however if they're both copy jobs or both not, and no other circumstances apply, then priority will be used.
|
||||
; default priority is zero if not specified
|
||||
|
||||
; you can specify an option to skip processing for a file type based on the platform.
|
||||
; for example, if you dont want to process tif files for ios, you can make tif files
|
||||
; process on any platform except for ios:
|
||||
;[RC tif]
|
||||
;glob=*.tif
|
||||
;params = \\someparams
|
||||
;ios=skip
|
||||
|
||||
; you can specify an option to output product dependencies for a copy job.
|
||||
; please note that you only need to set this option when cry code is required to parse the asset.
|
||||
; otherwise product dependencies will be output automatically by the CopyDependencyBuilder.
|
||||
; for example, if you want to output the product dependencies for font assets:
|
||||
;[RC font]
|
||||
;glob=*.font
|
||||
;params=copy
|
||||
;outputProductDependencies=true
|
||||
|
||||
; you can also specify an option to make all jobs critical that matches some pattern/glob.
|
||||
; for example, if you want to make all png files critical than set critical to true.
|
||||
; Note that by default all copy jobs are critical.
|
||||
; Critical jobs are processed before non critical jobs and also prevent the runtime or editor from starting until they are all complete.
|
||||
;[RC png]
|
||||
;glob=*.png
|
||||
;params = \\someparams
|
||||
;critical=true
|
||||
|
||||
; you can also specify an option to make all the job store in the asset server cache location if you are running AP in server mode.
|
||||
; For example, if you want to store all png jobs in the asset server cache location including their logs, you can set checkServer = true.
|
||||
; The client(i.e if you are running AP in non-server mode) will also check for this flag to know which jobs to fetch from the asset server cache location.
|
||||
; if unsucessful, it will process the job locally as usual.
|
||||
;[RC png]
|
||||
;glob=*.png
|
||||
;params = \\someparams
|
||||
;critical=true
|
||||
;checkServer=true
|
||||
|
||||
; note that the FULL PATH to the file will be used as the match, not the relative path
|
||||
; so ensure start your patterns with .* or as appropriate.
|
||||
; Also, any rules which match will apply - so if you have two rules which both apply to PNG files for example
|
||||
; but you only want one, you might want to use exclusion patterns:
|
||||
|
||||
;Example: process everything EXCEPT the ones in the libs/ui folder with these params
|
||||
;[RC png-normal]
|
||||
;pattern=(?!.*libs\\/ui\\/).*\\.png
|
||||
;params=/imagecompressor=CTSquish /streaming=0
|
||||
;lockSource=true
|
||||
|
||||
;Example: Process everything in the libs/ui folder with linear color space
|
||||
;[RC png-ui]
|
||||
;pattern=(.*libs\\/ui\\/).*\\.png
|
||||
;params=/imagecompressor=CTSquish /streaming=0 /colorspace=linear,linear
|
||||
;lockSource=true
|
||||
|
||||
; More example Regexes:
|
||||
; pattern=(?!(.*libs\\/ui\\/)|(.*editor\\/).*\\.png
|
||||
; This pattern will not match anything with editor/ or libs/ui/ in it
|
||||
; pattern=((.*libs\\/ui\\/)|(.*editor\\/).*\\.png
|
||||
; This pattern will only match anything with editor/ or libs/ui/ in it
|
||||
|
||||
;Give every [Section Name] its own unique Name or else they will overwrite each other!
|
||||
|
||||
[RC i_caf]
|
||||
glob=*.i_caf
|
||||
params=/cafAlignTracks=1 /animConfigFolder=Animations /skipdba=1 /refresh=1
|
||||
; force server to send the 'pc' platform to RC.EXE so it compiles the same as PC.
|
||||
server=/cafAlignTracks=1 /animConfigFolder=Animations /skipdba=1 /refresh=1 /p=pc
|
||||
priority=5
|
||||
productAssetType={6023CFF8-FCBA-4528-A8BF-6E0E10B9AB9C}
|
||||
|
||||
[RC caf]
|
||||
glob=*.caf
|
||||
params=copy
|
||||
productAssetType={6023CFF8-FCBA-4528-A8BF-6E0E10B9AB9C}
|
||||
; same as above
|
||||
|
||||
[RC mp4]
|
||||
glob=*.mp4
|
||||
params=copy
|
||||
productAssetType={DDFEE0B2-9E5A-412C-8C77-AB100E24C1DF}
|
||||
|
||||
[RC mkv]
|
||||
glob=*.mkv
|
||||
params=copy
|
||||
productAssetType={DDFEE0B2-9E5A-412C-8C77-AB100E24C1DF}
|
||||
; same as above
|
||||
|
||||
[RC webm]
|
||||
glob=*.webm
|
||||
params=copy
|
||||
productAssetType={DDFEE0B2-9E5A-412C-8C77-AB100E24C1DF}
|
||||
; same as above
|
||||
|
||||
[RC mov]
|
||||
glob=*.mov
|
||||
params=copy
|
||||
productAssetType={DDFEE0B2-9E5A-412C-8C77-AB100E24C1DF}
|
||||
; same as above
|
||||
|
||||
[RC bk2]
|
||||
glob=*.bk2
|
||||
params=copy
|
||||
productAssetType={BF4879B9-B893-41D2-80E9-24A7BDCD2B50}
|
||||
|
||||
[RC img]
|
||||
glob=*.img
|
||||
params=copy
|
||||
|
||||
[RC dba]
|
||||
glob=*.dba
|
||||
params=copy
|
||||
productAssetType={511562BE-65A5-4538-A5F1-AC685366243E}
|
||||
version=2
|
||||
|
||||
[RC cgf]
|
||||
glob=*.cgf
|
||||
params=/VertexPositionFormat=exporter /VertexIndexFormat=u32
|
||||
; on server, feed rc.exe the param /p=pc to force it to compile assets for server platform in pc format.
|
||||
server=/VertexPositionFormat=exporter /VertexIndexFormat=u32 /p=pc
|
||||
lockSource=true
|
||||
priority=10
|
||||
; allow CGF files to compile first, so untextured models appear before their textures for faster startup
|
||||
; other available params: /SplitLODs=1
|
||||
|
||||
[RC surfaceTagNameList]
|
||||
glob=*.surfaceTagNameList
|
||||
params=copy
|
||||
productAssetType={A471B2A9-85FC-4993-842D-1881CBC03A2B}
|
||||
|
||||
[RC gradImageSettings]
|
||||
glob=*.gradimagesettings
|
||||
params=copy
|
||||
productAssetType={B36FEB5C-41B6-4B58-A212-21EF5AEF523C}
|
||||
|
||||
[RC fbx]
|
||||
glob=*.fbx
|
||||
; Priority set to 9 so its "before" things like materials but after things like actors and motions (which build using a proper AssetBuilderSDK builder and thus are not in this file)
|
||||
priority=9
|
||||
version=5
|
||||
|
||||
[RC chr]
|
||||
glob=*.chr
|
||||
params=copy
|
||||
productAssetType={60161B46-21F0-4396-A4F0-F2CCF0664CDE}
|
||||
version=2
|
||||
|
||||
[RC skin]
|
||||
glob=*.skin
|
||||
params=copy
|
||||
|
||||
[RC cfi]
|
||||
glob=*.cfi
|
||||
params=copy
|
||||
|
||||
[RC cfx]
|
||||
glob=*.cfx
|
||||
params=copy
|
||||
|
||||
[RC cfr]
|
||||
glob=*.cfr
|
||||
params=copy
|
||||
|
||||
; Warning: If you change the VertexIndexFormat, make sure you update the vtx_idx typedef in Code\CryEngine\CryCommon\ProjectDefines.h
|
||||
[RC abc]
|
||||
glob=*.abc
|
||||
params=/SkipFilesWithoutBuildConfig=0 /VertexIndexFormat=u32
|
||||
console=/SkipFilesWithoutBuildConfig=0 /VertexIndexFormat=u32
|
||||
mobile=/SkipFilesWithoutBuildConfig=0 /VertexIndexFormat=u16
|
||||
version=3
|
||||
server=skip
|
||||
|
||||
[RC png-entityicon]
|
||||
pattern=(.*EntityIcons\\/).*\\.png
|
||||
productAssetType={3436C30E-E2C5-4C3B-A7B9-66C94A28701B}
|
||||
params=skip ; only tools-supporting platforms should copy this file. Everyone else can skip.
|
||||
tools=copy
|
||||
|
||||
[RC usm]
|
||||
glob=*.usm
|
||||
params=copy
|
||||
server=skip
|
||||
|
||||
[RC animevents]
|
||||
glob=*.animevents
|
||||
params=copy
|
||||
productAssetType={C1D209C1-F81A-4586-A34E-1615995F9F3F}
|
||||
version=2
|
||||
|
||||
[RC adb]
|
||||
glob=*.adb
|
||||
params=copy
|
||||
productAssetType={50908273-CA36-4668-9828-15DD5092F973}
|
||||
|
||||
[RC bspace]
|
||||
glob=*.bspace
|
||||
params=copy
|
||||
|
||||
[RC cdf]
|
||||
glob=*.cdf
|
||||
params=copy
|
||||
productAssetType={DF036C63-9AE6-4AC3-A6AC-8A1D76126C01}
|
||||
; note - this used to be skinnedMeshAsset but its now Character Definition File specific.
|
||||
; .skin has its own type.
|
||||
|
||||
[RC chrparams]
|
||||
glob=*.chrparams
|
||||
params=copy
|
||||
productAssetType={4BBB785A-6824-4803-A607-F9323E7BEEF1}
|
||||
version=2
|
||||
|
||||
[RC comb]
|
||||
glob=*.comb
|
||||
params=copy
|
||||
|
||||
[RC dlg]
|
||||
glob=*.dlg
|
||||
params=copy
|
||||
|
||||
[RC csv]
|
||||
glob=*.csv
|
||||
params=copy
|
||||
|
||||
[RC json]
|
||||
glob=*.json
|
||||
params=copy
|
||||
|
||||
[RC lmg]
|
||||
glob=*.lmg
|
||||
params=copy
|
||||
|
||||
[RC smtl]
|
||||
glob=*.smtl
|
||||
params=copy
|
||||
|
||||
[RC sub]
|
||||
glob=*.sub
|
||||
params=copy
|
||||
productAssetType={71F9D30E-13F7-40D6-A3C9-E5358004B31F}
|
||||
version=2
|
||||
|
||||
[RC sbsar]
|
||||
glob=*.sbsar
|
||||
params=copy
|
||||
|
||||
[RC loc.agsxml]
|
||||
glob=*.loc.agsxml
|
||||
params=copy
|
||||
version=1
|
||||
|
||||
[RC node]
|
||||
glob=*.node
|
||||
params=copy
|
||||
|
||||
[RC veg]
|
||||
glob=*.veg
|
||||
params=copy
|
||||
|
||||
[RC dat]
|
||||
glob=*.dat
|
||||
params=copy
|
||||
|
||||
[RC lut]
|
||||
glob=*.lut
|
||||
params=copy
|
||||
|
||||
[RC txt]
|
||||
pattern=^(?!.*PreloadLibs.txt).*\\.txt
|
||||
params=copy
|
||||
|
||||
[RC cal]
|
||||
glob=*.cal
|
||||
params=copy
|
||||
|
||||
[RC grp]
|
||||
glob=*.grp
|
||||
params=copy
|
||||
productAssetType={7629EDD3-A361-49A2-B271-252127097D81}
|
||||
version=2
|
||||
|
||||
[RC xls]
|
||||
glob=*.xls
|
||||
params=copy
|
||||
|
||||
[RC ini]
|
||||
glob=*.ini
|
||||
params=copy
|
||||
|
||||
[RC ttf]
|
||||
glob=*.ttf
|
||||
params=copy
|
||||
|
||||
[RC otf]
|
||||
glob=*.otf
|
||||
params=copy
|
||||
|
||||
[RC ext]
|
||||
glob=*.ext
|
||||
params=copy
|
||||
|
||||
[RC pak]
|
||||
; Copy all pak files except level.pak, level.pak has its own builder.
|
||||
pattern=^((?!\\/level\\.pak).)*\\.pak$
|
||||
params=copy
|
||||
|
||||
[RC ctc]
|
||||
glob=*.ctc
|
||||
params=copy
|
||||
|
||||
[RC uiprefab]
|
||||
glob=*.uiprefab
|
||||
params=copy
|
||||
server=skip
|
||||
|
||||
[RC sprite]
|
||||
glob=*.sprite
|
||||
params=copy
|
||||
server=skip
|
||||
|
||||
[RC bin]
|
||||
glob=*.bin
|
||||
params=copy
|
||||
|
||||
[RC inputbindings]
|
||||
glob=*.inputbindings
|
||||
params=copy
|
||||
productAssetType={25971C7A-26E2-4D08-A146-2EFCC1C36B0C}
|
||||
|
||||
[RC physmaterial]
|
||||
glob=*.physmaterial
|
||||
params=copy
|
||||
productAssetType={9E366D8C-33BB-4825-9A1F-FA3ADBE11D0F}
|
||||
|
||||
[RC ocm]
|
||||
glob=*.ocm
|
||||
params=copy
|
||||
|
||||
; Feature tests use the raw .tif files for the golden image comparison
|
||||
[RC goldenimages]
|
||||
pattern=.*GoldenImages\\/.*\\.tif
|
||||
params=copy
|
||||
server=skip
|
||||
|
||||
; Copy over certificates for use with FileDataSource
|
||||
[RC CertificatePEM]
|
||||
glob=*.pem
|
||||
params=copy
|
||||
|
||||
; Copy over certificates for use with Dynamic Content
|
||||
[RC CertificateDER]
|
||||
glob=*.der
|
||||
params=copy
|
||||
|
||||
[RC PhysXMeshAsset]
|
||||
glob=*.pxmesh
|
||||
params=copy
|
||||
productAssetType={7A2871B9-5EAB-4DE0-A901-B0D2C6920DDB}
|
||||
|
||||
; Copy over cooked PhysX heightfield
|
||||
[RC PhysX HeightField]
|
||||
glob=*.pxheightfield
|
||||
params=copy
|
||||
productAssetType={B61189FE-B2D7-4AF1-8951-CB5C0F7834FC}
|
||||
|
||||
[RC filetag]
|
||||
glob=*.filetag
|
||||
params=copy
|
||||
productAssetType={F3BE5CAB-85B7-44B7-9495-863863F6B267}
|
||||
|
||||
; Precompiled shader srg
|
||||
[RC azsrg]
|
||||
glob=*.azsrg
|
||||
params=copy
|
||||
productAssetType={F8C9F4AE-3F6A-45AD-B4FB-0CA415FCC2E1}
|
||||
|
||||
; Precompiled shader variant
|
||||
[RC azshadervariant]
|
||||
glob=*.azshadervariant
|
||||
params=copy
|
||||
productAssetType={9F4D654B-4439-4C61-8DCD-F1C7C5560768}
|
||||
@ -1,197 +0,0 @@
|
||||
<ObjectStream version="1">
|
||||
<Class name="ComponentApplication::Descriptor" version="2" type="{70277A3E-2AF5-4309-9BBF-6161AFBDE792}">
|
||||
<Class name="bool" field="useExistingAllocator" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="grabAllMemory" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecords" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsSaveNames" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsAttemptDecodeImmediately" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="int" field="recordingMode" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
|
||||
<Class name="AZ::u64" field="stackRecordLevels" value="5" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="autoIntegrityCheck" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="markUnallocatedMemory" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="doNotUsePools" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="enableScriptReflection" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="unsigned int" field="pageSize" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="poolPageSize" value="4096" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="blockAlignment" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZ::u64" field="blockSize" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedOS" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedDebug" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="enableDrilling" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useOverrunDetection" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useMalloc" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="AZStd::vector" field="allocatorRemappings" type="{82897F6E-6389-5BEF-B427-761DB35AC1CC}"/>
|
||||
<Class name="AZStd::vector" field="modules" type="{8E779F80-AEAA-565B-ABB1-DE10B18CF995}">
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Maestro.Editor.3b9a978ed6f742a1acb99f74379a342c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TextureAtlas.5a149b6b3c964064bd4970f0e92f72e2.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LmbrCentral.Editor.ff06785f7145416b9d46fde39098cb0c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShine.Editor.0fefab3f13364722b2eab3b96ce2bf20.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.HttpRequestor.28479e255bde466e91fc34eec808d9c7.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptEvents.Editor.32d8ba21703e4bbbb08487366e48dd69.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ExpressionEvaluation.4c6f9df57ca2468f93c8d860ee6a1167.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AssetValidation.5a5c3c10b91d4b4ea8baef474c5b5d49.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Gestures.6056556b6088413984309c4a413593ad.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CertificateManager.659cffff33b14a10835bafc6ea623f98.v0.0.1" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.DebugDraw.Editor.66239f50bf754354b514c850c8b841fb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioSystem.Editor.6f63f2b6d07f4b89b4b7c86ebee7feb8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GameLift.76de765796504906b73be7365a9bff06.v2.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.SceneProcessing.Editor.7c2578f634df4345aca98d671e39b8ab.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GraphCanvas.Editor.875b6fcbdeea44deaae7984ad9bb6cdc.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.InAppPurchases.92fe57eae7d3402a90761973678c079a.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AutomatedTesting.afc25e1593194d6283d9ff744ab6d5a1.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.EditorPythonBindings.Editor.b658359393884c4381c2fe2952b1472a.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Metastream.c02d7efe05134983b5699d9ee7594c3a.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.WhiteBox.Editor.c5833dbda2e045d3a5f16b7414280c27.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ImageProcessing.Editor.eeffbd9211cf4ce0b5cc73696b427cbe.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TestAssetBuilder.Editor.f5c92f1560714010ba30467d93feecef.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Camera.Editor.f910686b6725452fbfc4671f95f733c6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.EMotionFX.Editor.044a63ea67d04479aa5daf62ded9d9ca.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GraphModel.Editor.0844f64a3acf4f5abf3a535dc9b63bc9.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysX.Editor.4e08125824434932a0fe3717259caa47.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CameraFramework.54f2763fe191432fa681ce4a354eedf5.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.SurfaceData.Editor.5de82d29d6094bfe97c1a4d35fcd5fbe.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioEngineWwise.Editor.67a80e2ac865406c990f2715feb55f7f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointMovement.73d8779dc28a4123b7c9ed76217464af.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointCamera.834070b9537d44df83559e2045c3859f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasGem.Editor.869a0d0ec11a45c299917d45c81555e6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GradientSignal.Editor.8825563d9d964ec3be3bab681f3bd9f2.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ImGui.Editor.bab8807a1bc646b3909f3cc200ffeedf.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ChatPlay.bfbc60c63ffd4b00927003735b26ce99.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TouchBending.Editor.c58d2057f3724b22ae0df0be68a4e316.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.FastNoise.Editor.c5f23032407f49ca8d8de1733423565c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShineExamples.c7935ecf5e8047fe8ca947b34b11cadb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Vegetation.Editor.f394e7cf54424bba89615381bba9511b.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointInput.Editor.09f4bedeee614358bc36788e77f97e51.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LandscapeCanvas.Editor.19c2b2d5018940108baf252934b8e6bf.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasPhysics.1c27519a4dda4ffaaeebf91514e5b1e8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysXDebug.Editor.516145e2d9904b13813f1b54605e26a6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZ::Entity" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
|
||||
<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
|
||||
<Class name="AZ::u64" field="id" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Name" value="SystemEntity" type="{EF8FF807-DDEE-4EB0-B678-4CA3A2C490A4}"/>
|
||||
<Class name="bool" field="IsDependencyReady" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="AZStd::vector" field="Components" type="{2BADE35A-6F1B-4698-B2BC-3373D010020C}">
|
||||
<Class name="PhysicsSystemComponent" field="element" value="" version="1" type="{1586DBA1-F5F0-49AB-9F59-AE62C0E60AE0}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="5881970355815182227" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="NavigationSystemComponent" field="element" value="" version="1" type="{3D27484B-00C4-4F3F-9605-2BF3E5C317FF}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="3408791856679455729" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="EditorSelectionAccentSystemComponent" field="element" value="" type="{6E0F0E2C-1FE5-4AFB-9672-DC92B3D2D844}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="4281709857282575192" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AudioSystemComponent" field="element" version="1" type="{666E28D2-FC99-4D41-861D-3758C5070653}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="4028172539943260142" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="LyShineSystemComponent" field="element" value="" type="{B0C78B8D-1E5B-47D7-95D0-EC69C0513804}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="13584318858523138243" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="LyEditorMetricsSystemComponent" field="element" value="" type="{B8C74085-F6B7-4E2F-8135-78C991CC53C5}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="8970396848016072155" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="StereoRendererComponent" field="element" version="1" type="{BBFE0965-5564-4739-8219-AFE8209A5E57}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
</ObjectStream>
|
||||
|
||||
@ -1,179 +0,0 @@
|
||||
<ObjectStream version="1">
|
||||
<Class name="ComponentApplication::Descriptor" version="2" type="{70277A3E-2AF5-4309-9BBF-6161AFBDE792}">
|
||||
<Class name="bool" field="useExistingAllocator" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="grabAllMemory" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecords" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsSaveNames" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsAttemptDecodeImmediately" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="int" field="recordingMode" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
|
||||
<Class name="AZ::u64" field="stackRecordLevels" value="5" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="autoIntegrityCheck" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="markUnallocatedMemory" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="doNotUsePools" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="enableScriptReflection" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="unsigned int" field="pageSize" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="poolPageSize" value="4096" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="blockAlignment" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZ::u64" field="blockSize" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedOS" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedDebug" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="enableDrilling" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useOverrunDetection" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useMalloc" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="AZStd::vector" field="allocatorRemappings" type="{82897F6E-6389-5BEF-B427-761DB35AC1CC}"/>
|
||||
<Class name="AZStd::vector" field="modules" type="{8E779F80-AEAA-565B-ABB1-DE10B18CF995}">
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Maestro.3b9a978ed6f742a1acb99f74379a342c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TextureAtlas.5a149b6b3c964064bd4970f0e92f72e2.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LmbrCentral.ff06785f7145416b9d46fde39098cb0c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShine.0fefab3f13364722b2eab3b96ce2bf20.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.HttpRequestor.28479e255bde466e91fc34eec808d9c7.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptEvents.32d8ba21703e4bbbb08487366e48dd69.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ExpressionEvaluation.4c6f9df57ca2468f93c8d860ee6a1167.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AssetValidation.5a5c3c10b91d4b4ea8baef474c5b5d49.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Gestures.6056556b6088413984309c4a413593ad.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CertificateManager.659cffff33b14a10835bafc6ea623f98.v0.0.1" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.DebugDraw.66239f50bf754354b514c850c8b841fb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioSystem.6f63f2b6d07f4b89b4b7c86ebee7feb8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GameLift.76de765796504906b73be7365a9bff06.v2.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GraphCanvas.875b6fcbdeea44deaae7984ad9bb6cdc.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.InAppPurchases.92fe57eae7d3402a90761973678c079a.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AutomatedTesting.afc25e1593194d6283d9ff744ab6d5a1.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Metastream.c02d7efe05134983b5699d9ee7594c3a.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.WhiteBox.c5833dbda2e045d3a5f16b7414280c27.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Camera.f910686b6725452fbfc4671f95f733c6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.EMotionFX.044a63ea67d04479aa5daf62ded9d9ca.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysX.4e08125824434932a0fe3717259caa47.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CameraFramework.54f2763fe191432fa681ce4a354eedf5.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.SurfaceData.5de82d29d6094bfe97c1a4d35fcd5fbe.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioEngineWwise.67a80e2ac865406c990f2715feb55f7f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointMovement.73d8779dc28a4123b7c9ed76217464af.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointCamera.834070b9537d44df83559e2045c3859f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasGem.869a0d0ec11a45c299917d45c81555e6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GradientSignal.8825563d9d964ec3be3bab681f3bd9f2.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ImGui.bab8807a1bc646b3909f3cc200ffeedf.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ChatPlay.bfbc60c63ffd4b00927003735b26ce99.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TouchBending.c58d2057f3724b22ae0df0be68a4e316.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.FastNoise.c5f23032407f49ca8d8de1733423565c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShineExamples.c7935ecf5e8047fe8ca947b34b11cadb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Vegetation.f394e7cf54424bba89615381bba9511b.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointInput.09f4bedeee614358bc36788e77f97e51.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasPhysics.1c27519a4dda4ffaaeebf91514e5b1e8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysXDebug.516145e2d9904b13813f1b54605e26a6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZ::Entity" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
|
||||
<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
|
||||
<Class name="AZ::u64" field="id" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Name" value="SystemEntity" type="{EF8FF807-DDEE-4EB0-B678-4CA3A2C490A4}"/>
|
||||
<Class name="bool" field="IsDependencyReady" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="AZStd::vector" field="Components" type="{2BADE35A-6F1B-4698-B2BC-3373D010020C}">
|
||||
<Class name="PhysicsSystemComponent" field="element" value="" version="1" type="{1586DBA1-F5F0-49AB-9F59-AE62C0E60AE0}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="14545574550664822512" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="NavigationSystemComponent" field="element" value="" version="1" type="{3D27484B-00C4-4F3F-9605-2BF3E5C317FF}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="9809863829757322975" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="LyShineSystemComponent" field="element" value="" type="{B0C78B8D-1E5B-47D7-95D0-EC69C0513804}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="3706545825063126910" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AudioSystemComponent" field="element" version="1" type="{666E28D2-FC99-4D41-861D-3758C5070653}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="17265601292746528732" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="StereoRendererComponent" field="element" version="1" type="{BBFE0965-5564-4739-8219-AFE8209A5E57}"/>
|
||||
<Class name="LmbrCentralSystemComponent" field="element" value="" version="1" type="{CE249D37-C1D6-4A64-932D-C937B0EC2B8C}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="17265313386362322770" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AssetDatabaseComponent" field="element" value="" version="1" type="{D5A73BCC-0098-4D1E-8FE4-C86101E374AC}">
|
||||
<Class name="AZ::Component" field="BaseClass1" type="{EDFCB2CF-F75D-43BE-B26B-F35821B29247}">
|
||||
<Class name="AZ::u64" field="Id" value="18338415854038604706" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
</ObjectStream>
|
||||
|
||||
@ -1,136 +0,0 @@
|
||||
<ObjectStream version="3">
|
||||
<Class name="ComponentApplication::Descriptor" version="2" type="{70277A3E-2AF5-4309-9BBF-6161AFBDE792}">
|
||||
<Class name="bool" field="useExistingAllocator" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="grabAllMemory" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecords" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsSaveNames" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="allocationRecordsAttemptDecodeImmediately" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="int" field="recordingMode" value="2" type="{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}"/>
|
||||
<Class name="AZ::u64" field="stackRecordLevels" value="5" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="autoIntegrityCheck" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="markUnallocatedMemory" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="doNotUsePools" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="enableScriptReflection" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="unsigned int" field="pageSize" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="poolPageSize" value="4096" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="unsigned int" field="blockAlignment" value="65536" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||
<Class name="AZ::u64" field="blockSize" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedOS" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="AZ::u64" field="reservedDebug" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
<Class name="bool" field="enableDrilling" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useOverrunDetection" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="useMalloc" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="AZStd::vector" field="allocatorRemappings" type="{82897F6E-6389-5BEF-B427-761DB35AC1CC}"/>
|
||||
<Class name="AZStd::vector" field="modules" type="{8E779F80-AEAA-565B-ABB1-DE10B18CF995}">
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Maestro.3b9a978ed6f742a1acb99f74379a342c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.TextureAtlas.5a149b6b3c964064bd4970f0e92f72e2.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LmbrCentral.ff06785f7145416b9d46fde39098cb0c.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShine.0fefab3f13364722b2eab3b96ce2bf20.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.HttpRequestor.28479e255bde466e91fc34eec808d9c7.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptEvents.32d8ba21703e4bbbb08487366e48dd69.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ExpressionEvaluation.4c6f9df57ca2468f93c8d860ee6a1167.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AssetValidation.5a5c3c10b91d4b4ea8baef474c5b5d49.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Gestures.6056556b6088413984309c4a413593ad.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CertificateManager.659cffff33b14a10835bafc6ea623f98.v0.0.1" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.DebugDraw.66239f50bf754354b514c850c8b841fb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioSystem.6f63f2b6d07f4b89b4b7c86ebee7feb8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GameLift.76de765796504906b73be7365a9bff06.v2.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.GraphCanvas.875b6fcbdeea44deaae7984ad9bb6cdc.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.InAppPurchases.92fe57eae7d3402a90761973678c079a.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AutomatedTesting.afc25e1593194d6283d9ff744ab6d5a1.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Metastream.c02d7efe05134983b5699d9ee7594c3a.v1.0.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.WhiteBox.c5833dbda2e045d3a5f16b7414280c27.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.Camera.f910686b6725452fbfc4671f95f733c6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.EMotionFX.044a63ea67d04479aa5daf62ded9d9ca.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysX.4e08125824434932a0fe3717259caa47.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysXCharacters.50f9ae1e09ac471bbd9d86ca8063ddf9.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.CameraFramework.54f2763fe191432fa681ce4a354eedf5.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.AudioEngineWwise.67a80e2ac865406c990f2715feb55f7f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointMovement.73d8779dc28a4123b7c9ed76217464af.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointCamera.834070b9537d44df83559e2045c3859f.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasGem.869a0d0ec11a45c299917d45c81555e6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ImGui.bab8807a1bc646b3909f3cc200ffeedf.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ChatPlay.bfbc60c63ffd4b00927003735b26ce99.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.LyShineExamples.c7935ecf5e8047fe8ca947b34b11cadb.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.StartingPointInput.09f4bedeee614358bc36788e77f97e51.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.ScriptCanvasPhysics.1c27519a4dda4ffaaeebf91514e5b1e8.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
<Class name="DynamicModuleDescriptor" field="element" type="{D2932FA3-9942-4FD2-A703-2E750F57C003}">
|
||||
<Class name="AZStd::string" field="dynamicLibraryPath" value="Gem.PhysXDebug.516145e2d9904b13813f1b54605e26a6.v0.1.0" type="{189CC2ED-FDDE-5680-91D4-9F630A79187F}"/>
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class name="AZ::Entity" version="2" type="{75651658-8663-478D-9090-2432DFCAFA44}">
|
||||
<Class name="EntityId" field="Id" version="1" type="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}">
|
||||
<Class name="AZ::u64" field="id" value="0" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
|
||||
</Class>
|
||||
<Class name="AZStd::string" field="Name" value="SystemEntity" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||
<Class name="AZStd::vector" field="Components" type="{13D58FF9-1088-5C69-9A1F-C2A144B57B78}"/>
|
||||
<Class name="bool" field="IsDependencyReady" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
<Class name="bool" field="IsRuntimeActive" value="true" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
|
||||
</Class>
|
||||
</ObjectStream>
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
; The PythonTest folder contains benchmarksettings test assets that should only get processed when
|
||||
; the test is run, and the assets are temporarily copied to a separate folder.
|
||||
[Exclude PythonTest Benchmark Settings Assets]
|
||||
pattern=.*\\/PythonTests\\/.*benchmarksettings
|
||||
|
||||
[Exclude fbx_tests]
|
||||
pattern=.*\\/fbx_tests\\/assets\\/.*
|
||||
|
||||
[Exclude wwise_bank_dependency_tests]
|
||||
pattern=.*\\/wwise_bank_dependency_tests\\/assets\\/.*
|
||||
|
||||
[Exclude AssetProcessorTestAssets]
|
||||
pattern=.*\\/asset_processor_tests\\/assets\\/.*
|
||||
|
||||
[Exclude Restricted AssetProcessorTestAssets]
|
||||
pattern=.*\\/asset_processor_tests\\/restricted\\/.*
|
||||
@ -0,0 +1,23 @@
|
||||
{
|
||||
"Amazon": {
|
||||
"AssetProcessor": {
|
||||
"Settings": {
|
||||
"Exclude PythonTest Benchmark Settings Assets": {
|
||||
"pattern": ".*\\\\/PythonTests\\\\/.*benchmarksettings"
|
||||
},
|
||||
"Exclude fbx_tests": {
|
||||
"pattern": ".*\\\\/fbx_tests\\\\/assets\\\\/.*"
|
||||
},
|
||||
"Exclude wwise_bank_dependency_tests": {
|
||||
"pattern": ".*\\\\/wwise_bank_dependency_tests\\\\/assets\\\\/.*"
|
||||
},
|
||||
"Exclude AssetProcessorTestAssets": {
|
||||
"pattern": ".*\\\\/asset_processor_tests\\\\/assets\\\\/.*"
|
||||
},
|
||||
"Exclude Restricted AssetProcessorTestAssets": {
|
||||
"pattern": ".*\\\\/asset_processor_tests\\\\/restricted\\\\/.*"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
"""
|
||||
All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
its licensors.
|
||||
|
||||
For complete copyright and license terms please see the LICENSE at the root of this
|
||||
distribution (the "License"). All use of this software is governed by the License,
|
||||
or, if provided, by the license below or the license accompanying this file. Do not
|
||||
remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
import os
|
||||
import sys
|
||||
|
||||
from ly_test_tools import LAUNCHERS
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
|
||||
|
||||
from base import TestAutomationBase
|
||||
|
||||
|
||||
@pytest.mark.SUITE_sandbox
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||
class TestAutomation(TestAutomationBase):
|
||||
|
||||
def test_Opening_Closing_Pane(self, request, workspace, editor, launcher_platform):
|
||||
from . import Opening_Closing_Pane as test_module
|
||||
self._run_test(request, workspace, editor, test_module)
|
||||
@ -1,2 +1,2 @@
|
||||
../Gems/LyShineExamples/Assets/UI/Textures/LyShineExamples/*map.tif
|
||||
@engroot@/Gems/LyShineExamples/Assets/UI/Textures/LyShineExamples/*map.tif
|
||||
|
||||
|
||||
@ -1,298 +0,0 @@
|
||||
{
|
||||
"GemListFormatVersion": 2,
|
||||
"Gems": [
|
||||
{
|
||||
"Path": "Gems/EMotionFX",
|
||||
"Uuid": "044a63ea67d04479aa5daf62ded9d9ca",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "EMotionFX"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PBSreferenceMaterials",
|
||||
"Uuid": "07375b61b1a2424bb03088bbdf28b2c8",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "PBSreferenceMaterials"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/GraphModel",
|
||||
"Uuid": "0844f64a3acf4f5abf3a535dc9b63bc9",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "GraphModel"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/StartingPointInput",
|
||||
"Uuid": "09f4bedeee614358bc36788e77f97e51",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "StartingPointInput"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/LyShine",
|
||||
"Uuid": "0fefab3f13364722b2eab3b96ce2bf20",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "LyShine"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/LandscapeCanvas",
|
||||
"Uuid": "19c2b2d5018940108baf252934b8e6bf",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "LandscapeCanvas"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ScriptCanvasPhysics",
|
||||
"Uuid": "1c27519a4dda4ffaaeebf91514e5b1e8",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ScriptCanvasPhysics"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/HttpRequestor",
|
||||
"Uuid": "28479e255bde466e91fc34eec808d9c7",
|
||||
"Version": "1.0.0",
|
||||
"_comment": "HttpRequestor"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/DevTextures",
|
||||
"Uuid": "2c227161447b4d77a5b07c093e214fe3",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "DevTextures"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ScriptEvents",
|
||||
"Uuid": "32d8ba21703e4bbbb08487366e48dd69",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ScriptEvents"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Maestro",
|
||||
"Uuid": "3b9a978ed6f742a1acb99f74379a342c",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "Maestro"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ExpressionEvaluation",
|
||||
"Uuid": "4c6f9df57ca2468f93c8d860ee6a1167",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ExpressionEvaluation"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PhysX",
|
||||
"Uuid": "4e08125824434932a0fe3717259caa47",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "PhysX"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PhysXDebug",
|
||||
"Uuid": "516145e2d9904b13813f1b54605e26a6",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "PhysXDebug"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/CameraFramework",
|
||||
"Uuid": "54f2763fe191432fa681ce4a354eedf5",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "CameraFramework"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/TextureAtlas",
|
||||
"Uuid": "5a149b6b3c964064bd4970f0e92f72e2",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "TextureAtlas"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/SurfaceData",
|
||||
"Uuid": "5de82d29d6094bfe97c1a4d35fcd5fbe",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "SurfaceData"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/AssetValidation",
|
||||
"Uuid": "5a5c3c10b91d4b4ea8baef474c5b5d49",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "AssetValidation"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Gestures",
|
||||
"Uuid": "6056556b6088413984309c4a413593ad",
|
||||
"Version": "1.0.0",
|
||||
"_comment": "Gestures"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/CertificateManager",
|
||||
"Uuid": "659cffff33b14a10835bafc6ea623f98",
|
||||
"Version": "0.0.1",
|
||||
"_comment": "CertificateManager"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/DebugDraw",
|
||||
"Uuid": "66239f50bf754354b514c850c8b841fb",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "DebugDraw"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/UiBasics",
|
||||
"Uuid": "6bb61c9e547043f0afc5019d6d460b78",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "UiBasics"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/AudioSystem",
|
||||
"Uuid": "6f63f2b6d07f4b89b4b7c86ebee7feb8",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "AudioSystem"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/StartingPointMovement",
|
||||
"Uuid": "73d8779dc28a4123b7c9ed76217464af",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "StartingPointMovement"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/GameLift",
|
||||
"Uuid": "76de765796504906b73be7365a9bff06",
|
||||
"Version": "2.0.0",
|
||||
"_comment": "GameLift"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/SceneProcessing",
|
||||
"Uuid": "7c2578f634df4345aca98d671e39b8ab",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "SceneProcessing"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/StartingPointCamera",
|
||||
"Uuid": "834070b9537d44df83559e2045c3859f",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "StartingPointCamera"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ScriptCanvas",
|
||||
"Uuid": "869a0d0ec11a45c299917d45c81555e6",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ScriptCanvasGem"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/GraphCanvas",
|
||||
"Uuid": "875b6fcbdeea44deaae7984ad9bb6cdc",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "GraphCanvas"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/GradientSignal",
|
||||
"Uuid": "8825563d9d964ec3be3bab681f3bd9f2",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "GradientSignal"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/InAppPurchases",
|
||||
"Uuid": "92fe57eae7d3402a90761973678c079a",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "InAppPurchases"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PhysicsEntities",
|
||||
"Uuid": "99ea531451fc4f64a5a9fe8f385e8a76",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "PhysicsEntities"
|
||||
},
|
||||
{
|
||||
"Path": "AutomatedTesting/Gem",
|
||||
"Uuid": "afc25e1593194d6283d9ff744ab6d5a1",
|
||||
"Version": "0.1.0"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/EditorPythonBindings",
|
||||
"Uuid": "b658359393884c4381c2fe2952b1472a",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "EditorPythonBindings"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ImGui",
|
||||
"Uuid": "bab8807a1bc646b3909f3cc200ffeedf",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ImGui"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ChatPlay",
|
||||
"Uuid": "bfbc60c63ffd4b00927003735b26ce99",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ChatPlay"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Metastream",
|
||||
"Uuid": "c02d7efe05134983b5699d9ee7594c3a",
|
||||
"Version": "1.0.0",
|
||||
"_comment": "Metastream"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PhysXSamples",
|
||||
"Uuid": "c4a4aadba44241ae9f0141e145def7f7",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "PhysXSamples"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Water",
|
||||
"Uuid": "c5083fcf89b24ab68fb0611c01a07b1d",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "Water"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/WhiteBox",
|
||||
"Uuid": "c5833dbda2e045d3a5f16b7414280c27",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "WhiteBox"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/TouchBending",
|
||||
"Uuid": "c58d2057f3724b22ae0df0be68a4e316",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "TouchBending"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/FastNoise",
|
||||
"Uuid": "c5f23032407f49ca8d8de1733423565c",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "FastNoise"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/LyShineExamples",
|
||||
"Uuid": "c7935ecf5e8047fe8ca947b34b11cadb",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "LyShineExamples"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/PrimitiveAssets",
|
||||
"Uuid": "ed07631f95fb4be1bd10cd37298ec697",
|
||||
"Version": "1.0.0",
|
||||
"_comment": "PrimitiveAssets"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/ImageProcessing",
|
||||
"Uuid": "eeffbd9211cf4ce0b5cc73696b427cbe",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "ImageProcessing"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Vegetation",
|
||||
"Uuid": "f394e7cf54424bba89615381bba9511b",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "Vegetation"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/TestAssetBuilder",
|
||||
"Uuid": "f5c92f1560714010ba30467d93feecef",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "TestAssetBuilder"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/Camera",
|
||||
"Uuid": "f910686b6725452fbfc4671f95f733c6",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "Camera"
|
||||
},
|
||||
{
|
||||
"Path": "Gems/LmbrCentral",
|
||||
"Uuid": "ff06785f7145416b9d46fde39098cb0c",
|
||||
"Version": "0.1.0",
|
||||
"_comment": "LmbrCentral"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,160 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
// Original file Copyright Crytek GMBH or its affiliates, used under license.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ISystem.h"
|
||||
#include <AzCore/base.h>
|
||||
#include <AzCore/IO/SystemFile.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
#include <AzFramework/Platform/PlatformDefaults.h>
|
||||
|
||||
// any of the following tags can be present in the bootstrap.cfg
|
||||
// you can also prefix it with a platform.
|
||||
// so for example, you can specify remote_ip alone to specify it for all platforms
|
||||
// or you could specify android_remote_ip to change it for android only.
|
||||
// the instructions are executed in the order that they appear, so you can set the default
|
||||
// by using the non-platform-specific version, and then later on in the file you
|
||||
// can override specific platforms.
|
||||
|
||||
#define CONFIG_KEY_FOR_REMOTEIP "remote_ip"
|
||||
#define CONFIG_KEY_FOR_REMOTEPORT "remote_port"
|
||||
#define CONFIG_KEY_FOR_GAMEFOLDER "sys_game_folder"
|
||||
#define CONFIG_KEY_FOR_REMOTEFILEIO "remote_filesystem"
|
||||
#define CONFIG_KEY_FOR_CONNECTTOREMOTE "connect_to_remote"
|
||||
#define CONFIG_KEY_WAIT_FOR_CONNECT "wait_for_connect"
|
||||
#define DEFAULT_GAMEDLL "EmptyTemplate"
|
||||
#define DEFAULT_GAMEFOLDER "EmptyTemplate"
|
||||
#define DEFAULT_REMOTEIP "127.0.0.1"
|
||||
#define DEFAULT_REMOTEPORT 45643
|
||||
#define CONFIG_KEY_FOR_ASSETS "assets"
|
||||
#define CONFIG_KEY_FOR_BRANCHTOKEN "assetProcessor_branch_token"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
class CEngineConfig
|
||||
{
|
||||
public:
|
||||
string m_gameFolder; // folder only ("MyGame")
|
||||
string m_assetPlatform; // what platform folder assets are from if more than one is available or using VFS ("pc" / "es3")
|
||||
bool m_connectToRemote;
|
||||
bool m_remoteFileIO;
|
||||
bool m_waitForConnect;
|
||||
string m_remoteIP;
|
||||
int m_remotePort;
|
||||
|
||||
string m_rootFolder; // The engine root folder
|
||||
string m_branchToken;
|
||||
|
||||
CEngineConfig([[maybe_unused]] const char** sourcePaths = nullptr, [[maybe_unused]] size_t numSearchPaths = 0, [[maybe_unused]] size_t numLevelsUp = 3)
|
||||
: m_gameFolder(DEFAULT_GAMEFOLDER)
|
||||
, m_connectToRemote(false)
|
||||
, m_remoteFileIO(false)
|
||||
, m_remotePort(DEFAULT_REMOTEPORT)
|
||||
, m_waitForConnect(false)
|
||||
, m_remoteIP(DEFAULT_REMOTEIP)
|
||||
{
|
||||
m_assetPlatform = AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME);
|
||||
|
||||
if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
|
||||
{
|
||||
AZ::SettingsRegistryInterface::FixedValueString gameFolder;
|
||||
auto gameFolderKey = AZ::SettingsRegistryInterface::FixedValueString::format("%s/%s",
|
||||
AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey, CONFIG_KEY_FOR_GAMEFOLDER);
|
||||
if (settingsRegistry->Get(gameFolder, gameFolderKey))
|
||||
{
|
||||
m_gameFolder.assign(gameFolder.c_str(), gameFolder.size());
|
||||
}
|
||||
|
||||
AZ::SettingsRegistryInterface::FixedValueString engineRoot;
|
||||
if (settingsRegistry->Get(engineRoot, AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder))
|
||||
{
|
||||
m_rootFolder.assign(engineRoot.c_str(), engineRoot.size());
|
||||
}
|
||||
}
|
||||
|
||||
OnLoadSettings();
|
||||
}
|
||||
|
||||
void CopyToStartupParams(SSystemInitParams& startupParams) const
|
||||
{
|
||||
startupParams.remoteFileIO = m_remoteFileIO;
|
||||
startupParams.remotePort = m_remotePort;
|
||||
startupParams.connectToRemote = m_connectToRemote;
|
||||
startupParams.waitForConnection = m_waitForConnect;
|
||||
|
||||
azstrncpy(startupParams.remoteIP, sizeof(startupParams.remoteIP), m_remoteIP.c_str(), m_remoteIP.length() + 1); // +1 for the null terminator
|
||||
azstrncpy(startupParams.assetsPlatform, sizeof(startupParams.assetsPlatform), m_assetPlatform.c_str(), m_assetPlatform.length() + 1); // +1 for the null terminator
|
||||
azstrncpy(startupParams.rootPath, sizeof(startupParams.rootPath), m_rootFolder.c_str(), m_rootFolder.length() + 1); // +1 for the null terminator
|
||||
azstrncpy(startupParams.gameFolderName, sizeof(startupParams.gameFolderName), m_gameFolder.c_str(), m_gameFolder.length() + 1); // +1 for the null terminator
|
||||
azstrncpy(startupParams.branchToken, sizeof(startupParams.branchToken), m_branchToken.c_str(), m_branchToken.length() + 1); // +1 for the null terminator
|
||||
|
||||
// compute assets path based on game folder name
|
||||
string gameFolderLower(m_gameFolder);
|
||||
gameFolderLower.MakeLower();
|
||||
azsnprintf(startupParams.assetsPath, sizeof(startupParams.assetsPath), "%s/%s", startupParams.rootPath, gameFolderLower.c_str());
|
||||
|
||||
// compute where the cache should be located
|
||||
azsnprintf(startupParams.rootPathCache, sizeof(startupParams.rootPathCache), "%s/Cache/%s/%s", m_rootFolder.c_str(), m_gameFolder.c_str(), m_assetPlatform.c_str());
|
||||
azsnprintf(startupParams.assetsPathCache, sizeof(startupParams.assetsPathCache), "%s/%s", startupParams.rootPathCache, gameFolderLower.c_str());
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void OnLoadSettings()
|
||||
{
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry == nullptr)
|
||||
{
|
||||
AZ_Warning("ParseEngineConfig", false, "Attempting to load configuration data while SettingsRegistry does not exist");
|
||||
return;
|
||||
|
||||
}
|
||||
AZ::SettingsRegistryInterface::FixedValueString settingsKeyPrefix = AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey;
|
||||
AZ::SettingsRegistryInterface::FixedValueString settingsValueString;
|
||||
AZ::s64 settingsValueInt{};
|
||||
|
||||
if (AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueInt, settingsKeyPrefix, CONFIG_KEY_FOR_REMOTEFILEIO))
|
||||
{
|
||||
m_remoteFileIO = settingsValueInt != 0;
|
||||
}
|
||||
if (AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueInt, settingsKeyPrefix, CONFIG_KEY_WAIT_FOR_CONNECT))
|
||||
{
|
||||
m_waitForConnect = settingsValueInt != 0;
|
||||
}
|
||||
if (AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueInt, settingsKeyPrefix, CONFIG_KEY_FOR_CONNECTTOREMOTE))
|
||||
{
|
||||
m_connectToRemote = settingsValueInt != 0;
|
||||
}
|
||||
if (AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueInt, settingsKeyPrefix, CONFIG_KEY_FOR_REMOTEPORT))
|
||||
{
|
||||
m_remotePort = aznumeric_cast<AZ::u16>(settingsValueInt);
|
||||
}
|
||||
if (settingsValueString = {};
|
||||
AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueString, settingsKeyPrefix, CONFIG_KEY_FOR_REMOTEIP))
|
||||
{
|
||||
m_remoteIP.assign(settingsValueString.c_str(), settingsValueString.size());
|
||||
}
|
||||
if (settingsValueString = {};
|
||||
AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, settingsValueString, settingsKeyPrefix, CONFIG_KEY_FOR_ASSETS))
|
||||
{
|
||||
m_assetPlatform.assign(settingsValueString.c_str(), settingsValueString.size());
|
||||
}
|
||||
if (settingsValueString = {};
|
||||
settingsRegistry->Get(settingsValueString, settingsKeyPrefix + "/" + CONFIG_KEY_FOR_BRANCHTOKEN))
|
||||
{
|
||||
m_branchToken.assign(settingsValueString.c_str(), settingsValueString.size());
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
@ -1,630 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
// Original file Copyright Crytek GMBH or its affiliates, used under license.
|
||||
|
||||
#include "CrySystem_precompiled.h"
|
||||
|
||||
#if defined(ENABLE_LOADING_PROFILER)
|
||||
|
||||
#include "BootProfiler.h"
|
||||
#include "ThreadInfo.h"
|
||||
#include <stack>
|
||||
#include <AzFramework/IO/FileOperations.h>
|
||||
|
||||
|
||||
namespace
|
||||
{
|
||||
StaticInstance<CBootProfiler, AZStd::no_destruct<CBootProfiler>> gProfilerInstance;
|
||||
enum
|
||||
{
|
||||
eMAX_THREADS_TO_PROFILE = 128,
|
||||
eNUM_RECORDS_PER_POOL = 2048, // so, eNUM_RECORDS_PER_POOL * sizeof(CBootProfilerRecord) == mem consumed by pool item
|
||||
// sizeof(CProfileBlockTimes)==152,
|
||||
// poolmem = 304Kb for 1 pool per thread
|
||||
};
|
||||
}
|
||||
|
||||
int CBootProfiler::CV_sys_bp_frames = 0;
|
||||
float CBootProfiler::CV_sys_bp_time_threshold = 0;
|
||||
|
||||
class CProfileBlockTimes
|
||||
{
|
||||
protected:
|
||||
LARGE_INTEGER m_startTimeStamp;
|
||||
LARGE_INTEGER m_stopTimeStamp;
|
||||
LARGE_INTEGER m_freq;
|
||||
CProfileBlockTimes()
|
||||
{
|
||||
memset(&m_startTimeStamp, 0, sizeof(m_startTimeStamp));
|
||||
memset(&m_stopTimeStamp, 0, sizeof(m_stopTimeStamp));
|
||||
memset(&m_freq, 0, sizeof(m_freq));
|
||||
}
|
||||
};
|
||||
|
||||
class CBootProfilerRecord
|
||||
{
|
||||
public:
|
||||
const char* m_label;
|
||||
LARGE_INTEGER m_startTimeStamp;
|
||||
LARGE_INTEGER m_stopTimeStamp;
|
||||
LARGE_INTEGER m_freq;
|
||||
|
||||
CBootProfilerRecord* m_pParent;
|
||||
typedef AZStd::vector<CBootProfilerRecord*> ChildVector;
|
||||
ChildVector m_Childs;
|
||||
|
||||
CryFixedStringT<256> m_args;
|
||||
|
||||
ILINE CBootProfilerRecord(const char* label, LARGE_INTEGER timestamp, LARGE_INTEGER freq, const char* args)
|
||||
: m_label(label)
|
||||
, m_startTimeStamp(timestamp)
|
||||
, m_freq(freq)
|
||||
, m_pParent(NULL)
|
||||
{
|
||||
memset(&m_stopTimeStamp, 0, sizeof(m_stopTimeStamp));
|
||||
if (args)
|
||||
{
|
||||
m_args = args;
|
||||
}
|
||||
}
|
||||
|
||||
ILINE ~CBootProfilerRecord()
|
||||
{
|
||||
// childs are allocated via pool as well, the destructors of each child
|
||||
// is called explicitly, for the purpose of freeing memory occupied by
|
||||
// m_Child vector. Otherwise there will be a memory leak.
|
||||
ChildVector::iterator it = m_Childs.begin();
|
||||
while (it != m_Childs.end())
|
||||
{
|
||||
(*it)->~CBootProfilerRecord();
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
void Print(AZ::IO::HandleType fileHandle, char* buf, size_t buf_size, size_t depth, LARGE_INTEGER stopTime, const char* threadName, const float timeThreshold)
|
||||
{
|
||||
if (m_stopTimeStamp.QuadPart == 0)
|
||||
{
|
||||
m_stopTimeStamp = stopTime;
|
||||
}
|
||||
|
||||
const float time = (float)(m_stopTimeStamp.QuadPart - m_startTimeStamp.QuadPart) * 1000.f / (float)m_freq.QuadPart;
|
||||
|
||||
if (timeThreshold > 0.0f && time < timeThreshold)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string tabs; //tabs(depth++, '\t')
|
||||
tabs.insert(0, depth++, '\t');
|
||||
|
||||
{
|
||||
string label = m_label;
|
||||
label.replace("&", "&");
|
||||
label.replace("<", "<");
|
||||
label.replace(">", ">");
|
||||
label.replace("\"", """);
|
||||
label.replace("'", "'");
|
||||
|
||||
if (m_args.size() > 0)
|
||||
{
|
||||
m_args.replace("&", "&");
|
||||
m_args.replace("<", "<");
|
||||
m_args.replace(">", ">");
|
||||
m_args.replace("\"", """);
|
||||
m_args.replace("'", "'");
|
||||
m_args.replace("%", "%");
|
||||
}
|
||||
|
||||
sprintf_s(buf, buf_size, "%s<block name=\"%s\" totalTimeMS=\"%f\" startTime=\"%" PRIu64 "\" stopTime=\"%" PRIu64 "\" args=\"%s\"> \n",
|
||||
tabs.c_str(), label.c_str(), time, m_startTimeStamp.QuadPart, m_stopTimeStamp.QuadPart, m_args.c_str());
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
}
|
||||
|
||||
const size_t childsSize = m_Childs.size();
|
||||
for (size_t i = 0; i < childsSize; ++i)
|
||||
{
|
||||
CBootProfilerRecord* record = m_Childs[i];
|
||||
assert(record);
|
||||
record->Print(fileHandle, buf, buf_size, depth, stopTime, threadName, timeThreshold);
|
||||
}
|
||||
|
||||
sprintf_s(buf, buf_size, "%s</block>\n", tabs.c_str());
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CProfileInfo
|
||||
{
|
||||
friend class CBootProfilerSession;
|
||||
private:
|
||||
CBootProfilerRecord* m_pRoot;
|
||||
CBootProfilerRecord* m_pCurrent;
|
||||
public:
|
||||
CProfileInfo()
|
||||
: m_pRoot(NULL)
|
||||
, m_pCurrent(NULL) {}
|
||||
};
|
||||
|
||||
|
||||
class CBootProfilerThreadsInterface
|
||||
{
|
||||
protected:
|
||||
CBootProfilerThreadsInterface()
|
||||
{
|
||||
memset(m_threadInfo, 0, sizeof(m_threadInfo));
|
||||
m_threadCounter = 0;
|
||||
}
|
||||
|
||||
unsigned int GetThreadIndexByID(unsigned int threadID);
|
||||
const char* GetThreadNameByIndex(unsigned int threadIndex);
|
||||
|
||||
int m_threadCounter;
|
||||
private:
|
||||
unsigned int m_threadInfo[eMAX_THREADS_TO_PROFILE]; //threadIDs
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
ILINE unsigned int CBootProfilerThreadsInterface::GetThreadIndexByID(unsigned int threadID)
|
||||
{
|
||||
for (int i = 0; i < eMAX_THREADS_TO_PROFILE; ++i)
|
||||
{
|
||||
if (m_threadInfo[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (m_threadInfo[i] == threadID)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int counter = CryInterlockedIncrement(&m_threadCounter) - 1; //count to index
|
||||
m_threadInfo[counter] = threadID;
|
||||
|
||||
return counter;
|
||||
}
|
||||
|
||||
ILINE const char* CBootProfilerThreadsInterface::GetThreadNameByIndex(unsigned int threadIndex)
|
||||
{
|
||||
assert(threadIndex < m_threadCounter);
|
||||
|
||||
const char* threadName = CryThreadGetName(m_threadInfo[threadIndex]);
|
||||
return threadName;
|
||||
}
|
||||
|
||||
class CRecordPool
|
||||
{
|
||||
public:
|
||||
CRecordPool()
|
||||
: m_baseAddr(NULL)
|
||||
, m_allocCounter(0)
|
||||
, m_next(NULL)
|
||||
{
|
||||
m_baseAddr = (CBootProfilerRecord*)CryModuleMemalign(eNUM_RECORDS_PER_POOL * sizeof(CBootProfilerRecord), 16);
|
||||
}
|
||||
~CRecordPool()
|
||||
{
|
||||
CryModuleMemalignFree(m_baseAddr);
|
||||
delete m_next;
|
||||
}
|
||||
|
||||
ILINE CBootProfilerRecord* allocateRecord()
|
||||
{
|
||||
if (m_allocCounter < eNUM_RECORDS_PER_POOL)
|
||||
{
|
||||
CBootProfilerRecord* newRecord = m_baseAddr + m_allocCounter;
|
||||
++m_allocCounter;
|
||||
return newRecord;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ILINE void setNextPool(CRecordPool* pool) { m_next = pool; }
|
||||
|
||||
private:
|
||||
CBootProfilerRecord* m_baseAddr;
|
||||
uint32 m_allocCounter;
|
||||
|
||||
CRecordPool* m_next;
|
||||
};
|
||||
|
||||
class CBootProfilerSession
|
||||
: public CBootProfilerThreadsInterface
|
||||
, protected CProfileBlockTimes
|
||||
{
|
||||
public:
|
||||
CBootProfilerSession();
|
||||
~CBootProfilerSession();
|
||||
|
||||
void Start();
|
||||
void Stop();
|
||||
|
||||
CBootProfilerRecord* StartBlock(const char* name, const char* args);
|
||||
void StopBlock(CBootProfilerRecord* record);
|
||||
|
||||
void CollectResults(const char* filename, const float timeThreshold);
|
||||
|
||||
private:
|
||||
string m_name;
|
||||
|
||||
CProfileInfo m_threadsProfileInfo[eMAX_THREADS_TO_PROFILE];
|
||||
CRecordPool* m_threadsRecordsPool[eMAX_THREADS_TO_PROFILE]; //head
|
||||
CRecordPool* m_threadsCurrentPools[eMAX_THREADS_TO_PROFILE]; //current
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CBootProfilerSession::CBootProfilerSession()
|
||||
{
|
||||
memset(m_threadsProfileInfo, 0, sizeof(m_threadsProfileInfo));
|
||||
|
||||
memset(m_threadsRecordsPool, 0, sizeof(m_threadsRecordsPool));
|
||||
memset(m_threadsCurrentPools, 0, sizeof(m_threadsCurrentPools));
|
||||
}
|
||||
|
||||
CBootProfilerSession::~CBootProfilerSession()
|
||||
{
|
||||
for (unsigned int i = 0; i < m_threadCounter; ++i)
|
||||
{
|
||||
CProfileInfo& profile = m_threadsProfileInfo[i];
|
||||
|
||||
// Since m_pRoot is allocated using memory pool (line 296),
|
||||
// its destructor is called explicitly to free the memory of
|
||||
// m_Childs and each of its child.
|
||||
|
||||
if (profile.m_pRoot)
|
||||
{
|
||||
profile.m_pRoot->~CBootProfilerRecord();
|
||||
}
|
||||
delete m_threadsRecordsPool[i];
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfilerSession::Start()
|
||||
{
|
||||
LARGE_INTEGER time, freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
QueryPerformanceCounter(&time);
|
||||
m_startTimeStamp = time;
|
||||
m_freq = freq;
|
||||
}
|
||||
|
||||
void CBootProfilerSession::Stop()
|
||||
{
|
||||
LARGE_INTEGER time;
|
||||
QueryPerformanceCounter(&time);
|
||||
m_stopTimeStamp = time;
|
||||
}
|
||||
|
||||
CBootProfilerRecord* CBootProfilerSession::StartBlock(const char* name, const char* args)
|
||||
{
|
||||
const unsigned int curThread = CryGetCurrentThreadId();
|
||||
const unsigned int threadIndex = GetThreadIndexByID(curThread);
|
||||
|
||||
assert(threadIndex < eMAX_THREADS_TO_PROFILE);
|
||||
|
||||
CProfileInfo& profile = m_threadsProfileInfo[threadIndex];
|
||||
|
||||
CRecordPool* pool = m_threadsCurrentPools[threadIndex];
|
||||
|
||||
if (!profile.m_pRoot)
|
||||
{
|
||||
if (!pool)
|
||||
{
|
||||
pool = new CRecordPool;
|
||||
m_threadsRecordsPool[threadIndex] = pool;
|
||||
m_threadsCurrentPools[threadIndex] = pool;
|
||||
}
|
||||
|
||||
CBootProfilerRecord* rec = pool->allocateRecord();
|
||||
profile.m_pRoot = profile.m_pCurrent = new(rec)CBootProfilerRecord("root", m_startTimeStamp, m_freq, args);
|
||||
}
|
||||
|
||||
assert(pool);
|
||||
|
||||
LARGE_INTEGER time, freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
QueryPerformanceCounter(&time);
|
||||
|
||||
CBootProfilerRecord* pParent = profile.m_pCurrent;
|
||||
assert(pParent);
|
||||
assert(profile.m_pRoot);
|
||||
|
||||
CBootProfilerRecord* rec = pool->allocateRecord();
|
||||
if (!rec)
|
||||
{
|
||||
//pool is full, create a new one
|
||||
pool = new CRecordPool;
|
||||
m_threadsCurrentPools[threadIndex]->setNextPool(pool);
|
||||
m_threadsCurrentPools[threadIndex] = pool;
|
||||
|
||||
rec = pool->allocateRecord();
|
||||
}
|
||||
|
||||
profile.m_pCurrent = new(rec)CBootProfilerRecord(name, time, freq, args);
|
||||
profile.m_pCurrent->m_pParent = pParent;
|
||||
pParent->m_Childs.push_back(profile.m_pCurrent);
|
||||
|
||||
return profile.m_pCurrent;
|
||||
}
|
||||
|
||||
void CBootProfilerSession::StopBlock(CBootProfilerRecord* record)
|
||||
{
|
||||
if (record)
|
||||
{
|
||||
LARGE_INTEGER time;
|
||||
QueryPerformanceCounter(&time);
|
||||
record->m_stopTimeStamp = time;
|
||||
|
||||
unsigned int curThread = CryGetCurrentThreadId();
|
||||
unsigned int threadIndex = GetThreadIndexByID(curThread);
|
||||
assert(threadIndex < eMAX_THREADS_TO_PROFILE);
|
||||
|
||||
CProfileInfo& profile = m_threadsProfileInfo[threadIndex];
|
||||
profile.m_pCurrent = record->m_pParent;
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfilerSession::CollectResults(const char* filename, const float timeThreshold)
|
||||
{
|
||||
if (!gEnv || !gEnv->pCryPak)
|
||||
{
|
||||
AZ_Warning("BootProfiler", false, "CryPak not set - skipping CollectResults");
|
||||
return;
|
||||
}
|
||||
static const char* szTestResults = "@cache@\\TestResults";
|
||||
string filePath = string(szTestResults) + "\\" + "bp_" + filename + ".xml";
|
||||
char path[AZ::IO::IArchive::MaxPath] = "";
|
||||
gEnv->pCryPak->AdjustFileName(filePath.c_str(), path, AZ_ARRAY_SIZE(path), AZ::IO::IArchive::FLAGS_PATH_REAL | AZ::IO::IArchive::FLAGS_FOR_WRITING);
|
||||
gEnv->pCryPak->MakeDir(szTestResults);
|
||||
|
||||
AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle;
|
||||
gEnv->pFileIO->Open(path, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary, fileHandle);
|
||||
if (fileHandle == AZ::IO::InvalidHandle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
char buf[512];
|
||||
const unsigned int buf_size = sizeof(buf);
|
||||
|
||||
sprintf_s(buf, buf_size, "<root>\n");
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
|
||||
const size_t numThreads = m_threadCounter;
|
||||
for (size_t i = 0; i < numThreads; ++i)
|
||||
{
|
||||
CBootProfilerRecord* pRoot = m_threadsProfileInfo[i].m_pRoot;
|
||||
if (pRoot)
|
||||
{
|
||||
pRoot->m_stopTimeStamp = m_stopTimeStamp;
|
||||
|
||||
const char* threadName = GetThreadNameByIndex(i);
|
||||
if (!threadName)
|
||||
{
|
||||
threadName = "UNKNOWN";
|
||||
}
|
||||
|
||||
|
||||
const float time = (float)(pRoot->m_stopTimeStamp.QuadPart - pRoot->m_startTimeStamp.QuadPart) * 1000.f / (float)pRoot->m_freq.QuadPart;
|
||||
|
||||
sprintf_s(buf, buf_size, "\t<thread name=\"%s\" totalTimeMS=\"%f\" startTime=\"%" PRIu64 "\" stopTime=\"%" PRIu64 "\" > \n", threadName, time,
|
||||
pRoot->m_startTimeStamp.QuadPart, pRoot->m_stopTimeStamp.QuadPart);
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
|
||||
for (size_t recordIdx = 0; recordIdx < pRoot->m_Childs.size(); ++recordIdx)
|
||||
{
|
||||
CBootProfilerRecord* record = pRoot->m_Childs[recordIdx];
|
||||
assert(record);
|
||||
record->Print(fileHandle, buf, buf_size, 2, m_stopTimeStamp, threadName, timeThreshold);
|
||||
}
|
||||
|
||||
sprintf_s(buf, buf_size, "\t</thread>\n");
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf_s(buf, buf_size, "</root>\n");
|
||||
AZ::IO::Print(fileHandle, buf);
|
||||
gEnv->pFileIO->Close(fileHandle);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CBootProfiler& CBootProfiler::GetInstance()
|
||||
{
|
||||
return gProfilerInstance;
|
||||
}
|
||||
|
||||
CBootProfiler::CBootProfiler()
|
||||
: m_pCurrentSession(NULL)
|
||||
, m_pFrameRecord(NULL)
|
||||
, m_levelLoadAdditionalFrames(0)
|
||||
{
|
||||
}
|
||||
|
||||
CBootProfiler::~CBootProfiler()
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
for (TSessionMap::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it)
|
||||
{
|
||||
CBootProfilerSession* session = it->second;
|
||||
delete session;
|
||||
}
|
||||
}
|
||||
|
||||
// start session
|
||||
void CBootProfiler::StartSession(const char* sessionName)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
|
||||
TSessionMap::const_iterator it = m_sessions.find(sessionName);
|
||||
if (it == m_sessions.end())
|
||||
{
|
||||
m_pCurrentSession = new CBootProfilerSession();
|
||||
m_sessions[sessionName] = m_pCurrentSession;
|
||||
m_pCurrentSession->Start();
|
||||
}
|
||||
}
|
||||
|
||||
// stop session
|
||||
void CBootProfiler::StopSession(const char* sessionName)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
if (m_pCurrentSession)
|
||||
{
|
||||
TSessionMap::iterator it = m_sessions.find(sessionName);
|
||||
if (it != m_sessions.end())
|
||||
{
|
||||
if (m_pCurrentSession == it->second)
|
||||
{
|
||||
CBootProfilerSession* session = m_pCurrentSession;
|
||||
m_pCurrentSession = NULL;
|
||||
|
||||
session->Stop();
|
||||
session->CollectResults(sessionName, CV_sys_bp_time_threshold);
|
||||
|
||||
delete session;
|
||||
}
|
||||
m_sessions.erase(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CBootProfilerRecord* CBootProfiler::StartBlock(const char* name, const char* args)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
if (m_pCurrentSession)
|
||||
{
|
||||
return m_pCurrentSession->StartBlock(name, args);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CBootProfiler::StopBlock(CBootProfilerRecord* record)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
if (m_pCurrentSession)
|
||||
{
|
||||
m_pCurrentSession->StopBlock(record);
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfiler::StartFrame(const char* name)
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
if (CV_sys_bp_frames)
|
||||
{
|
||||
StartSession("frames");
|
||||
m_pFrameRecord = StartBlock(name, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfiler::StopFrame()
|
||||
{
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> recordGuard{ m_recordMutex };
|
||||
if (m_pCurrentSession && CV_sys_bp_frames)
|
||||
{
|
||||
StopBlock(m_pFrameRecord);
|
||||
m_pFrameRecord = NULL;
|
||||
|
||||
--CV_sys_bp_frames;
|
||||
if (0 == CV_sys_bp_frames)
|
||||
{
|
||||
StopSession("frames");
|
||||
}
|
||||
}
|
||||
|
||||
if (m_pCurrentSession && m_levelLoadAdditionalFrames)
|
||||
{
|
||||
--m_levelLoadAdditionalFrames;
|
||||
if (0 == m_levelLoadAdditionalFrames)
|
||||
{
|
||||
StopSession("level");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfiler::Init(ISystem* pSystem)
|
||||
{
|
||||
//REGISTER_CVAR(sys_BootProfiler, 1, VF_DEV_ONLY,
|
||||
// "Collect and output session statistics into TestResults/bp_(session_name).xml \n"
|
||||
// "0 = Disabled\n"
|
||||
// "1 = Enabled\n");
|
||||
|
||||
pSystem->GetISystemEventDispatcher()->RegisterListener(this);
|
||||
StartSession("boot");
|
||||
}
|
||||
|
||||
void CBootProfiler::RegisterCVars()
|
||||
{
|
||||
REGISTER_CVAR2("sys_bp_frames", &CV_sys_bp_frames, 0, VF_DEV_ONLY, "Starts frame profiling for specified number of frames using BootProfiler");
|
||||
REGISTER_CVAR2("sys_bp_time_threshold", &CV_sys_bp_time_threshold, 0.1f, VF_DEV_ONLY, "If greater than 0 don't write blocks that took less time (default 0.1 ms)");
|
||||
}
|
||||
|
||||
void CBootProfiler::OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case ESYSTEM_EVENT_GAME_POST_INIT_DONE:
|
||||
{
|
||||
StopSession("boot");
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_GAME_MODE_SWITCH_START:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
case ESYSTEM_EVENT_GAME_MODE_SWITCH_END:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
case ESYSTEM_EVENT_LEVEL_LOAD_START:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_LEVEL_LOAD_PREPARE:
|
||||
{
|
||||
StartSession("level");
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_LEVEL_LOAD_END:
|
||||
{
|
||||
StopSession("level");
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_LEVEL_PRECACHE_END:
|
||||
{
|
||||
//level loading can be stopped here, or m_levelLoadAdditionalFrames can be used to prolong dump for this amount of frames
|
||||
//StopSession("level");
|
||||
m_levelLoadAdditionalFrames = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CBootProfiler::SetFrameCount(int frameCount)
|
||||
{
|
||||
CV_sys_bp_frames = frameCount;
|
||||
}
|
||||
#endif
|
||||
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
// Original file Copyright Crytek GMBH or its affiliates, used under license.
|
||||
|
||||
#ifndef CRYINCLUDE_CRYSYSTEM_BOOTPROFILER_H
|
||||
#define CRYINCLUDE_CRYSYSTEM_BOOTPROFILER_H
|
||||
#pragma once
|
||||
|
||||
#if defined(ENABLE_LOADING_PROFILER)
|
||||
|
||||
#include <AzCore/std/string/string.h>
|
||||
#include <AzCore/std/containers/unordered_map.h>
|
||||
#include <AzCore/std/parallel/mutex.h>
|
||||
|
||||
class CBootProfilerRecord;
|
||||
class CBootProfilerSession;
|
||||
|
||||
class CBootProfiler
|
||||
: public ISystemEventListener
|
||||
{
|
||||
friend class CBootProfileBLock;
|
||||
public:
|
||||
CBootProfiler();
|
||||
~CBootProfiler();
|
||||
|
||||
static CBootProfiler& GetInstance();
|
||||
|
||||
void Init(ISystem* pSystem);
|
||||
void RegisterCVars();
|
||||
|
||||
void StartSession(const char* sessionName);
|
||||
void StopSession(const char* sessionName);
|
||||
|
||||
CBootProfilerRecord* StartBlock(const char* name, const char* args);
|
||||
void StopBlock(CBootProfilerRecord* record);
|
||||
|
||||
void StartFrame(const char* name);
|
||||
void StopFrame();
|
||||
protected:
|
||||
// === ISystemEventListener
|
||||
virtual void OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam);
|
||||
void SetFrameCount(int frameCount);
|
||||
|
||||
private:
|
||||
CBootProfilerSession* m_pCurrentSession;
|
||||
typedef AZStd::unordered_map<AZStd::string, CBootProfilerSession*> TSessionMap;
|
||||
TSessionMap m_sessions;
|
||||
|
||||
static int CV_sys_bp_frames;
|
||||
static float CV_sys_bp_time_threshold;
|
||||
CBootProfilerRecord* m_pFrameRecord;
|
||||
AZStd::recursive_mutex m_recordMutex;
|
||||
int m_levelLoadAdditionalFrames;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // CRYINCLUDE_CRYSYSTEM_BOOTPROFILER_H
|
||||
@ -1,647 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
// Original file Copyright Crytek GMBH or its affiliates, used under license.
|
||||
|
||||
#include "CrySystem_precompiled.h"
|
||||
|
||||
#if defined(ENABLE_LOADING_PROFILER)
|
||||
|
||||
#include "System.h"
|
||||
#include "LoadingProfiler.h"
|
||||
|
||||
#define LOADING_TIME_CONTAINER_MAX_TEXT_SIZE 1024
|
||||
#define MAX_LOADING_TIME_PROFILER_STACK_DEPTH 16
|
||||
|
||||
//#define SAVE_SAVELEVELSTATS_IN_ROOT
|
||||
|
||||
struct SLoadingTimeContainer
|
||||
: public _i_reference_target_t
|
||||
{
|
||||
SLoadingTimeContainer() {}
|
||||
|
||||
SLoadingTimeContainer(SLoadingTimeContainer* pParent, const char* pPureFuncName, const int nRootIndex)
|
||||
{
|
||||
m_dSelfMemUsage = m_dTotalMemUsage = m_dSelfTime = m_dTotalTime = 0;
|
||||
m_nCounter = 1;
|
||||
m_pFuncName = pPureFuncName;
|
||||
m_pParent = pParent;
|
||||
m_nRootIndex = nRootIndex;
|
||||
}
|
||||
|
||||
static int Cmp_SLoadingTimeContainer_Time(const void* v1, const void* v2)
|
||||
{
|
||||
SLoadingTimeContainer* pChunk1 = (SLoadingTimeContainer*)v1;
|
||||
SLoadingTimeContainer* pChunk2 = (SLoadingTimeContainer*)v2;
|
||||
|
||||
if (pChunk1->m_dSelfTime > pChunk2->m_dSelfTime)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (pChunk1->m_dSelfTime < pChunk2->m_dSelfTime)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int Cmp_SLoadingTimeContainer_MemUsage(const void* v1, const void* v2)
|
||||
{
|
||||
SLoadingTimeContainer* pChunk1 = (SLoadingTimeContainer*)v1;
|
||||
SLoadingTimeContainer* pChunk2 = (SLoadingTimeContainer*)v2;
|
||||
|
||||
if (pChunk1->m_dSelfMemUsage > pChunk2->m_dSelfMemUsage)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (pChunk1->m_dSelfMemUsage < pChunk2->m_dSelfMemUsage)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static double GetUsedMemory(ISystem* pSysytem)
|
||||
{
|
||||
static IMemoryManager::SProcessMemInfo processMemInfo;
|
||||
pSysytem->GetIMemoryManager()->GetProcessMemInfo(processMemInfo);
|
||||
return double(processMemInfo.PagefileUsage) / double(1024 * 1024);
|
||||
}
|
||||
|
||||
|
||||
void Clear()
|
||||
{
|
||||
for (size_t i = 0, end = m_pChilds.size(); i < end; ++i)
|
||||
{
|
||||
delete m_pChilds[i];
|
||||
}
|
||||
}
|
||||
|
||||
~SLoadingTimeContainer()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
|
||||
double m_dSelfTime, m_dTotalTime;
|
||||
double m_dSelfMemUsage, m_dTotalMemUsage;
|
||||
uint32 m_nCounter;
|
||||
|
||||
const char* m_pFuncName;
|
||||
SLoadingTimeContainer* m_pParent;
|
||||
int m_nRootIndex;
|
||||
std::vector<SLoadingTimeContainer*> m_pChilds;
|
||||
|
||||
DiskOperationInfo m_selfInfo;
|
||||
DiskOperationInfo m_totalInfo;
|
||||
bool m_bUsed;
|
||||
};
|
||||
|
||||
bool operator== (const SLoadingTimeContainer& a, const SLoadingTimeContainer& b)
|
||||
{
|
||||
return b.m_pFuncName == a.m_pFuncName;
|
||||
}
|
||||
|
||||
bool operator== (const SLoadingTimeContainer& a, const char* b)
|
||||
{
|
||||
return b == a.m_pFuncName;
|
||||
}
|
||||
|
||||
|
||||
SLoadingTimeContainer* CLoadingProfilerSystem::m_pCurrentLoadingTimeContainer = 0;
|
||||
SLoadingTimeContainer* CLoadingProfilerSystem::m_pRoot[2] = {0, 0};
|
||||
int CLoadingProfilerSystem::m_iActiveRoot = 0;
|
||||
ICVar* CLoadingProfilerSystem::m_pEnableProfile = 0;
|
||||
int CLoadingProfilerSystem::nLoadingProfileMode = 1;
|
||||
int CLoadingProfilerSystem::nLoadingProfilerNotTrackedAllocations = -1;
|
||||
CryCriticalSection CLoadingProfilerSystem::csLock;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLoadingProfilerSystem::OutputLoadingTimeStats(ILog* pLog, int nMode)
|
||||
{
|
||||
nLoadingProfileMode = nMode;
|
||||
|
||||
PodArray<SLoadingTimeContainer> arrNoStack;
|
||||
CreateNoStackList(arrNoStack);
|
||||
|
||||
|
||||
if (nLoadingProfileMode > 0)
|
||||
{ // loading mem stats per func
|
||||
pLog->Log("------ Level loading memory allocations (MB) by function ------------");
|
||||
pLog->Log(" ||Self | Total | Calls | Function (%d MB lost)||", nLoadingProfilerNotTrackedAllocations);
|
||||
pLog->Log("---------------------------------------------------------------------");
|
||||
|
||||
qsort(arrNoStack.GetElements(), arrNoStack.Count(), sizeof(arrNoStack[0]), SLoadingTimeContainer::Cmp_SLoadingTimeContainer_MemUsage);
|
||||
|
||||
for (int i = 0; i < arrNoStack.Count(); i++)
|
||||
{
|
||||
const SLoadingTimeContainer* pTimeContainer = &arrNoStack[i];
|
||||
pLog->Log("|%6.1f | %6.1f | %6d | %s|",
|
||||
pTimeContainer->m_dSelfMemUsage, pTimeContainer->m_dTotalMemUsage, (int)pTimeContainer->m_nCounter, pTimeContainer->m_pFuncName);
|
||||
}
|
||||
|
||||
pLog->Log("---------------------------------------------------------------------");
|
||||
}
|
||||
|
||||
if (nLoadingProfileMode > 0)
|
||||
{ // loading time stats per func
|
||||
pLog->Log("----------- Level loading time (sec) by function --------------------");
|
||||
pLog->Log(" ||Self | Total | Calls | Function||");
|
||||
pLog->Log("---------------------------------------------------------------------");
|
||||
|
||||
qsort(arrNoStack.GetElements(), arrNoStack.Count(), sizeof(arrNoStack[0]), SLoadingTimeContainer::Cmp_SLoadingTimeContainer_Time);
|
||||
|
||||
for (int i = 0; i < arrNoStack.Count(); i++)
|
||||
{
|
||||
const SLoadingTimeContainer* pTimeContainer = &arrNoStack[i];
|
||||
pLog->Log("|%6.1f | %6.1f | %6d | %s|",
|
||||
pTimeContainer->m_dSelfTime, pTimeContainer->m_dTotalTime, (int)pTimeContainer->m_nCounter, pTimeContainer->m_pFuncName);
|
||||
}
|
||||
|
||||
if (nLoadingProfileMode == 1)
|
||||
{
|
||||
pLog->Log("----- ( Use sys_ProfileLevelLoading 2 for more detailed stats ) -----");
|
||||
}
|
||||
else
|
||||
{
|
||||
pLog->Log("---------------------------------------------------------------------");
|
||||
}
|
||||
}
|
||||
|
||||
if (nLoadingProfileMode > 0)
|
||||
{ // file info
|
||||
pLog->Log("----------------------------- Level file information by function --------------------------------");
|
||||
pLog->Log("|| Self | Total |Bandwith| Calls | Function||");
|
||||
pLog->Log("|| Seeks |FileOpen|FileRead| Seeks |FileOpen|FileRead| Kb/s | | ||");
|
||||
|
||||
qsort(arrNoStack.GetElements(), arrNoStack.Count(), sizeof(arrNoStack[0]), SLoadingTimeContainer::Cmp_SLoadingTimeContainer_Time);
|
||||
|
||||
for (int i = 0; i < arrNoStack.Count(); i++)
|
||||
{
|
||||
const SLoadingTimeContainer* pTimeContainer = &arrNoStack[i];
|
||||
double bandwidth = pTimeContainer->m_dSelfTime > 0 ? (pTimeContainer->m_selfInfo.m_dOperationSize / pTimeContainer->m_dSelfTime / 1024.0) : 0.;
|
||||
pLog->Log("|%6d | %6d | %6d |%6d | %6d | %6d | %6.1f | %6d | %s|",
|
||||
pTimeContainer->m_selfInfo.m_nSeeksCount, pTimeContainer->m_selfInfo.m_nFileOpenCount, pTimeContainer->m_selfInfo.m_nFileReadCount,
|
||||
pTimeContainer->m_totalInfo.m_nSeeksCount, pTimeContainer->m_totalInfo.m_nFileOpenCount, pTimeContainer->m_totalInfo.m_nFileReadCount,
|
||||
bandwidth, (int)pTimeContainer->m_nCounter, pTimeContainer->m_pFuncName);
|
||||
}
|
||||
|
||||
if (nLoadingProfileMode == 1)
|
||||
{
|
||||
pLog->Log("----- ( Use sys_ProfileLevelLoading 2 for more detailed stats ) -----");
|
||||
}
|
||||
else
|
||||
{
|
||||
pLog->Log("---------------------------------------------------------------------");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct CSystemEventListner_LoadingProfiler
|
||||
: public ISystemEventListener
|
||||
{
|
||||
private:
|
||||
CLoadingTimeProfiler* m_pPrecacheProfiler;
|
||||
ESystemEvent lastEvent;
|
||||
public:
|
||||
CSystemEventListner_LoadingProfiler()
|
||||
: m_pPrecacheProfiler(NULL) {}
|
||||
|
||||
virtual void OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case ESYSTEM_EVENT_GAME_MODE_SWITCH_START:
|
||||
{
|
||||
CLoadingProfilerSystem::Clean();
|
||||
if (m_pPrecacheProfiler == NULL)
|
||||
{
|
||||
m_pPrecacheProfiler = new CLoadingTimeProfiler(gEnv->pSystem, "ModeSwitch");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ESYSTEM_EVENT_GAME_MODE_SWITCH_END:
|
||||
{
|
||||
SAFE_DELETE(m_pPrecacheProfiler);
|
||||
CLoadingProfilerSystem::SaveTimeContainersToFile(gEnv->bMultiplayer == true ? "mode_switch_mp.lmbrlp" : "mode_switch_sp.lmbrlp", 0.0, true);
|
||||
}
|
||||
|
||||
case ESYSTEM_EVENT_LEVEL_LOAD_PREPARE:
|
||||
{
|
||||
CLoadingProfilerSystem::Clean();
|
||||
if (m_pPrecacheProfiler == NULL)
|
||||
{
|
||||
m_pPrecacheProfiler = new CLoadingTimeProfiler(gEnv->pSystem, "LevelLoading");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ESYSTEM_EVENT_LEVEL_LOAD_END:
|
||||
{
|
||||
delete m_pPrecacheProfiler;
|
||||
m_pPrecacheProfiler = new CLoadingTimeProfiler(gEnv->pSystem, "Precache");
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_LEVEL_PRECACHE_END:
|
||||
{
|
||||
if (lastEvent == ESYSTEM_EVENT_LEVEL_PRECACHE_FIRST_FRAME)
|
||||
{
|
||||
SAFE_DELETE(m_pPrecacheProfiler);
|
||||
string levelName = "no_level";
|
||||
ICVar* sv_map = gEnv->pConsole->GetCVar("sv_map");
|
||||
if (sv_map)
|
||||
{
|
||||
levelName = sv_map->GetString();
|
||||
}
|
||||
|
||||
string levelNameFullProfile = levelName + "_LP.lmbrlp";
|
||||
string levelNameThreshold = levelName + "_LP_OneSec.lmbrlp";
|
||||
CLoadingProfilerSystem::SaveTimeContainersToFile(levelNameFullProfile.c_str(), 0.0, false);
|
||||
CLoadingProfilerSystem::SaveTimeContainersToFile(levelNameThreshold.c_str(), 1.0, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ESYSTEM_EVENT_LEVEL_POST_UNLOAD:
|
||||
{
|
||||
// Ensure that the precache profiler is dead
|
||||
SAFE_DELETE(m_pPrecacheProfiler);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (event != ESYSTEM_EVENT_RANDOM_SEED)
|
||||
{
|
||||
lastEvent = event;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static CSystemEventListner_LoadingProfiler g_system_event_listener_loadingProfiler;
|
||||
|
||||
void CLoadingProfilerSystem::Init()
|
||||
{
|
||||
gEnv->pSystem->GetISystemEventDispatcher()->RegisterListener(&g_system_event_listener_loadingProfiler);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLoadingProfilerSystem::ShutDown()
|
||||
{
|
||||
if (gEnv && gEnv->pSystem && gEnv->pSystem->GetISystemEventDispatcher())
|
||||
{
|
||||
gEnv->pSystem->GetISystemEventDispatcher()->RemoveListener(&g_system_event_listener_loadingProfiler);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
SLoadingTimeContainer* CLoadingProfilerSystem::StartLoadingSectionProfiling(CLoadingTimeProfiler* pProfiler, const char* szFuncName)
|
||||
{
|
||||
if (!nLoadingProfileMode || !gEnv->pConsole)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DWORD threadID = GetCurrentThreadId();
|
||||
|
||||
static DWORD dwMainThreadId = GetCurrentThreadId();
|
||||
if (threadID != dwMainThreadId)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!m_pEnableProfile)
|
||||
{
|
||||
if (gEnv->pConsole)
|
||||
{
|
||||
m_pEnableProfile = gEnv->pConsole->GetCVar("sys_ProfileLevelLoading");
|
||||
if (!m_pEnableProfile)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_pEnableProfile->GetIVal() <= 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//if (m_pCurrentLoadingTimeContainer == m_pRoot && strstr(szFuncName,"Open"))
|
||||
//{
|
||||
// pProfiler->m_constructorInfo.m_nFileOpenCount +=1;
|
||||
//}
|
||||
|
||||
CryAutoCriticalSection lock(csLock);
|
||||
|
||||
if (true /*pProfiler && pProfiler->m_pSystem*/)
|
||||
{
|
||||
ITimer* pTimer = pProfiler->m_pSystem->GetITimer();
|
||||
pProfiler->m_fConstructorTime = pTimer->GetAsyncTime().GetSeconds();
|
||||
pProfiler->m_fConstructorMemUsage = SLoadingTimeContainer::GetUsedMemory(pProfiler->m_pSystem);
|
||||
|
||||
DiskOperationInfo info;
|
||||
pProfiler->m_constructorInfo = info;
|
||||
|
||||
if (nLoadingProfilerNotTrackedAllocations < 0)
|
||||
{
|
||||
nLoadingProfilerNotTrackedAllocations = (int)pProfiler->m_fConstructorMemUsage;
|
||||
}
|
||||
}
|
||||
|
||||
SLoadingTimeContainer* pParent = m_pCurrentLoadingTimeContainer;
|
||||
if (!pParent)
|
||||
{
|
||||
pParent = m_pCurrentLoadingTimeContainer = m_pRoot[m_iActiveRoot] = new SLoadingTimeContainer(0, "Root", m_iActiveRoot);
|
||||
}
|
||||
|
||||
for (size_t i = 0, end = m_pCurrentLoadingTimeContainer->m_pChilds.size(); i < end; ++i)
|
||||
{
|
||||
if (m_pCurrentLoadingTimeContainer->m_pChilds[i]->m_pFuncName == szFuncName)
|
||||
{
|
||||
assert(m_pCurrentLoadingTimeContainer->m_pChilds[i]->m_pParent == m_pCurrentLoadingTimeContainer);
|
||||
assert(!m_pCurrentLoadingTimeContainer->m_pChilds[i]->m_bUsed);
|
||||
m_pCurrentLoadingTimeContainer->m_pChilds[i]->m_bUsed = true;
|
||||
m_pCurrentLoadingTimeContainer->m_pChilds[i]->m_nCounter++;
|
||||
m_pCurrentLoadingTimeContainer = m_pCurrentLoadingTimeContainer->m_pChilds[i];
|
||||
return m_pCurrentLoadingTimeContainer;
|
||||
}
|
||||
}
|
||||
|
||||
m_pCurrentLoadingTimeContainer = new SLoadingTimeContainer(pParent, szFuncName, pParent->m_nRootIndex);
|
||||
m_pCurrentLoadingTimeContainer->m_bUsed = true;
|
||||
{
|
||||
// Need to iterate from the end than
|
||||
pParent->m_pChilds.push_back(m_pCurrentLoadingTimeContainer);
|
||||
}
|
||||
|
||||
return m_pCurrentLoadingTimeContainer;
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::EndLoadingSectionProfiling(CLoadingTimeProfiler* pProfiler)
|
||||
{
|
||||
if (!nLoadingProfileMode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static DWORD dwMainThreadId = GetCurrentThreadId();
|
||||
|
||||
if (GetCurrentThreadId() != dwMainThreadId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pProfiler->m_pTimeContainer)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CryAutoCriticalSection lock(csLock);
|
||||
|
||||
if (true /*pProfiler && pProfiler->m_pSystem*/)
|
||||
{
|
||||
ITimer* pTimer = pProfiler->m_pSystem->GetITimer();
|
||||
double fSelfTime = pTimer->GetAsyncTime().GetSeconds() - pProfiler->m_fConstructorTime;
|
||||
double fMemUsage = SLoadingTimeContainer::GetUsedMemory(pProfiler->m_pSystem);
|
||||
double fSelfMemUsage = fMemUsage - pProfiler->m_fConstructorMemUsage;
|
||||
|
||||
|
||||
if (fSelfTime < 0.0)
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
pProfiler->m_pTimeContainer->m_dSelfTime += fSelfTime;
|
||||
pProfiler->m_pTimeContainer->m_dTotalTime += fSelfTime;
|
||||
pProfiler->m_pTimeContainer->m_dSelfMemUsage += fSelfMemUsage;
|
||||
pProfiler->m_pTimeContainer->m_dTotalMemUsage += fSelfMemUsage;
|
||||
|
||||
DiskOperationInfo info;
|
||||
info -= pProfiler->m_constructorInfo;
|
||||
pProfiler->m_pTimeContainer->m_totalInfo += info;
|
||||
pProfiler->m_pTimeContainer->m_selfInfo += info;
|
||||
pProfiler->m_pTimeContainer->m_bUsed = false;
|
||||
|
||||
SLoadingTimeContainer* pParent = pProfiler->m_pTimeContainer->m_pParent;
|
||||
pParent->m_selfInfo -= info;
|
||||
pParent->m_dSelfTime -= fSelfTime;
|
||||
pParent->m_dSelfMemUsage -= fSelfMemUsage;
|
||||
if (pProfiler->m_pTimeContainer->m_pParent && pProfiler->m_pTimeContainer->m_pParent->m_nRootIndex == m_iActiveRoot)
|
||||
{
|
||||
m_pCurrentLoadingTimeContainer = pProfiler->m_pTimeContainer->m_pParent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char* CLoadingProfilerSystem::GetLoadingProfilerCallstack()
|
||||
{
|
||||
CryAutoCriticalSection lock(csLock);
|
||||
|
||||
static char szStack[1024];
|
||||
|
||||
szStack[0] = 0;
|
||||
|
||||
SLoadingTimeContainer* pC = m_pCurrentLoadingTimeContainer;
|
||||
|
||||
PodArray<SLoadingTimeContainer*> arrItems;
|
||||
|
||||
while (pC)
|
||||
{
|
||||
arrItems.Add(pC);
|
||||
pC = pC->m_pParent;
|
||||
}
|
||||
|
||||
for (int i = arrItems.Count() - 1; i >= 0; i--)
|
||||
{
|
||||
cry_strcat(szStack, " > ");
|
||||
cry_strcat(szStack, arrItems[i]->m_pFuncName);
|
||||
}
|
||||
|
||||
return &szStack[0];
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::FillProfilersList(AZStd::vector<SLoadingProfilerInfo>& profilers)
|
||||
{
|
||||
UpdateSelfStatistics(m_pRoot[m_iActiveRoot]);
|
||||
|
||||
PodArray<SLoadingTimeContainer> arrNoStack;
|
||||
CreateNoStackList(arrNoStack);
|
||||
//qsort(arrNoStack.GetElements(), arrNoStack.Count(), sizeof(arrNoStack[0]), SLoadingTimeContainer::Cmp_SLoadingTimeContainer_Time);
|
||||
|
||||
uint32 count = arrNoStack.Size();
|
||||
profilers.resize(count);
|
||||
|
||||
for (uint32 i = 0; i < count; ++i)
|
||||
{
|
||||
profilers[i].name = arrNoStack[i].m_pFuncName;
|
||||
profilers[i].selfTime = arrNoStack[i].m_dSelfTime;
|
||||
profilers[i].callsTotal = arrNoStack[i].m_nCounter;
|
||||
profilers[i].totalTime = arrNoStack[i].m_dTotalTime;
|
||||
profilers[i].memorySize = arrNoStack[i].m_dTotalMemUsage;
|
||||
profilers[i].selfInfo = arrNoStack[i].m_selfInfo;
|
||||
profilers[i].totalInfo = arrNoStack[i].m_totalInfo;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CLoadingProfilerSystem::AddTimeContainerFunction(PodArray<SLoadingTimeContainer>& arrNoStack, SLoadingTimeContainer* node)
|
||||
{
|
||||
if (!node)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SLoadingTimeContainer* it = std::find(arrNoStack.begin(), arrNoStack.end(), node->m_pFuncName);
|
||||
|
||||
if (it == arrNoStack.end())
|
||||
{
|
||||
arrNoStack.push_back(*node);
|
||||
}
|
||||
else
|
||||
{
|
||||
it->m_dSelfMemUsage += node->m_dSelfMemUsage;
|
||||
it->m_dSelfTime += node->m_dSelfTime;
|
||||
it->m_dTotalMemUsage += node->m_dTotalMemUsage;
|
||||
it->m_dTotalTime += node->m_dTotalTime;
|
||||
it->m_nCounter += node->m_nCounter;
|
||||
it->m_selfInfo += node->m_selfInfo;
|
||||
it->m_totalInfo += node->m_totalInfo;
|
||||
}
|
||||
|
||||
for (size_t i = 0, end = node->m_pChilds.size(); i < end; ++i)
|
||||
{
|
||||
AddTimeContainerFunction(arrNoStack, node->m_pChilds[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::CreateNoStackList(PodArray<SLoadingTimeContainer>& arrNoStack)
|
||||
{
|
||||
AddTimeContainerFunction(arrNoStack, m_pRoot[m_iActiveRoot]);
|
||||
}
|
||||
|
||||
#define g_szTestResults "@cache@\\TestResults"
|
||||
|
||||
void CLoadingProfilerSystem::SaveTimeContainersToFile(const char* name, double fMinTotalTime, bool bClean)
|
||||
{
|
||||
if (m_pRoot[m_iActiveRoot])
|
||||
{
|
||||
const char* levelName = name;
|
||||
//Ignore any folders in the input name
|
||||
const char* folder = strrchr(name, '/');
|
||||
if (folder != NULL)
|
||||
{
|
||||
levelName = folder + 1;
|
||||
}
|
||||
char path[AZ::IO::IArchive::MaxPath];
|
||||
path[sizeof(path) - 1] = 0;
|
||||
|
||||
gEnv->pCryPak->AdjustFileName(string(string(g_szTestResults) + "\\" + levelName).c_str(), path, AZ_ARRAY_SIZE(path), AZ::IO::IArchive::FLAGS_PATH_REAL | AZ::IO::IArchive::FLAGS_FOR_WRITING);
|
||||
gEnv->pCryPak->MakeDir(g_szTestResults);
|
||||
|
||||
AZ::IO::HandleType handle = AZ::IO::InvalidHandle;
|
||||
|
||||
AZ::IO::Result f = AZ::IO::FileIOBase::GetInstance()->Open(path,AZ::IO::OpenMode::ModeWrite, handle);
|
||||
|
||||
if (handle != AZ::IO::InvalidHandle)
|
||||
{
|
||||
UpdateSelfStatistics(m_pRoot[m_iActiveRoot]);
|
||||
WriteTimeContainerToFile(m_pRoot[m_iActiveRoot], handle, 0, fMinTotalTime);
|
||||
AZ::IO::FileIOBase::GetInstance()->Close(handle);
|
||||
}
|
||||
|
||||
if (bClean)
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::WriteTimeContainerToFile(SLoadingTimeContainer* p, AZ::IO::HandleType &handle, unsigned int depth, double fMinTotalTime)
|
||||
{
|
||||
if (p == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (p->m_dTotalTime < fMinTotalTime)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CryFixedStringT<MAX_LOADING_TIME_PROFILER_STACK_DEPTH> sDepth;
|
||||
for (unsigned int i = 0; i < depth; i++)
|
||||
{
|
||||
sDepth += "\t";
|
||||
}
|
||||
|
||||
CryFixedStringT<128> str(p->m_pFuncName);
|
||||
str.replace(':', '_');
|
||||
|
||||
char data[4096];
|
||||
AZ::u64 bytesWritten;
|
||||
|
||||
azsnprintf(data, sizeof(data), "%s<%s selfTime='%f' selfMemory='%f' totalTime='%f' totalMemory='%f' count='%i' totalSeeks='%i' totalReads='%i' totalOpens='%i' totalDiskSize='%f' selfSeeks='%i' selfReads='%i' selfOpens='%i' selfDiskSize='%f'>\n",
|
||||
sDepth.c_str(), str.c_str(), p->m_dSelfTime, p->m_dSelfMemUsage, p->m_dTotalTime, p->m_dTotalMemUsage, p->m_nCounter,
|
||||
p->m_totalInfo.m_nSeeksCount, p->m_totalInfo.m_nFileReadCount, p->m_totalInfo.m_nFileOpenCount, p->m_totalInfo.m_dOperationSize,
|
||||
p->m_selfInfo.m_nSeeksCount, p->m_selfInfo.m_nFileReadCount, p->m_selfInfo.m_nFileOpenCount, p->m_selfInfo.m_dOperationSize);
|
||||
|
||||
AZ::IO::FileIOBase::GetInstance()->Write(handle, data, strlen(data), &bytesWritten);
|
||||
|
||||
for (size_t i = 0, end = p->m_pChilds.size(); i < end; ++i)
|
||||
{
|
||||
WriteTimeContainerToFile(p->m_pChilds[i], handle, depth + 1, fMinTotalTime);
|
||||
}
|
||||
|
||||
azsnprintf(data, sizeof(data), "%s</%s>\n", sDepth.c_str(), str.c_str());
|
||||
AZ::IO::FileIOBase::GetInstance()->Write(handle, data, strlen(data), &bytesWritten);
|
||||
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::UpdateSelfStatistics(SLoadingTimeContainer* p)
|
||||
{
|
||||
if (p == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
p->m_dSelfMemUsage = 0;
|
||||
p->m_dSelfTime = 0;
|
||||
p->m_nCounter = 1;
|
||||
p->m_selfInfo.m_dOperationSize = 0;
|
||||
p->m_selfInfo.m_nFileOpenCount = 0;
|
||||
p->m_selfInfo.m_nFileReadCount = 0;
|
||||
p->m_selfInfo.m_nSeeksCount = 0;
|
||||
|
||||
for (size_t i = 0, end = p->m_pChilds.size(); i < end; ++i)
|
||||
{
|
||||
p->m_dTotalMemUsage += p->m_pChilds[i]->m_dTotalMemUsage;
|
||||
p->m_dTotalTime += p->m_pChilds[i]->m_dTotalTime;
|
||||
p->m_totalInfo += p->m_pChilds[i]->m_totalInfo;
|
||||
}
|
||||
}
|
||||
|
||||
void CLoadingProfilerSystem::Clean()
|
||||
{
|
||||
m_iActiveRoot = (m_iActiveRoot + 1) % 2;
|
||||
if (m_pRoot[m_iActiveRoot])
|
||||
{
|
||||
delete m_pRoot[m_iActiveRoot];
|
||||
}
|
||||
m_pCurrentLoadingTimeContainer = m_pRoot[m_iActiveRoot] = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -1,69 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
// Original file Copyright Crytek GMBH or its affiliates, used under license.
|
||||
|
||||
#ifndef CRYINCLUDE_CRYSYSTEM_LOADINGPROFILER_H
|
||||
#define CRYINCLUDE_CRYSYSTEM_LOADINGPROFILER_H
|
||||
#pragma once
|
||||
|
||||
|
||||
#if defined(ENABLE_LOADING_PROFILER)
|
||||
|
||||
struct SLoadingTimeContainer;
|
||||
|
||||
|
||||
struct SLoadingProfilerInfo
|
||||
{
|
||||
string name;
|
||||
double selfTime;
|
||||
double totalTime;
|
||||
uint32 callsTotal;
|
||||
double memorySize;
|
||||
|
||||
DiskOperationInfo selfInfo;
|
||||
DiskOperationInfo totalInfo;
|
||||
};
|
||||
|
||||
|
||||
class CLoadingProfilerSystem
|
||||
{
|
||||
public:
|
||||
static void Init();
|
||||
static void ShutDown();
|
||||
static void CreateNoStackList(PodArray<SLoadingTimeContainer>&);
|
||||
static void OutputLoadingTimeStats(ILog* pLog, int nMode);
|
||||
static SLoadingTimeContainer* StartLoadingSectionProfiling(CLoadingTimeProfiler* pProfiler, const char* szFuncName);
|
||||
static void EndLoadingSectionProfiling(CLoadingTimeProfiler* pProfiler);
|
||||
static const char* GetLoadingProfilerCallstack();
|
||||
static void FillProfilersList(AZStd::vector<SLoadingProfilerInfo>& profilers);
|
||||
static void FlushTimeContainers();
|
||||
static void SaveTimeContainersToFile(const char*, double fMinTotalTime, bool bClean);
|
||||
static void WriteTimeContainerToFile(SLoadingTimeContainer* p, AZ::IO::HandleType &handle, unsigned int depth, double fMinTotalTime);
|
||||
|
||||
static void UpdateSelfStatistics(SLoadingTimeContainer* p);
|
||||
static void Clean();
|
||||
protected:
|
||||
static void AddTimeContainerFunction(PodArray<SLoadingTimeContainer>&, SLoadingTimeContainer*);
|
||||
protected:
|
||||
static int nLoadingProfileMode;
|
||||
static int nLoadingProfilerNotTrackedAllocations;
|
||||
static CryCriticalSection csLock;
|
||||
static int m_iMaxArraySize;
|
||||
static SLoadingTimeContainer* m_pCurrentLoadingTimeContainer;
|
||||
static SLoadingTimeContainer* m_pRoot[2];
|
||||
static int m_iActiveRoot;
|
||||
static ICVar* m_pEnableProfile;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // CRYINCLUDE_CRYSYSTEM_LOADINGPROFILER_H
|
||||
@ -1,115 +0,0 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
#include "CrySystem_precompiled.h"
|
||||
|
||||
#include <AzTest/AzTest.h>
|
||||
#include <AzCore/UnitTest/UnitTest.h>
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzCore/Memory/AllocatorScope.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
#include <BootProfiler.h>
|
||||
|
||||
#if defined(ENABLE_LOADING_PROFILER)
|
||||
|
||||
namespace UnitTests
|
||||
{
|
||||
using BootProfilerTestAllocatorScope = AZ::AllocatorScope<AZ::LegacyAllocator, CryStringAllocator>;
|
||||
class BootProfilerTest :
|
||||
public ::testing::Test,
|
||||
BootProfilerTestAllocatorScope,
|
||||
UnitTest::TraceBusRedirector
|
||||
{
|
||||
public:
|
||||
BootProfilerTest()
|
||||
{
|
||||
BootProfilerTestAllocatorScope::ActivateAllocators();
|
||||
UnitTest::TraceBusRedirector::BusConnect();
|
||||
}
|
||||
|
||||
~BootProfilerTest()
|
||||
{
|
||||
UnitTest::TraceBusRedirector::BusDisconnect();
|
||||
BootProfilerTestAllocatorScope::DeactivateAllocators();
|
||||
}
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
TEST_F(BootProfilerTest, BootProfilerTest_StartStopBlocksInThreads_Success)
|
||||
{
|
||||
CBootProfiler testProfiler;
|
||||
const char scopeName[] = "TestScope";
|
||||
const char blockArg[] = "TestArg";
|
||||
const int numAttempts = 1000;
|
||||
const int numThreads = 10;
|
||||
|
||||
auto switchSessionFunc = [&]() {
|
||||
for (int sessionNum = 0; sessionNum < numAttempts; ++sessionNum)
|
||||
{
|
||||
auto sessionName = AZStd::string::format("TestSession%d", sessionNum);
|
||||
testProfiler.StartSession(sessionName.c_str());
|
||||
testProfiler.StopSession(sessionName.c_str());
|
||||
}
|
||||
};
|
||||
auto testProfileFunc = [&]() {
|
||||
for (int blockNum = 0; blockNum < numAttempts; ++blockNum)
|
||||
{
|
||||
auto someBlock = testProfiler.StartBlock(scopeName, blockArg);
|
||||
testProfiler.StopBlock(someBlock);
|
||||
}
|
||||
};
|
||||
AZStd::thread threadArray[numThreads];
|
||||
|
||||
AZStd::thread sessionThread = AZStd::thread(switchSessionFunc);
|
||||
for (int i = 0; i < numThreads; ++i)
|
||||
{
|
||||
threadArray[i] = AZStd::thread(testProfileFunc);
|
||||
}
|
||||
for (int i = 0; i < numThreads; ++i)
|
||||
{
|
||||
threadArray[i].join();
|
||||
}
|
||||
sessionThread.join();
|
||||
}
|
||||
|
||||
class FrameTestBootProfiler : public CBootProfiler
|
||||
{
|
||||
public:
|
||||
FrameTestBootProfiler(int frameCount) : CBootProfiler()
|
||||
{
|
||||
SetFrameCount(frameCount);
|
||||
}
|
||||
};
|
||||
TEST_F(BootProfilerTest, BootProfilerTest_FrameStartStop_Success)
|
||||
{
|
||||
const int numTestFrames = 10;
|
||||
FrameTestBootProfiler testProfiler(numTestFrames);
|
||||
|
||||
for (int i = 0; i < numTestFrames; ++i)
|
||||
{
|
||||
testProfiler.StartFrame("TestFrame");
|
||||
|
||||
testProfiler.StopFrame();
|
||||
}
|
||||
}
|
||||
} // namespace UnitTests
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
namespace AZ::Utils
|
||||
{
|
||||
AZ::IO::FixedMaxPathString GetEngineManifestPath()
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace AZ::Utils
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue