The Find window in the Timeline view is now resizable
When OS-level thread IDs are reused over time, individual threads are now displayed, with the correct data for each
When attaching to a running process, threads that were in a wait state at the time of attaching will now correctly have their wait stack displayed
Profiling of obfuscated .NET code is now correctly supported
Fixed symbols being unresolved for methods that have been ReJIT-compiled when profiling .NET applications
Fixed arrow key navigation in the Call Graph: using the left/right arrow keys will now always correctly collapse/expand nodes, and using the up/down arrow keys to scroll will now always keep the selected item in view
Fixed issue when there are no context switch events for a thread. The thread state lane would previously display an empty bar, and will now display the correct thread state
Fixed rare crash in CallGraph when clicking through the nodes very quickly
The Threads UI has been completely reworked based on your feedback, making it much easier to manage traces with many threads
Threads can now be sorted by name, thread ID, start time or utilization
Threads can also be reordered manually by dragging them
Threads can be hidden/unhidden from the view to more easily focus on the threads that interest you
A context menu provides convenient actions to select similar threads and group them together
Threads can be single- and multi-selected by clicking on them in combination with CTRL and SHIFT keys
The thread selection will remain consistent with the CallGraph and Function list. Besides being a convenient alternative way to select threads, this is also a way to quickly peek in the CallGraph what a thread is doing in a particular section of time, without the need to expand threads one by one.
Greatly improved render performance in large traces with many threads
Greatly improved memory usage during processing: the SymbolResolverWorker helper processes will now use significantly less memory. This optimization is particularly helpful for applications with many or large PDBs
Improved symbol resolving code: more symbols will be picked up now, particularly in code using function-local structs/classes with an arbitrary nesting level
Improved circular buffer tracing workflow: when opening a trace made in circular buffer tracing mode, the timeline will start at the most recent data, rather than showing a large empty area at the beginning where events fell out of the circular buffer
Hardware configuration changes are now handled transparently by the licensing system and will no longer prompt for license reactivation
The 'constexpr' keyword is now also syntax highlighted properly
Fixed the mouse cursor not updating correctly when hovering over splitters after opening a trace
Fixed not being able to set a capture size limit above 2GB
Fixed rendering of the measure & timerange selection when there are not enough threads in the trace to fully fill the screen vertically
Fixed a number of UI stalls when selecting threads or functions in the timeline view
Fixed a rare crash when switching between dark & light themes
Fix for not being able to load old Superluminal captures that were created before September 2020
Fix for auto-updater not being able to update because the license file is read-only
Fixed issue in thread selector UI: threads without names are now correctly displayed
First wave of rendering optimizations: rendering in profiles with many threads is much faster now. More to come!
If installation using the auto-updater cannot complete because files are in use or read-only, the auto-updater will now provide a dialog with all files that could not be updated, including whether they are in-use, or what process is using them
When the debug data for an executable/dll doesn't contain the PDB path, we'll now look for a PDB with the same name next to the executable/dll
We now have support for selecting multiple threads in the CallGraph and Function list UI, including a convenient thread selection UI that replaces the previous simple combobox. The new UI automatically organizes your threads into groups, based on thread name, so that you can easily select related threads in one go
The new thread selection UI is also used in the thread Find UI
To help with iterating on performance, the source view now caches symbol data for all functions you've clicked on. The cache will persist over sessions and recompiles, which means you can always re-visit the source view in a previous session to compare results
The installer now adds a SUPERLUMINAL_API_DIR environment variable that points to the location of the Superluminal API
Fixed issues where Superluminal would sometimes not start in maximized mode
Fix for crash in piechart when no data is available in the CallGraph
Fixed rare hang after processing a profile
Fixed crash in CallGraph
Fixed rare symbol resolving issue which could result in the source view not being populated
Based on your feedback, the start page ("New Session" tab) has been completely redesigned to allow users to effectively manage their captures and recent runs. We're excited for you to try it out! If you have any feedback, please let us know. The full list of changes would be too big to list here, but the highlights are:
The "Recent Files" UI has been reworked. It has been replaced with a new "Session Explorer", which allows you to browse & manage your previously recorded captures. Functionality includes sorting, filtering, renaming, deleting, setting per-file annotations, and much more
The "Recent Runs" UI has also been reworked. Recent runs are now grouped by application & platform. Clicking on an item in the navigation panel will show you all recent runs for that application. The new UI also allows you to give meaningful names to your runs, as well as options to delete old runs
The navigation sidebar is now much more compact if you have support for multiple platforms installed: the Run/Attach buttons are no longer duplicated per platform
All known high DPI issues on the start page have been fixed
Greatly improved the startup time of Superluminal. A number of blocking UI stalls right after startup have been fixed. Startup time is back down to a more reasonable ~2 seconds now
The source view has been greatly optimized when showing large files
The source view now has a new parser that correctly deals with nested comments, strings, etc. This fixes various bugs where, in certain files, the entire file could get highlighted as a 'comment'
Superluminal now fully supports Live++: when profiling an application that has had live edits with Live++ applied to it, Superluminal will now correctly pick up the new symbol info
Added DLL version of PerformanceAPI, which can be used in situations where you don't want to link against the library. The DLL version can be loaded at runtime and exposes a function to retrieve the API. See PerformanceAPI_capi.h for more info
The Instrumentation Timings window at the top of the session now has a much more compact display if no Instrumentation data is present in the profile. Furthermore, it now has an option to always hide the window if no Instrumentation data is present
Improved processing time of captures with many threads
Right-clicking on a tab will now show a context menu with some common options like "Show in Explorer", "Close", "Delete", etc
Double-clicking on a bar in the thread timeline will now zoom to that bar
The pie chart in the CallGraph view now shows the name of the function when hovering over a slice or the label
Added tooltip with the full function name to the 'Function' column of the CallGraph
Added "Expand All Children" option to the CallGraph context menu & toolbar
When a profile is opened on Windows that does not contain any sampling data, a warning will now be shown with an indication of likely causes and possible ways to fix the issue
Fixed crash when opening certain .etl files that had lost events due to a busy disk drive
Fixed bug in PERFORMANCEAPI_MAKE_COLOR; the B component was incorrectly used to form the final color
Full support for PlayStation® is now available at no additional charge! Getting access is easy: simply click the 'Confirm Developer Status' button next to Superluminal in the Tools & Middleware directory on DevNet or just let us know at firstname.lastname@example.org.
Fixed several issues when using paths with Unicode characters on them
Full support for Xbox One® and Xbox Series X® (Project Scarlett) is now available at no additional charge! Getting access is easy: just send us an email at email@example.com
PlayStation® 4 support is now available for preview. To get access, simply click the 'Confirm Developer Status' button next to Superluminal in the Tools & Middleware directory on DevNet or just let us know at firstname.lastname@example.org.
Fix for rare crash in threads view Fix for attach settings (including filter) not being persistent between runs.
Fix for update timer that could keep running while in 'start paused' mode
The selection mechanics have been completely reworked
The timerange is only ever set by the user. When clicking on a function, we do not automatically make a timerange selection anymore. This makes it also possible to continue clicking on functions while having an active timerange, making navigation with the callgraph a lot easier.
All views are always filtered to the active timerange. The option to choose between 'entire session/selected timerange' has been removed from all UIs. If there is no active timerange, data for the entire session is displayed.
Find results separated. The Find results are now separate from your selection. This means you can now click through/interact with your Find results without losing them.
Highlight changes.The Find result highlights are always displayed in yellow. The highlights that indicate your selection in the callgraph/function list are now always white.
We'd love to hear what you think of these changes!
Greatly reduced CPU usage of the profiler itself. It will no longer use CPU when idle
Added support for adding multiple input-bindings to a single action
The default bindings now support Alt + Mouse wheel zoom as secondary binding
Added support for pre-installing a license during install of Superluminal. This allows system administrators to remotely install and activate Superluminal without intervention from the user. To use, specify /lic=<path to license file> on the installer command line
Breaking Change The PerformanceAPI has been completely reworked. Please see the documentation (Help -> Documentation) for more information. Most important changes:
It is now a static library instead of a DLL
It is no longer required to use the InstrumentationScope class to send events to Superluminal. New functions BeginEvent and EndEvent are now available to achieve the same effect, allowing for easy integration with existing profiling systems
A FindSuperluminalAPI.cmake file is now included for easy integration in CMake-based build systems
Input bindings have become much more versatile: key and mouse bindings can now be configured to match many existing input schemes. Standard presets for commonly used profilers have been added
GPU memory consumption has been lowered a great deal
Vertical scrolling is now smooth instead of a stepwise scroll
Improved capturing UI: start/stopping/canceling profiling is now done through buttons rather than 'links'
Improved capturing UI: the progress icon is greyed out and doesn't animate when profiling is paused, to more clearly indicate the paused state
Fixed issue with symbol resolving progress bar being on 100% while symbols were still loading
Fixed go to blocking/unblocking stack not highlighting the target stack in certain cases
Fixed go to blocking/unblocking stack not highlighting the entirety of the stack in certain cases
Fixed 'F' to frame: now frames the selected timerange again