Home Products Contracting Purchase About Contact
Home Products Contracting Purchase About Blog Contact


Download the latest version of FramePro here.

FramePro is free to evaluate for 30 days, after that you will need to purchase a license to continue using FramePro.

Previous versions...


-fixed lockup/crash in FramePro.cpp shutting down after a recording
-fixed to printf in HandleSocketError
-fixed FRAMEPRO_API define for Linux

-update code signing

-added 10x link form

-fixed crash rendering selected time spans

-changed scope details back to inclusive time but exclude identically named children
-tweak to selected scope outline rect

-improved visibility of selected scope in thread and core graphs
-made scope details datagrid panel show exclusive times for child scopes
-thread filter now able to filter by thread id
-improved visibility of scope context switch out time
-changed FRAMEPRO_SET_THREAD_AFFINITY() arg from int to int64
-Fixed crash in FramePro.cpp on shutdown
-Fixed last char being missed of strings

-Fixed installer failing for systems that don't have correct .net version installed

-re-calculate frame stats when creating session from selection

-fixed context menu not appearing when right clicking on thread info panel (allows moving thread up/down etc)
-fixed divide by zero exception processing session

-new thread id mode button - allow viewing threads by id or by name
-fixed find prev/next scope when no scopes exception

-fixed threads view custom stat datagrid checkboxes not showing
-fixed custom stats with "ms" unit not automatically scaling y-axis
-fixed custom stat auto-y-scaling clipping off the top
-group custom stats by graph in datagrid
-allow turning on/off graphing of custom stats by group
-fixed custom stat graphs snapping to 0 x-axis scroll when dragging
-fixed custom stats sometimes not appearing or being graphed under the wrong name
-fixed custom stats sometimes being assigned to the wrong frame
-fixed custom stats ignoring the graph setting

-fixed installer (errored if more recent VS2019 redist already installed)
-strip off namespace for scope names
-updated FrameProDll to VS2019 toolset
-UE4 PS4 context switch fixes
-only define FRAMEPRO_DEBUG if not already defined

-fixed crash opening new framepro file while find in progress
-fixed columns not showing in Scopes view
-update help doc
-changed colour of ms measure lines to avoid confusion with frame start lines
-fixed global hires timers
-added assert for adding a hires scope without a parent scope
-added FRAMEPRO_ALLOW_UNPARENTED_HIRES_SCOPES define to allow unparented hires scopes (has run-time cost)
-fixed skipped frames when frame-start is called from different threads
-fixed crash on shutdown

-fixed scopes sometimes having the wrong callstack
-exclude FramePro entries in callstack
-fixed long UI stall during connection
-improvements to DPI scaling and UI speed
-added thread affinity setting for FramePro to allow moving FramePro off cores that are being profiled new
-fixed goto-source for Visual Studio 2019
-added extra symbol file logging
-output window now remembers height properly when DPI scaled
-fixed new-lines in output window log
-fixed scope callstack view failing to update if clicking on the same callstack twice
-fixed scope details panel width with DPI scaling
-fixed scope deails panel button widths
-fixed collapsed thread graphs not showing name
-fixed divide by zero exception creating session from range
-added pdb for GameSimulator so that callstacks work
-added UE4 instructions to help chm
-fixed function names for FRAMEPRO_SCOPE() scopes (now of the form Class::Function)
-improved logging for symbol loading
-when looking for pdb's check exe folder and folders where other pdb's have been found
-fixed pdb loading when enumerate all modules is disabled
-updated to .NET 4.7.2
-updated to VS 2019 redist
-reduced overhead when not connected (only call the get-time function if connected)
-fix to CallstackSet to aboid callstack id clashes across threads

