Custom editor panel designed to centralize accessibility and editing of Pool Profiles. The tool aims to solve the following:
Direct access to any Pool Profile regardless of their location within the project.
Direct ability to edit the chosen Pool Profile, eliminating the need to open a new editor tab for each profile.
Used as an organizational tool, giving the user the ability to browse to the selected underlying asset within the project.
The plugin utility can be accessed by navigating to Tools > Smart Pool Tools > Pool Profile Editor.
The property at the top marked "Pool Profile" represents your currently chosen Pool Profile. You can change it using the drop-down, which will give you a list of all the Pool Profile assets contained within your project.
The save button gives you a way to save any changes you make to the currently selected Pool Profile. The button only becomes clickable when any unsaved changes have been detected as a result of a property being changed using the editor tool.
The profile entries visible in the picture are explained at PoolProfileEntry.
Things to note:
The tool becomes read-only when a level is being played. This is done to prevent issues that may arise from editing underlying assets that are currently being used inside of the world.
Custom editor panel designed to allow users the ability to profile actor pools for the current world. The tool does the following:
Tracks real time pooling information regarding all pooled actor types from all available pool types (Global Pool, Local Pool & Actor Pool Components).
Pooling information is displayed in tables for easy tracking of individual entries.
Each table represents a different pool type and is clearly separated to prevent confusion.
The plugin utility can be accessed by navigating to Tools > Smart Pool Tools > Pool Profiler.
The save button becomes available when a level is playing and allows you to save the current pooling information to an external text file in case you want to analyse the data at a later date.
Each pool entry contains the following core information above the table:
The custom pool profile name assigned by the user for the pool profile.
The name of the pool profile asset within the project files.
The name of the owner that the pool profile is a part of.
The table lists the following columns of information about each pooled actor type:
Name - The name of the pooled actor type.
Current Count - The number of actors currently held in the pool.
Peak Count - The maximum number of actors held in the pool at any time.
Current Active - The number of currently active actors.
Peak Active - The maximum number of actors that were active at any time.
Current Inactive - The number of currently inactive actors.
Peak Inactive - The maximum number of actors that were inactive at any time.
Dynamic Allocations - The number of actors that were dynamically allocated during gameplay, due to insufficient available actors.
Decaying Count - The number of currently decaying actors.
Peak Decaying - The maximum number of decaying actors at any time.
Decayed Count - The number of actors that have decayed to date.
Destroyed Count - The number of actors that have been destroyed to date via decay/destroy calls.
Things to note:
Pooling information is not immediately cleared on level end to allow for further analysis of data.
ActorPoolComponents that are added during runtime are automatically added to the profiler and their information is tracked as usual.
Similarly, when an ActorPoolComponent is destroyed their entry is automatically removed from the profiler to reflect the current state of the world.
When the profiler is opened after the level has begun playing, the profiler will display a "Start Profiling" that the user can press to begin pool profiling.
Captures a snapshot of the pooling information in the following ways:
OnWorldEnd if selected in Developer Settings.
When the "Save Analysis" button is clicked inside of the Pool Profiler.
This allows you to analyse the pooling information at a later date without having to replay the level.
The analysis files are stored at the following location within your project files like so: "[Your Unreal Project]/Saved/SmartPool/".
The file name is constructed like so: "PoolAnalysis-[MAP_NAME]-[CURRENT_DATE]-[CURRENT_TIME]".
MAP_NAME - The name of the map from which the analysis came from.
CURRENT_DATE/TIME - The time at which the snapshot was captured, allows you to capture multiple snapshots within the same level without overriding previous snapshots.
The information captured is the same as the information visible in the Pool Profiler, with the addition of recommendations for each pooled actor type.
Initial Pool Size - Recommends a new initial pool size based on things like the number of active actors and dynamic allocations.
Stop Pooled Actor Destruction - Recommends the user to stop destroying pooled actors in case too many explicit destruction calls are made. Typically destruction calls are reserved for cleanup only.
Adjust Decaying Times - Recommends the user to adjust decaying times in case too many actors end up decaying.
The plugin also contains a list of custom console commands that users can use to further debug their built projects where standard editor tools are no longer available.
The commands are as follows:
SmartPool.Class [CLASS_NAME] - Displays minimal pooling information for the specified actor class from all pools where the actor type is pooled. Changes are reflected every second.
SmartPool.List [PoolType] - Displays a list of all the actor types pooled by the specified PoolType. The following values can be used:
EMPTY - Shows all pooled actor types across all pools (Global, Local, Component).
g/G - Shows all pooled actor types pooled by the global pool.
l/L - Shows all pooled actor types pooled by the local pool.
c/C - Shows all pooled actor types pooled by all ActorPoolComponents.
SmartPool.Close - Closes the currently open SmartPool debug visual.
Things to note:
The "Class" command comes with the following helper visuals:
When no class name is provided, lets users know that they should provide a class name when using the command.
Notifies users when the provided class name has no corresponding actor classes.
Notifies users with a list of all the matching classes if the provided class name matched with more than one class.
The "List" command works with any string so long as the initial character is g, l or c.