Note: There is no guarantee that version mismatched client and server will be able to talk with each other. Network protocol breakages won't be listed here. Note: Release numbers are nothing more than numbers. There are some "missing" versions due to trace file changes during development. This is not a mistake. v0.4 (xxxx-xx-xx) ----------------- - Renamed "standalone" utility to "profiler". - Added trace update utility, which will convert files saved in previous versions of tracy to be up-to-date. - Fix regression causing varying size of profiler window for different captures. - Added support for on-demand tracing. - If a client application is compiled with the TRACY_ON_DEMAND macro defined, tracing will not begin until a connection to server is established. - Since data is not fully captured in this mode, the resulting trace will be less precise, until application state is appropriately reset. For example, locks need to be fully released, zone stacks need to be flushed. This is an automatic process. - All tracing macros are able to work in the on-demand mode. - Improved compatibility with various system setups. - Aside from using TRACY_NO_EXIT define you can also set the same-named environmental variable to 1 to get the same effect. - Added ability to show/hide all threads and plots. - Performance improvements. - Added memory allocation info window. - Selecting memory allocation on a plot will draw time range of the allocation. - Find zone menu improvements: - Zones can be now also grouped by call stacks. - Zone groups can be now also sorted by time spend in each zone. - Zone groups list now displays group times. - Added named versions of tracing macros that allow specifying scoped variable name. - The main profiler window is now kept at the bottom of windows stack. - The "profiler" utility will now use a custom embedded font. - Microseconds are now displayed using correct symbol ('μ' instead of 'u'). - Unix builds of the "profiler" utility will now ask for a file name when saving a trace. - Progress popup is now displayed when a trace file is loading. - Zones that share source location with a zone that is hovered over are now highlighted. - Added ability to zoom-in to a selection range made using middle mouse button. - Holding the ctrl key will switch to zoom-out mode. - The "profiler" utility will use less resources when its window is out-of-focus or minimized. - Added support for cross-DLL profiling. - Items in options menu (locks, threads, etc.) are now described with number of events. - Created an extensive user manual for the profiler. - Added ability to capture multiple frame sets. - Viewer will display multiple frame ranges at once. - Only one frame set can be active at once. The selected one is used for the frame navigation graph, frame navigation buttons and drawing frame separators. - Frames can now also be discontinuous. - Frames and zones too small to be displayed will be marked with a zig-zag pattern. - General improvements to message list and message markers. - Hovering over message on a list will highlight its marker (previously it only worked the other way). - Left clicking on a message marker will focus the message list on the selected message. - Middle clicking on a message marker will center it on screen. - Added trace information window. - Displayed memory sizes are now properly formatted. - Added call stack tree for memory allocations. - The source code of the profiled application may now be viewed in the profiler. - BIG FAT WARNING: The actual profiled program source code is not known to the profiler. It only checks if there is a file on your disk that matches the file name of the captured source location. Even if the file is displayed, it may be out of date. - CPU and GPU zones will have "Source" button, if source file can be opened. - Source files for call stack traces can be opened by right-clicking on the file name. Since in this case there is no button that can be hidden, a small animation will be played to notify user if the source cannot be opened. - The main profiler view will now occupy the whole window. Previous behavior is still available for embedded use cases. - Many button labels are now accompanied by icons. - Fonts should now be less blurry. - "Go to parent" button in zone info window won't be displayed if there is no parent to go to. v0.3.3 (2018-07-03) ------------------- - Breaking change: the format of trace files has changed. - Previous tracy version will crash when trying to open new traces. - Loading of traces saved by previous version is supported. - Tracy will no longer crash when trying to load traces saved by future versions. Instead, a dialog advising to update will be displayed. - Tracy will no longer crash in most cases when trying to open files that are not traces. Some crashes are still possible, due to support of old, header-less traces. - Ability to track every memory allocation in profiled program. - Allocation event queuing must be done in order, which requires exclusive access to the serialized queue on the client side. This has no effect on the rest of events, which are stored in a concurrent queue, as before. - You can search for a memory address and see where it was allocated, for how long, etc. This lists all matching allocations since the program was started. - All active (non-freed) allocations may be listed. This shows the current memory state by default, but can go back to any point in time. - Graphical representation of process memory map may be displayed. New allocations/frees are displayed in a bright color and fade out with time. This feature also can look back in time. - Memory usage plot is automatically generated. - Basic allocation information is displayed in memory plot tooltips. - A summary of memory events within a zone (and its children) is now printed in zone info window. - Support loading profile dumps with no memory allocation data (generated by v0.2). - Added ability to display global statistics of a selected zone from the zone info window. - Fixed regression with lock announce processing that appeared during worker/viewer split. - Allow selecting/unselecting all locks for display. - Performance improvements. - Don't save unneeded lock information in trace file. - Don't save thrash in message list data. - Allow expanding view span up to one hour, instead of one minute. - Added trace comparison window. - An external trace has to be loaded first. - Zone query in both traces (current and external). - Both results are overlaid on the same histogram. - Graphs can be adjusted as-if there was the same number of zones collected. - Read time directly from a hardware register on ARM/ARM64, if possible. - User-space access to the timer needs to be enabled in the kernel, so tracy will perform run-time checks and fallback to the old method if the check fails. - Prevent connections in a TIME-WAIT state from blocking new listen connections. - Display y-range of plots. - Added ability to unload traces loaded from files. To do so close the main profiler window. You will return to the connect/open selection dialog. Live captures cannot be terminated this way. - Zones previously displayed in zone info window are remembered and you can go back to them. Closing the zone info window or switching between CPU and GPU zones will clear the memory. - Improved message list window. - Messages are now displayed in columns. - Originating thread of each message is now included in the list. - You can now navigate to next and previous frame. - Zone statistics can be now displayed using only self times. - Support for tracing GPU events using Vulkan. - Timeline will now display "OpenGL context" or "Vulkan context" instead of "GPU context". - Fixed regression causing invalid display of GPU context appearance time. - Fixed regression causing invalid reporting of an active CPU in zone end events, if MSVC rdtscp optimization was not enabled. - Ability to collect true call stacks. - Supported on Windows, Linux, Android. - The following events can collect call stacks: - Memory alloc/free. - Zone begin. - GPU zone begin. - Zone stack trace now also displays frames from a real call trace. - On Linux call stack frame name resolution requires a call to dladdr, which in turn requires linking with libdl. - Allow manual entry of GPU time drift value. - Unix build system no longer shares object files between different build units. - Fixes inability to build debug and release versions of a single utility without "make clean". - Fixes incompatibility between "standalone" and "capture" utilities due to different set of used feature flags. - On Windows "standalone" utility now adapts to system DPI setting. - Optional per-call zone naming. v0.2 (2018-04-05) ----------------- - Fixed broken TRACY_NO_EXIT behavior. - Visual refresh (new color scheme). - Added optional support for live in-depth zone analysis. - Ability to search for zones matching a query. - Histogram of zone time spans. - List occurrences of a zone, grouped by thread, or by user text. - Zone groups can be selected and highlighted on histogram graph. - Support for linear and logarithmic display of time and values. - Histogram bins can show zone counts or total execution time. - Listed zones can be narrowed down by data range selection on histogram. - Separation of server data handling code from the visualisation. - Implementation of a command line capture utility. - Support libraries have been updated. - Fixed an issue that prevented de-duplication of source location payloads. - Fixed an issue that prevented the ability to disable threads in settings menu, if two threads had the same name. - Performance optimizations. - Visual clean up of the settings menu. - Zone info windows improvements. - Visual improvements to zone info window child list. - Zone info windows now show zone thread. - Display zone stack trace. - Hide pause/resume button if there's no data connection (i.e. trace was loaded from file). - Source location statistics view has been added. - Fixed crash when a saved trace was opened, but no trace capture session was performed before. - Standalone server will now open trace files passed as an argument to the executable. - Fix possible crash in SetThreadName, that could happen if TLS init was delayed until first use of thread local variable. - Store full thread name if pthreads (with 15 character name limit) are used. - Properly handle unaligned memory access (no performance impact). - Fixed broken lock identifiers in try_lock(). v0.1 (2017-12-18) ----------------- - Initial release.