Greatly improved performance of processing a capture
Greatly improved performance of closing a tab; it should now be instant
The Function Statistics, Call Graph, and Function List now more clearly indicate which item was last selected when they lose focus in the dark theme
Added support for re-clicking an already-selected item in Function Statistics, Call Graph, and Function List after focus loss
Added support for being able to copy the blocking and unblocking stacks in the Thread Interaction window
Added File / Export menu item when a capture tab is selected to make it easy to export a capture
Fixed an issue that could result in a corrupted capture when closing a tab right as it finishes processing
Fixed an issue where profiling a Unity application could sometimes result in managed code being unresolved for Unity versions with Superluminal support built-in
Fixed several issues that could result in Superluminal incorrectly warning about the wrong PerformanceAPI version being used when profiling an application that uses the PerformanceAPI
Fixed a hang that could occur when profiling on a machine where the Nahimic audio driver is installed, caused by Nahimic injecting itself into Superluminal's process
Fixed a crash that could occur when left- or right-clicking in the CallGraph or Function List window immediately after opening a trace
Fixed a crash that could occur when pressing 'Start Recording' after starting a capture in the paused mode
Fixed a crash that could occur when opening a capture that was made outside of Superluminal
Fixed a crash that could occur when changing the Time Display Mode in Call Graph / Function List immediately after opening a capture
Fixed a crash that could occur when clicking in the list of find results when it is empty
Fixed a crash that could occur when opening very old traces
With this update, we're excited to release a new command-line version of Superluminal!
Built to easily make captures from a command-line
Free to use and doesn't require a Superluminal license
Can easily be deployed to other (remote) machines
Can capture on all our supported platforms
Currently installed with Superluminal itself as SuperluminalCmd.exe but will be available as a separate download later
Added new UI to the timeline view when a time range is selected! The new UI allows you to easily view the information about your current time range selection, such as the start, end, and duration. It also offers easy access to the functionality to clear & frame your current time range selection
The overview for the top thread is now sticky when scrolling down a deep call stack, which is very convenient for keeping an overview of your thread's activity while drilling down into the details
The Settings UI has been reworked for better organization of all settings and to allow for symbol settings to be set per platform
Added support for setting the time display mode in the Function List, similar to existing functionality in the Call Graph
Greatly improved performance & responsiveness of the source view
Improved consistency and contrast of all scrollbars in the Dark theme
Improved symbol resolution on Windows: Superluminal now also attempts to find the PDB at '<modulename>.pdb' next to the module
Improved renderer memory usage
Fixed all issues around opening/processing multiple files in parallel. This is now fully supported
Fixed an issue where clicking on overview blocks to view blocking/unblocking stacks would not work correctly when thread interaction arrows are hidden
Fixed an issue where the source view would display the Function List's selected function, while the CallGraph was in focus
Fixed an issue where clicking anywhere in the timeline view would scroll the view and select invisible thread interaction arrows
Fixed an issue where the absolute percentage display in the Call Graph could be incorrect for the root nodes
Fixed an issue where the annotation UI could take up all space while a capture is in progress
Fixed an issue that could cause no data to be displayed in the timeline view when profiling applications running in a sandbox that intercepts certain Windows kernel functions
Fixed several issues when viewing circular buffer traces that could result in high timings being displayed when the circular buffer trace has been running for a long time
Greatly improved performance & memory usage of building the callgraph in (very) large traces with deep call stacks. This also improves the processing speed of such captures significantly.
Fixed an issue that could cause the first blocking stack of a thread to be missing in rare cases when attaching to a running application
Fixed an issue that could cause the blocking & unblocking stacks to be missing in a capture when reprocessing the capture due to a symbol settings change
Fixed a crash that could occur when hovering over an executing state in the timeline
With this update, we're excited that Superluminal now supports profiling multiple processes!
Reworked the Attach and Select Process dialogs. They now have CPU activity graphs to spot processes of interest quickly. The hierarchy mode displays the process hierarchy to make it easy to see how processes relate to each other
Added functionality to include child processes to the Run & Attach capture options based on a ruleset. The ruleset allows you to include or exclude processes based on process name and/or command line parameters
Updated the timeline UI to include process information. Adjacent threads that belong to the same process are grouped in process groups. Threads can be dragged individually across process groups, and process groups can be dragged as a whole. New options to sort, organize, and select threads and processes can be found in the context menus for threads and process groups
Added a new 'Change Processes' dialog, accessible via Edit / Change Processes. The new dialog allows you to change which processes should be included in the session after the session has been opened, making it easy to add or switch processes of interest at any time
The callgraph, function list, and source view have been updated with full support for multiple processes. Superluminal recognizes modules and functions across processes and merges the results together, making it feel like you're profiling one application. When desired, you can still split the performance data on process by selecting the new "Group by process" checkbox in the thread selection UI
Added new 'Thread Hiding Rules' functionality, accessible via the timeline toolbar and the Tools / Settings menu. The thread hiding rules automatically hide threads when a session is opened for the first time, based on a substring or regex match. The rules are global and are applied automatically to each new session that's opened
It's now possible to type annotations or alter the capture name while capturing or processing! This makes it much easier to organize and annotate your captures while you're waiting for the capture to finish
Greatly improved processing speed & memory usage, specifically for captures with many threads or processes:
Memory usage during processing has been significantly reduced
Memory usage at runtime has been significantly reduced
Open & close speed of captures has been improved
Processing times have been improved
The frame rate has been greatly improved
Superluminal has switched to using the YYYY-MM-DD format for captures, making it much easier to sort your captures by date. To make the transition as easy as possible, you'll be prompted at startup whether you wish to rename your existing captures to the new format, or you can decide to rename your captures at a later time through Tools/Update to new filename format
Greatly improved performance of the Function Statistics "find" in traces with many functions
Added Arm64 & Arm64EC libraries of the PerformanceAPI
Added support for copying the selection to the clipboard in the Calls and Called By panes of the Function List
Added a context menu to the selection in the Calls and Called By panes of the Function List
Added support for navigating the Function List with the up/down arrow keys while the filter text box has focus, similar to other find text boxes in the profiler
The search popup in the Function Statistics window when searching for a function will now remember its size across sessions & restarts
Buckets in the histogram of the Function Statistics window are now clickable and will take the timeline to the most expensive instance of that bucket
Fixed issue where the source view would fail to display disassembly when the image file is next to the PDB
Fixed potential issue that could result in activation data getting corrupted in rare cases, resulting in an error message when starting Superluminal
Fixed issue where activation could result in an "unable to connect" error message in the browser in specific network configurations
Fixed hang that could occur during processing when many processes or threads are captured
Fixed crash that could occur in rare cases when a thread ends
Fixed issue where it was possible to attach without selecting any process
Fixed issue with opening old traces made before June 2022
Fixed issue where the source view would be off by one line when selecting a blocking / unblocking stack frame in the Thread Interaction window
Fixed issue where the Thread Interaction arrow would be missing in the timeline view when a thread starts another thread
Fixed issue where corrupted files would not be properly detected, resulting in a crash
Fixed issue where the 'unhide threads' button would be displayed when opening a trace, even when no threads have been hidden in the trace
Fixed issue with opening ETW traces made in circular buffer 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
Fixed issue where resizing the columns in the attach/import process dialogs would result in certain items flickering
Fixed issue that could result in duplicate processes being present in the trace in rare cases
Fixed issue that could result in threads having no name in the UI
Fixed issue where the source view would not jump to the correct source line when loading a source file from the cache
Fixed issue where using the frame blocking / unblocking stack buttons in the Thread Interaction window would result in a rendering artifact in the timeline
Fixed issue where using 'find all occurrences in the timeline would also search in hidden threads
Fixed issue that could result in slight (microsecond) timing differences between the timeline view and the callgraph view in rare cases
Fixed various issues that could occur when pressing another mouse button while dragging threads or processes in the timeline view
Fixed issue that could cause the exclusive time in the callgraph & function list to be incorrect when a time range selection is active
Fixed issue with packaging where the annotations of a trace would not be packaged
Fixed issue with packaging that could occur when importing a package that doesn't contain a trace file
Fixed issue where the absolute address in the Modules widget was printed incorrectly
Fixed crash that could occur after getting a warning about events having been lost when opening a trace
Fixed crash that could occur after processing a trace
Fixed various crashes that could occur when process or thread IDs are reused within a trace
Fixed issue with trial activation not being correctly remembered after a restart on specific configurations
Fixed an issue where confirming a CallGraph filter by clicking on the function (instead of pressing enter) would result in the callgraph losing its state as soon as you expand a node
Fixed issue where it was possible to pin a find results item while it was still searching
Fixed rendering issue when dragging the time range selection by using the handle in the timeline
Fixed issue where deleting a file by right-clicking on the tab could result in the file still being visible in the Session Explorer
Superluminal now has support for profiling Windows on ARM applications!
Profiling ARM64, ARM64EC, and ARM64X is fully supported
The source view will display the correct disassembly depending on the architecture of the code
Improved symbol resolving code to correctly deal with functions that the PDB reports as having a zero size. These functions would previously be unresolved and could cause misattribution of time in the CallGraph in rare cases
When clicking on the name of a Recently Launched item, the item will now be properly selected
Removed dependency on static initialization order in the PerformanceAPI, to solve issues with globally overloading operator new and delete
Fixed issue where shift+clicking in the timeline view to select threads would incorrectly select hidden threads
Fixed UI stall that could occur when selecting threads or functions in the timeline in large traces
Fixed issue where hidden threads would not correctly stay hidden after reopening a trace
Fixed resizing of the function name column in the find popup when the dialog is resized
Fixed crash that could occur when clicking on a wait state or ready thread arrow that had no unblocking stack
Fixed crash that could occur when loading files that are corrupted
Fixed crash when viewing disassembly for packed or encrypted executables
Fixed crash that could occur when pressing "Reload symbols" immediately after opening a trace
Fixed crash that could occur when typing in a CallGraph filter without applying it, and then using 'Set as root'
Fixed various crashes that could occur when exiting the application
Fixed issue that could result in corrupted symbol cache files
Fixed issue where trying to open very old sessions would result in an error message
Fixed stall when clicking on a function in the function list in large captures
Fixed hang that could occur when stopping or canceling a capture that was started with "Stop process after capture" disabled
Fixed memory leak when using PerformanceAPI_SetCurrentThreadName for Windows 10 and up
Fixed issue where too much exclusive time could be attributed to a function
Introduced new Recursion Folding feature in the Call Graph! Recursion folding allows you to fold all recursive calls in the call graph into a single node, allowing you to easily see where the time in your recursive code is going. Clicking on a folded node will also show you the aggregate timings of all folded recursive calls in the source view
Added support for copying line & instruction timings in the source view via CTRL+SHIFT+C
Added "Copy timing info" to the context menu in the source view
Added support for finding functions in a specific module to the Function Statistics window
Fixed an issue in the source view where sometimes assembly instructions would not match up with the correct source lines in the disassembly mode
Fixed rare crash when closing a tab
Fixed various issues around selection / hovering in the callgraph
Fixed issue where searching for a function with exactly one hit in the Function Statistics window would not display that item
Fixed sporadic crash that could happen during processing
Fixed crash that could occur when copying Function Statistics for a Find Result with no hits
Fixed issue where the source view would not correctly retrieve source files from source-indexed PDBs
Fixed issue where CTRL+A (Select All) was not working in the source view
Introduced support for exporting Superluminal traces! This is accessible through the context menu when right-clicking on a file in the Session Explorer, or the tab. This makes it very simple to share your traces with others: simply export your trace, and share the resulting package. The package will include all relevant information, such as resolved symbol data, and can be opened directly in Superluminal without manual steps
Greatly improved support for scenarios where there is a separate user account for UAC elevation (i.e. where the regular user does not have administrator rights).
The installer will now allow you to install Superluminal for just yourself, or for all users on the system. This allows settings & activation data to be shared between users
Directories created by Superluminal will now have correct access rights set so that multiple users can share the same capture & symbol cache directories
Superluminal will now attempt to launch external programs (for example, the web browser, or an Explorer dialog when 'show in explorer' is clicked) as a non-elevated user
The auto-updater will no longer restart Superluminal as an elevated process when the auto-update completes
The installer will no longer launch Superluminal as elevated when the "Run Superluminal" option is chosen at the end of the installer
Added experimental new PDB parser! The new PDB parser is much faster in parsing large PDB files, resulting in significantly faster capture processing times. To try it out, enable the feature through Tools / Settings / Advanced. Let us know if you run into any issues or have any feedback!
Improved performance when typing in the Function Statistics' find box. More optimizations coming soon!
Added support for resolving symbols with PDBs that are over 4GiB in size. This would previously fail with a 'Signature Not Found' error, causing symbols to be unresolved
Added new API to support using Instrumentation events within fibers. The new API can be used to annotate where fiber switches occur in the application
Added support for copying all Function Statistics to the clipboard
Added support for exporting all Function Statistics to .csv
Added right-click context menu to the Function Statistics items to easily copy/export the data for your find results
Added support for navigating the Function Statistics instance chart with the left & right arrow keys
Added support for sorting the Function List by the thread state column
The auto-update channel is now automatically set depending on the build that's installed (Stable or Insider)
Fixed crash in the Auto Updater in case of non-ASCII characters in the user's data directory path
Fixed crash that could occur immediately after opening a file, or when searching for a function through the Function Statistics window
Fixed an issue that could cause the timeline to stop rendering when multiple tabs are open and Superluminal is in a non-maximized state
Fixed an issue where an "invalid license" dialog could pop up after waking the machine from hibernate
Fixed an issue where pressing CTRL+F when the Function Statistics is undocked would not properly trigger the Find popup
Context data that's passed to the Instrumentation API is now correctly shown in the Find Results instance chart again
The threshold spinbox in the Function Statistics UI no longer prevents you from inputting a value that's too large
We're excited to introduce a new Statistics window that replaces the existing Instrumentation and Find functionality. This adds the following features:
When searching (CTRL+F), a browsable list of all the found instances is displayed, along with a zoomable graph. These can be sorted by duration and start time. Items in the list and graph are clickable to easily find and select the items in the timeline view
Added Histogram, Boxplot, and statistics to see the distribution of your timings at a glance. A threshold value can be set in the timings graph to filter out any outliers
Added a history of the latest search results, so you can quickly go back to a previous search result. Results can also be pinned for future reference
The Statistics window also responds to selection in the CallGraph and Function List, allowing you to see the same statistics for each selection that you make
Added support for saving & restoring the entire window state. This makes it a lot easier to create a window layout that best fits your screen size
Added support for saving & restoring a session's UI state. Superluminal will now save the session UI state when you close a tab and put you back right where you left off when you open it again
Added jump list support to quickly open recent captures by right-clicking on Superluminal in the taskbar and choosing the capture you want to open
Added support for profiling 32-bit Unity applications
Added support for quickly hiding/showing the thread interaction arrows in the timeline (shortcut: H). This can be used to declutter your view in situations where there is a lot of thread interaction going on
Added support for showing symbol information to the Call Graph and Function List via the context menu, similar to the existing functionality in the Timeline view
Added a variant of the PerformanceAPI debug libraries that are compiled with _ITERATOR_DEBUG_LEVEL set to 0
Added support for copying the activation link to the Sign In process when activating Superluminal. This allows for manual activation by pasting the link in your browser in situations where the browser could not be launched directly by Superluminal
Fixed issue where the Function List would sometimes not be correctly populated with data when opening a session
Fixed issue where the Function List columns would sometimes get an incorrect size
Fixed sporadic crash when closing tabs or the application
Fixed sporadic crash when quickly browsing through the Function List
Fixed issue with the horizontal scrollbar in the Call Graph disappearing when navigating deeply nested trees with the arrow keys
Fixed issue with the Unity support where Superluminal would not correctly detect the presence of the required commandline arguments in specific cases
We've introduced a new licensing system that includes a web-based portal where you can manage your users, activations, billing, platforms and Single Sign-On. The new system works side by side with the existing system and your existing license keys will keep working as-is. We'll be gradually migrating existing license holders over to the new system in the coming period.
Improved support for profiling managed code in Unity applications
Added support for browsing to a symbol file location in the Modules window. This allows you to browse to the correct symbol file for modules that couldn't be resolved
Information in the Resolve Log and Advanced tab of the Modules window can now be selected and copied
The source view now supports navigation using the cursor keys
The source view can now be maximized
Pressing Ctrl+F in the source view when the text cursor is over a word will automatically search for that word
The Superluminal executables are now all signed
Fixed issues when profiling .NET applications that use the PortablePDB format, rather than the native PDB format. This could result in the source view not populating correctly
Fixed incorrect error message being displayed in the source view when showing source for a .NET function for which no symbol information was available
Fixed a rare hang after processing of a capture is complete
Fixed crash that could happen when deleting an entry from the Symbol Server list in the Settings dialog
Fixed issue where the source view highlighting would not correctly update when scrolling through the document by clicking on the scrollbar or by using pageup/pagedown
Fixed various rendering issues in the Instrumentation Timing window
Greatly improved the functionality around diagnosing & fixing symbol resolve issues
A new 'Show Symbol Info' command has been added to the function context menu in the timeline view. The new window will show you a list of all modules along with their resolve state. For each module, detailed information is provided on what attempts were made to resolve the module and, in case of failure, what the reason was.
When symbol paths are modified, any session that was created using different symbol settings will now show an option to reprocess the session, so that symbols can be re-resolved
In case the source file or symbol file could not be found in the Source view, a 'More Info' button is shown that will give detailed information on why the source file could not be located
The Call Graph UI has been reworked. Columns other than the "function" column are now 'sticky' and horizontally scrolling will only scroll the "function" column. This makes it much easier to navigate deep call stacks without losing track of the timing information, and it is easier to manage space this way
The Function Time Distribution panel in the Call Graph can now be shown & hidden through a toolbar button, allowing you to free up some screen real estate when needed. The visibility state of the panel is persisted between sessions & runs
Added support to the timeline view for quickly moving threads to the top or bottom of the thread list through the thread context menu
Added support to the timeline view for quickly hiding everything except the selected threads through the thread context menu
Added support for following the global Windows settings for dark/light mode coloring. When enabled, Superluminal will automatically update its theme to match Windows whenever the global setting changes
Added support for multi-line copy to the Call Graph through CTRL+C or the context menu
Added support for multi-line copy to the Function List through CTRL+C or the context menu
Added support for assembly-only display to the disassembly view, which is accessible through the view options drop-down button in the toolbar of the source view
Added option to keep the target process running when using the Run mode to capture
Pressing F2 in the Session Explorer will now rename the selected session
Pressing F2 in the Recent Configurations will now rename the selected configuration
Ctrl+F (Find) in the source view will now search for the selected text (if any)
Ctrl+F (Find) in the call graph will now ignore leading & trailing spaces when searching for a term
The version number in the About box is now selectable to allow for easy copy/paste
When running an application from an invalid path, a notification will now be shown
When using a read-only Symbol Cache directory, a notification will now be shown
Improved messaging in Find window when no find results are found
Time columns in the Call Graph and Function List are now right-aligned to improve readability
Fixed issue where the Ctrl+F (Find), F3 (Find Next) and Shift+F3 (Find Previous) keybindings would not always register correctly in the Call Graph & Source View
Fixed issue where the source view would not be able to find the PDB in rare cases when profiling a .NET application that uses Portable PDBs
Fixed display of thread IDs in the Instrumentation Timings window
Fixed numerical sorting of process IDs on the process selection UI that's shown when opening a trace that was not made by Superluminal
Fixed issue where pressing 'enter' in the Call Graph's Find text box would not restart the search for the previously used term again
Fixed issue where the Find Results would be cleared when switching between tabs
Fixed rare crash when attaching to a Windows application that uses the SetThreadDescription Win32 API to set thread names
Fixed rare shutdown crash
Fixed crash when renaming a session when there was an error during the rename
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
Improved the message that appears when the capture does not contain sampling data. It now refers to a page on our website where we keep track of any issues that can cause this problem
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
Improved the UI when loading a file, so that you can see more details about symbol load progress. The UI also doesn't scroll up anymore when many symbols are being loaded
Clicking on a bar in the Instrumentation Timings view will now always default select the sub function with the largest time
Improved the selection visuals in the Instrumentation Timings view
LiveChat isn't eating newlines anymore
Now shipping required DLL for compatibility with Windows 7
The source view will now show an indication when line timing information is not available due to missing debug data
Fixed rare crash when clicking on the buttons in the Instrumentation Timings windows quickly after opening a file
Fixed a number of rare crashes when closing tabs or exiting the application
Fixed issue when attaching to a .NET application that could cause the wrong source file to be displayed when selecting a function in the timeline
Fixed symbols not being resolved in the CallGraph in rare cases
Fixed visual corruption in PieChart animation
Fixed semicolons missing in light theme in PieChart
Highly optimized the Source view so that it can display contents a lot faster, and speed doesn't depend on the length of your profile anymore, it's 100% scalable now
Improved support for instrumentation events in the Source view
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 info@superluminal.eu.
Fixed several issues when using paths with Unicode characters on them
Superluminal is now fully per-monitor DPI-aware. The UI will be scaled correctly using the Windows setting, no matter the scaling factor or monitor that is used.
When dragging the window between monitors with different DPI settings, all UI will be updated correctly
Runtime DPI changes, such as when logging in to a remote machine over RDP, are now correctly handled
The source view now has the functionality to browse to an alternate source location when the original source file path doesn't exist
The source file location in the source view will no longer disappear if the file path is too long.
The source view now always displays the source file location, even if it doesn't exist on local disk
The CallGraph now has support for filtering based on function names
The Function List now has a per-item context menu which can be used to jump to the corresponding function in the CallGraph
The context menu to hide/show columns in the CallGraph & Function List is now also enabled for the butterfly view.
Tooltips are no longer hidden behind the mouse cursor when using larger cursor sizes
Improved rendering performance
Fixed crash when using a control scheme with Omnidirectional pan
Fixed crash when cycling through find results while a timerange selection is active
Fixed crash when selecting a bar in the Instrumentation Timings window while a timerange selection is active
Fixed rare issues with starting a capture with 'start immediately' disabled
Fixed issue where the Thread Interaction tab could display the wrong blocking/unblocking stack in certain cases
Fixed issue where the UI rendering would be corrupted if the QT_SCALE_FACTOR environment variable is set
Fixed issue where the navigation pane on the start page could become too big, which would result in a window that could not be resized vertically anymore
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 info@superluminal.eu
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 info@superluminal.eu.
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
Added software rendering support for systems where GPU acceleration is not available
Added 'Flat List' view, which collapses all data for a given function into a flat view, giving you total inclusive/exclusive time per function
Added butterfly (called by/calls) view (in the 'Flat List' tab). This will show you where a particular function is being called from and what other functions it calls
Added support for resolving thunk functions in all views. This resolves various cases of calls to thunk functions missing from, for example, the disassembly view
License entry is now more forgiving; extra newlines and such are ignored
Fixed some font rendering artifacts
Fixed performance regression in symbol resolving
Fixed crash when drag selecting a timerange after switching the callgraph to 'selected timerange' in rare cases
Fixed several rare crashes that could occur right after opening a profile
Fixed corrupt display of thread states in CallGraph in certain cases
Fixed thread state distribution being incorrect in the callgraph in cases where there is a context switch without callstack
Fixed exclusive time in the callgraph being off in cases where there is a context switch without callstack
Fixed timings in the source view from diverging from timings in the threads/callgraph views in certain cases
Fixed display of files with UTF8 byte order mark in source view
Fixed rare shutdown crash when using the profiler over RDP
Fixed crash when browsing through the callgraph while two sessions are active