Home Products Contracting Purchase Resellers About Contact
Home Products Contracting Purchase Resellers About Contact


Download the latest version of FramePro here.

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

Version: 1.4.6
Previous versions...


-Session scroll barnew Shows summary of frames for entire session with scroll bar for currently selected visible range.
-Eventsnew 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.
-WaitEventsnew 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 Scopesnew 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 Scopenew HiRes scopes are shown in the thread view without heirachy, as a % of the parent scope.
-Lognew 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:

Windows 7, 8, 10
Windows UWP
XBox One
GCC, Clang

Please read the FramePro FAQ