-support for DPI scaling (no more blurriness on 4K screens)
-added custom session stats FRAMEPRO_SESSION_INFO(name, value)
-version updater now downloads and runs install automatically
-ctrl-mousewheel zoom (changes thread scope height)
-reduce default thread scope height
-store frame graph offset and zoom in save files
-custom stats datgrid now select and highlight by row
-stopped "0 days remaining" from showing in title bar after registering
-improved message for FramePro.cpp version mismatch
-stoped auto-update asking to update again immediately after update
-changed measure line colour
-show custom session info values in log
-UE4 PS4 integration fixes
-fixed missing grid-line for buffering cell

-show idle CPU time for scopes in threads graph (requires context switches)
-range selection: shift mouse drag in frame graph to select a range and see updates stats for just that range
-vertical mouse panning in thread and core graphs
-added average scope time to time span graph panel
-fixed context switches occasionally displaying incorrectly
-fixed cores graph not scrolling to the show the last core
-cleaned up render of consecutive scopes on core graph when zoomed out
-added thread id to core graph hover box
-automatically resize core graph to show all cores
-made cores view show same scope frame stats as threads view
-reduced unnecessary writing of settings file
-clamped the scope target value to avoid exceptions drawing UI
-fixed exception drawing info panel if session not ready
-added Close All menu item
-fixed bug with stray rectangles being drawn in threads view
-optimised memory usage for scope rendering
-added a close button to the scope info panel
-added "go to source" context menu item in scopes view (right click on datagrid)
-remember custom heights of frame and core graphs in threads view
-default to scope colour mode
-made it harder to select thread splitters by mistake when dragging the threads graph
-hide thread graph measure line when panning
-renamed "Core" to "End Core" in scope hover box to make it clearer that it's the core the scope finished on
-renamed "Count/Frame" to "Av Count/Fr" in time span graph panel
-don't notify new version available if just downloaded new version
-show full function name in hover box on all platforms
-show class name for member functions on PS4
-fixed context switches disappearing when zooming in
-fixes wait events disappearing when start/end goes out of view
-moved to simpler ISC license
-improved handling of out of memory errors.
-fixed compiler warning in CriticalSection class
-fixed alignment on Event class
-fixed wait events start being shown on wrong core
-added FRAMEPRO_EXTERN_GLOBAL_HIRES_TIMER macro to declare an external global hires timer
-send "pretty" function names (includes classes retrun type and args)
-fixed GetCurrentThreadId() on linux platforms
-fixed thread teardown on UE4
-default global hires timers to cycles so that they display the time correctly in ms
-fixed custom stat units now showing when re-connecting
-fixed compile errors on XboxOne
-improved copy/pasting of registration keys (can now paste the entire key in one go)

-Context switch recording now supported on PS4
-fixed scope colours not being consistent in scope colour mode
-fixed core graph vertical scroll bar not updating on window size change
-always draw scopes in thread view even if < 1 pixel
-optimisation to scope rendering
-fixed gradual slowdown in scope rendering in threads when in scope colour mode
-fixed flickering scopes in cores view with context switches
-fix for child scopes sometimes not displaying in cores view with hires scopes
-fix for scopes not displaying in cores view if they are longer than a frame
-optimisation to rendering of context switches
-vertical scroll with shift+mouse wheel in cores view
-added browse option for source code lookup
-added "go to max frame" button
-added stats for selected scope per thread
-fixed UI issues with selecteed scope drop-down
-added csv export for frame graph
-fixed callstacks not updating correctly when switching between scopes ("resolving callstacks..." problem)
-update threads view UI colours
-increased size of average value in frame and selected scope stat panels
-added FPS and Max values in frame stats panel
-fixed rare exception when adding threads
-reduced scope height and added option to settings
-hires scopes can now have non-hires child scopes
-display the misc time for hires scopes
-draw hires scopes using hatched brush
-fixed random rects appearing when scrolling with hires scopes
-hires scopes now use same colour as parent scope
-fixed exception double clicking on hires scopes
-clear timespan selection when clicking on empty space
-added "max", "max time per frame" and "max count per frame" to scope hover box
-added "go to max" to scope context menu
-added "Max" and "Frame Max" to selected time span info panel
-fixed partially received packets bug when discomnnecting
-fixed callstacks on PS4
-fixed callstacks not working after loading a save
-fixed exception creating new session from selected range if range has hires scopes
-added FRAMEPRO_CALLSTACK() macro to send a callstack for the current scope
-reduced overhead of all scopes (removed hires code from scope start)
-all FramePro threads now clean themselves up properly
-fixed thread leak in UE4 integration
-fixed bug in wchar version of SetScopeCustomStat
-fixed hang when connecting while recording
-fixed debug output in HandleSocketError()
-show socket error if failed to accept new connections
-allow threads to use all cores
-fixed GetPlatformEnum() for PS4
-fixed recording to file for PS4
-disconnect all current connections when starting recording
-fixed bug disconnecting if context switch recorder failed to create
-fixed bug where no default allocator is created when starting a recording
-optimisation to SetScopeColour

-fixed slowdown processing HiRes scopes in FramePro app
-Improved symbol resolving for callstacks on PS4 and Linux/gcc

-fixed auto-update
-fixed flickering cores graph in threads view when not using context switches
-fixed 'dismiss' button not working on the context switches warning message
-fix for scope colours sometimes not being consistent across threads
-fix for scope colours appearing incorrectly on scopes view
-fix for slowdown after connection
-scope height option in settings
-fixes exception cliking on hires scopes (show details, prev/next scope)
-details panel now sorts duration column correctly
-fixed moving thrads up/down in threads view
-improved thread colouring
-fixed compile warnings in FramePro.cpp
-added recording filename to connection changed callback
-Support for UE 4.23
-Support for all Unreal target platforms, including XboxOne, PS4, Switch, Mac, Android
-automatically detect wchar size
-set default allocator when recording starts

-context switch recording for Android devices
-scope colours now indexed by string id rather than by string
-refresh views when scope colour changes
-ability to set scope colours from the UI (click on colour cell in datagrid, or right click on scope and select "Set Colour"
-ability to change custom stat colours (click on colour cell in datagrid)
-new macro to set scope colour from code: FRAMEPRO_SET_SCOPE_COLOUR
-new macro to set custom stat colour from code: FRAMEPRO_SET_CURTOM_STAT_COLOUR
-explicit context switch file loading (from menu or from notification UI)
-split off custom stat info to new macro and send separetely. FRAMEPRO_CUSTOM_STAT now just takes name and value. Use FRAMEPRO_SET_CUSTOM_STAT_GRAPH and FRAMEPRO_SET_CUSTOM_STAT_UNIT to set the graph name and unit for the stat. This reduces custom stat overhead by 40%.
-stop the custom stat datagrid from constantly refreshing and losing the current selection while connected
-if exporting and still processing data warn user and wait for processing to finish
-fixed divide by zero in session scroll bar
-fixed bug causing some scopes and timers to always show as "pending" (string remapping)
-fixed potential threading bug by locking m_HighlightedTimeSpans and m_TimeSpanInfoToColourMap in TimeSpanGraph
-max file size of zero in FRAMEPRO_START_RECORDING now means no limit
-fixed dealock in FramePro.cpp when reaching max file size
-fixed custom stat time min/max/average per-sec values
-Memory saving in FramePro app
-global hires timers no longer take graph name. Use the new FRAMEPRO_SET_CUSTOM_STAT_GRAPH macro.
-removed GetTLSThreadId and made GetCurrentThreadId return an int on all platforms
-made linux based platforms use gettid() for current thread id
-view custom stats as accumulated values over frames or time

-Refactor of FramePro.cpp/h. functionally the same, but all of the platform specific code has been moved out into separate files
-Local license server. You can now run a license server on your local network and register via that. Contact me for more details.
-Optimised receiving of data. Eliminates stalls in game when sending a lot of scopes/custom stats.
-Improved support for Unreal. UE4 is now a platform.
-added support for manually specifying source files for callstacks
-fixed exception in session scroll bar if values out of range
-fixed occasional crash when FramePro is shutting down while connected
-abstracted out file access so that it can be implemented per platform
-FrameProDll now uses multi-threaded CRT to remove dependency on VS-runtime
-removed Xbox360 platform

-reload symbols after symbol paths changed
-added symbol paths to settings
-general bug fixes
-reload symbols if callstack filters changed
-read/write callstack symbols to save file
-fixed FrameProLib module base
-always send modules on reconnect
-Fixed PS4 symbol resolving
-PS4 now saves synbols in save file
-added option to enable callstacks to connections dialog and start recording macro
-resolving of PS4 system symbols
-fixed loging
-option to register using GUID
-fix for zoom getting stuck if zooming in too far in threads view
-remove the limit of 0xffff maximum unique scopes
-changed the default maximum number of visible threads to 100 and added to the settings dialog
-changed m_NewThreadId in FrameProTLS to an atomic
-optimisations to loading recording files
-fixed bug where dynamic scopes would be per thread. Dynamic scopes of the same name are now combined regardless of thread.
-fixed bug where sometimes it wouldn't show any scopes when loading a recording
-fixed problem selecting scopes in core graph when using windows scaling

-Support for PS4
-Fixed auto-update

-general optimisation: 20% faster opening recordings, and 26% less memory used
-optimisation for profiles with huge amount of scope types (>1000)
-new registration system
-added menu item for threads view custom stats graph visibility
-fixed sorting of scopes datagrid percent column
-fixed stall opening recordings with lots of scope types
-fixed stall opening recording with huge number of threads (>500)
-added .NET 4.6 to installer
-support for wide string graph and unit values in custom stat macro
-fix for hang shutting down FrameProLib
-fix for resolving callstack public symbols
-support for symbol servers
-verify that xbox symbol files match exe
-fixed crash reading in save file with custom stat scopes

-Fixed exception in custom stat graph drawing

-Fixed crash using scope colour mode with hires scopes
-Fixes to "jump to source code"
-Added "Jump to Source Code" button to scope details panel

-FrameProCmd.exe Process FramePro recording files on the command line
-Callstack Recording Record scope callstacks.
-Scope Details Panel Double clicking on a scope now brings up a datagrid showing the scopes children, and callstack.
-Custom Scope Stats Add custom stats to scopes. FRAMEPRO_SCOPE_CUSTOM_STAT(name, value, graph, unit). Custom stats can be viewed by hovering over a scope. They also appear in the frame graph view.
-New Custom Stats Graph in Threads View
-Colouring by scope name
-"Frame" Stats are now called "Custom" stats
-improvements to UI layout and general tidy-up
-improvements to dropdown control (for selected scope name)
-improved formatting of time strings
-added "total time" and "total count" for current frame in scope hover box
-making DataGrid controls read-only
-updated documentation on HiRes timers
-general rendering optimisation
-added match count to Find control
-fixed frame index in hover box
-highlight scope when right clicking
-fixed centering of highlighted scopes
-fixed find prev/next scope in right click context menu
-added count column to scopes view
-fixed line graph hover value discrepancy
-fixed divide by zero exception in session scroll bar
-fixed potential overflow error in frame graphs
-only define FRAMEPRO_ENABLED if not already defined
-support for conditional scopes that take a StringId
-support for conditional bool scopes. Activate a scope dynamically by passing in a bool.
-added the ability to set the port at runtime in FramePro.h
-added the ability to set the conditional scope min time at runtime
-fixed conditional scope min time for recording to file. Initialised in ms instead of us
-fixed potential overflow in FRAMEPRO_GET_CLOCK_COUNT on Linux
-added missing variants of some macros
-fixed scope colouring in core graph
-removed the string compare in RegisterString. This is a significant optimisation if you are using the dynamic string macros.
-moved <atomic> include inside of FRAMEPRO_ENABLED define
-support for int, float, double types in custom scope stats
-Updated UE4 integration to work with 4.18
-updated to .NET 4.6
-updated to VS2017 redist
-Fixes to registration process

-Session scroll bar Shows summary of frames for entire session with scroll bar for currently selected visible range.
-Events Game events. Events can be triggered at any time and show up on the thread and core views as well as the session scroll bar.
-WaitEvents Thread events, such as mutex's and critical sections. Events are shown in the core view and show when a thread starts waiting on an event, when it stops, and what thread triggered the event to stop waiting.
-Conditional Parent Scopes Pass in a callback to the scope so that it's child scopes are only sent on a specific condition (eg frame rate is low)
-HiRes Timer Scope and HiRes Capture Scope HiRes scopes are shown in the thread view without heirachy, as a % of the parent scope.
-Log send log messages from your game and view them in the log window. Jump from a log message to a frame in the threads view
-escape key now closes connection settings dialog
-fixed bug where the last context switch for a thread would sometimes not show when scrolling the core view
-optimised core graph drawing
-hide hover boxes while scrolling core graph
-clamped core and thread graphs to 0 when scrolling
-clicking in core graph not on a scope clears the currently selected scope
-fixed pixel aliasing problem in thread and core graphs when dragging selection in frame graph
-fixed show context switch check box. Would sometimes show incorrect value
-shift+left/right to move to prev/next frame without changing zoom
-show "processing data %" message on frames graph
-don't allow saving until processing data is complete
-general optmisations - don't update graphs if no need
-changed from .net 4.6 to 4.5.2 to match the version installed by the installer
-optimized drawing of thread time span graph
-remember height of line graph windows
-fixed filter in Frame Stats View
-fixed bugs with graps not updating correctly in Frame Stats View
-changed Buffering stat to show percent complete when reading recording file
-fixed bugs in changing from per frame to per time in Frame Stats View
-fixed exception zooming out too far in Frame Stats View
-added output window for FramePro messages
-cleanup session and show the connection settings dialog if the connection failed
-made PacketAllocator thread safe when there are multiple sessions. Crash bug if connecting in new session while old session still processing data
-remember height of core graph in threads view
-context switches visible by default
-fixed thread order when reading recording files
-identifier in save files and recording file headers so that FramePro doesn't have to rely on file extensions to tell them apart.
-made registration work with emails with special characters
-optimised packet processing
-fixed bug where it sometimes wouldn't show all of the core lines
-if no session name is supplied use the process name
-sort timers by when when outputting to csv
-fixed buffering stat
-fixed occasional crash/hang shutting down FrameProLib
-added a minimum value for a scope to be sent. Can eliminate a lot of zero length scopes.
-renamed HiRes timers to global HiResTimers. HiRes timers are now something different.
-added a maximum file size setting for a recording. Recording stops when the file reaches the specified size.
-Block new connections while recording to file
-Optimised graph drawing when connected
-Fixed graph not refreshing if TrackEnd disabled
-Fixed threads sometimes not re-ordering correctly
-Added FRAMEPRO_BLOCK_SOCKETS() macro for added security.
-frame graphs now use max rather than average to auto-set Y axis scale
-reset zoom button in Frame Stats View
-fixed exception drawing line graph at some zoom levels
-colour the session time range to show where session starts/ends
-optimised graph drawing when zoomed out
-Updated User-Guide
-reading a corrupt file now shows an error box
-fixed bug with session stats not showing correctly after loading a save
-fixed stat graph hover box
-exporting of Frame Stats to Excel
-added Frame Stat Min Value and Min Count columns
-Mouse drag y-origin in graphs
-Support for negative values in graphs
-Fixed compile warnings in FrameProLib for x86
-fixed delay when reconnecting
-FramePro.h no longer includes windows.h

-FramePro.cpp support for linux/gcc/clang
-New Cores View - heirachical breakdown of cores
-Frame Stat recording. Frame Stats are custom stats that are accumulated during the frame and sent once per frame. The stats can be viewed and graphed in FramePro
-New Frame Stats view - frame stats accumulate during a frame and are sent once a frame. They can be view in the datagrid and graphed in FramePro
-Added ability to graph scope stats in Scopes view
-Option to view scopes by scope colour (as well as thread colour)
-Show days remaining of free trial in about dialog
-y-axis for frame graph
-changed colour of target line in frame graph to make it more visible
-allow mouse dragging of target line in frame graph
-allow mouse dragging of frame graph y-scale
-Separate target line for scopes frame graph, and colouring frames where scope exceeds target
-scopes can now be selected in the core view
-UI improvements - new view tabs
-Create new session from selected frames
-improved support for UE4 in FramePro.cpp (now uses __UNREAL__ define)
-show scope colour in scopes datagrid
-Improved error reporting for context switch recording
-Critical section now used to protect send buffer so that the send thread flush the buffers once per frame. This stops scopes getting stuck on the TLS send buffer when the thread stops sending scopes.
-added FRAMEPRO_CLEANUP_THREAD macro to free all FramePro resources for a thread
-fixed race condition in connection. Only showed up on Fedora OS. Reconnect would sometimes fail after disconnecting.
-added FRAMEPRO_THREAD_SCOPE macro to name the thread and clean it up wien it terminates
-added FRAMEPRO_SHUTDOWN to clean up all FramePro resources
-FRAMEPRO_SET_THREAD_NAME no longer takes the current thread id (because GetCurrentThreadId is not cross platform)
-HiRes timers. Added FRAMEPRO_HIRES_SCOPE. HiRes timers accumulate during the frame and are sent once a frame.
-fixed race bug in connection code if send thread created too quickly
-changed FRAMEPRO_UNIQUE to use __LINE__ instead of __COUNTER__
-added virtual destructor to Allocator class
-fixed bug in Event::Wait on Unix
-threads with the same name are now displayed on the same thread graph
-added warning dialog if failed to start context switch tracking
-Removed the 1% tolerance for frames being over budget
-UI optimisations
-fixed core graph zoom centering in threads view
-fixed 'buffering' stat
-fixed crash if no connect packet received
-Optimised packet processing
-Wait for all packets to finish processing before saving (with progress bar)
-fixed strict alianing compile warning in FrameStatPacket

-New installer with bug fix from Wix. Fixes installer bug "font '?' could not be found" when updating from an older installed version.
Please note that when updating from versions 1.2.1 - 1.2.4 you may need to manually uninstall the previous version before installing this version. After you have installed this version everything updates will work as expected.

-Built installer with latest version of Wix.
-Added extra diagnostics to install process.

-Removed dependency on debug VS runtime for FramePro_GameSimulator.exe and made it 64-bit.
-FramePro_RecordingPlayer now built against .NET 4.0

-support for profiling apps with multiple dlls
-fixed FrameProExample project build
-new Help chm file (in progress)
-reorganised FramePro.h. Macros now at top of file. Everything else moved down into private section
-documented all macros in FramePro.h
-fixed compile warning in FramePro.cpp casting strlen to int
-fixed crash shutting down in FramePro.cpp. Null mp_Buffer in Buffer::Clear
-added 'View Help' to the Help menu to open the chm
-Startup page for viewing videos, demo and recent files

-Fixed installer immediatley crashing on some platforms
-Updated VC redist to most recent version
-Made VC redist not vital. Installer continues if it fails.
-Added extra diagnostics around installer bootstrapper. Now shows message box with exception info.

-added the ability to play back recording files as though connected in real-time
-added a game simmulator app so that users can quickly try out FramePro as if connected to a real game
-support for compiling FramePro.cpp with UE4
-support for compiling FramePro.cpp with UWP
-fixed "pending scope" bug, where if not enough scopes are sent it would take a long time for the send buffer to be flushed
-FramePro.cpp now shuts down cleanly
-changed the recording file extension from framepro_dump to framepro_recording
-made FramePro.cpp pull in the Advapi32.lib library
-fixed FramePro.cpp compile warnings in release
-set the thread name of the ETW context switch tracing thread
-changed extension of FramePro.hpp to .h
-massively reduced the number of allocations in FramePro. This speeds up the interface, reduced memory and reduced GC stalls
-fixed bug where jumping to the source file wouldn't work with files with spaces in their path
-FramePro will attempt to get the process name if not supplied and the process is running locally
-fixed bug where scopes would occasionally be added to the scope heirach in the wrong order (only affected find prev/next)
-optimisations to FramePro GUI rendering
-added filter to scopes datagrid view
-remember frame graph height when shutting down
-save selected time range in FramePro save files
-changed demo length from 15 days to 30
-changed core graph frame line from black to white
-disable the track end button if not connected
-extra logging for diagnosing connection problems
-apply current find highlighting after loading a session
-goto prev/next time span disables track-end
-always colour the main thread blue
-update the frame graph every 30ms and the thread view every 240ms. Makes it earier to see what is going on, and reduced draw time
-"find prev" in find control
-fixed bug where it would say it was buffering packets if the app stopped sending data

-Fixed frame graph lines not showing as green when frame in budget

-Improved process name tracking for context switches. Now works with dumps and tracking remote sessions.
-made other process context switch lines more visible
-changed Context Switches check box to "Display Context Switches"
-stop tracking end when clicking in core graph
-fixed crash on shutdwn after recording context switches
-fixed potentially uninitialised variable compiler warning in scope macros

-changed over to use .NET 4.6 instead of 4.6.1 (Windows 10 seems to have a problem installing 4.6.1)
-install the VS2015 runtime from the installer. Needed for the ETW event tracing
-stopped registration key continually needing to be entered every time FramePro starts
-fixed auto-update

-Recording of context switches on Windows and XBoxOne. This makes the core view accurate. It catches when scopes are inturrupted or switched mid-scope, and shows other unscoped threads and processes.
-Sessions use up 33% less memory, and save files 33% smaller.
-Optmisations to packet processing
-Optmisations to UI updating
-added filtering, hiding and reordering of threads
-General UI improvements
-upgraded to .NET 4.6.1
-show the license state on the about dialog
-Added dropdown box to Connect dialog for windows and XBoxOne ports
-fixed occasional crash on shutdown
-show frame count and duration when shift-selecting range in frame graph
-jump to prev/next spike button
-export entire session to csv
-fixed bug where hover boxes would occasionally stop displaying
-shift+mouse wheel to scroll up/down in threads view. Mouse wheel over thread title panels also scroll threads
-click on a thread to collapse/expand
-new scopes datagrid view
-changed buffering from number of packets to time
-added FramePro memory usage to info panel
-Sessions now have a name, build id, platform, date, process id
-fixed left/right keyboard buttons not working in graph view
-fixed thread sorting when there are multiple threads of the same name
-remember custom height of thraed graphs
-fixed threads not always resizing properly after reading a save file
-improved timeline when zooming a long way in or out. Can now soom in to ns or out to seconds
-right click on scope to highlight all identical scopes
-clicking on a timespan stops the track-end while connected
-fixed thread hover-box randomly disappearing
-always show selected scopes when zoomed out (clamp to 1 pixel wide)
-jump to next scope in thread context menu
-trim white space of registration name
-fixed crash shutting down session if read fails
-improved message boxes if read fails
-fixed crash reading a corrupt dump file
-tracking of context switches on Windows
-fixed SetThreadAffinity. It was mistakenly calling SetThreadPriority
-added the ability to block all FramePro sockets at runtime as an additional security measure. They can be defaulted to blocked and have to be explicitly enabled.
-Now possible to set information about the session such as name and build id
-Sockets on XBoxOne now use Windows sockets functions
-fixed compiling for UWP
-fixed connect bug that would occasionally send bad data and crash FrameProif connect and disconnect in quick succession
-improved error handling in Start/Stop recording functions
-fixed memory leak in buffer swap
-changed GetTickCount to FRAMEPRO_GET_CLOCK_COUNT so that it compiles on UWP
-fixed memory leak in List
-fixed Socket::HandleError() on UWP
-flush send buffer when snd thread terminates to avoid losing data

-significant optimisations to packet receiving
-support for loading up very large dump files
-movd match count to underneath find control
-set main UI thread to above normal priority to make UI more responsive
-added "New c=Connection" menu item
-stopped find control from taking focus
-save session memory stats
-stop trackking end when user clicks in thread view
-stop trackking end when moving to prev/next frame with cursor keys
-show zero duration time spans as 1 pixel wide
-General optimisation. FrameProLib is now much lower overhead
-removed all locks and atomics from AddTimeSpan
-enabled recording to file at runtime with Start/Stop functions.
-added FRAMEPRO_SOCKETS_ENABLED define to disable socket code
-added RelaxedAtomic class to remove locks that VS2012 adds unnecessarily
-changed GetCurrentProcessorNumber to use __cpuid. Faster and works on UWP
-added a connection changed callback
-support for adding custom time spans passing in thread and code
-support for setting thread affinity and priority for all FrameProLib threads
-enable asserts in debug
-added UWP as a platform type
-de-coupled flushing the send buffer from the frame. Now flushes every 30 ms. Allows for long frame captures
-added a maximum memory limit for the send buffers, set to 50MB by default. Reduces stalls from network bandwidth spikes
-reduced FrameProLib overhead when not connected

-support for receiving time spans out of order
-non-interactive recording mode
-allocators for TimeSpanRenderData and UnassignedTimeSpan
-fixed conditional scope control getting focus on startup
-remember named connections
-fixed bug where the core graph time spans would sometimes change colours when zooming
-fixed bug where time spans would sometimes disappear in the core view
-fixed bug where the views would sometimes try and render before the session had finished loading
-fixed selected frames marker disappearing past last frame
-save time span graph as csv
-enable/disable view buttons
-added lots more data to the info panel
-show the number of buffered packets, turning red if too high
-show the number of strings, and memory used
-fixed bugs due to active view
-query about saving when closing
-support drag/drop to open files
-added a packet allocator
-packet core value into packet type to save space
-removed padding from packets and reduce size wherever possible
-adding missing dispose calls for cleaning up brushes and events
-made process packets thread above normal priority
-optimised time -> frame index lookup
-changed the default port on windows
-clamped zooming in
-show info in hover box for thread name panel
-added ms and us lines when zooming in on the thread view
-optimised drag-scrolling in the threads view
-re-wrote TimeSpanList to be more optimal and use up less memory
-fixed bugs in time span drop don box
-changed critical sections over to slim read/write locks
-changed all defines to be 0 or 1, rather than ifdef
-now records data into fixed size buffers
-all allocations now go through a custom allocator
-re-structuring of code to make it cleaner and more manageable
-added support for Unreal Engine 4
-change intrinsics over to std::atomics
-many thread safe fixes with correct aquire/release
-only record scopes if connected.
-optimised getting.creating of the framepro TLS object
-put allocator behind string class
-reduced memory usage when not connected. Now only 11K per thread.


setup video


Add these two files into your codebase:

Call this every frame

Add scopes to your code:

Connect to your app using FramePro.exe.

Supported platforms:

XBox One
Unreal Engine 4 (UE4)

Please read the FramePro FAQ