Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zeux/microprofile
microprofile - embeddable CPU/GPU profiler
https://github.com/zeux/microprofile
Last synced: about 1 month ago
JSON representation
microprofile - embeddable CPU/GPU profiler
- Host: GitHub
- URL: https://github.com/zeux/microprofile
- Owner: zeux
- Archived: true
- Created: 2015-04-21T04:46:23.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-05-21T16:01:46.000Z (over 1 year ago)
- Last Synced: 2024-08-01T15:29:45.724Z (4 months ago)
- Language: C++
- Homepage:
- Size: 30.3 MB
- Stars: 492
- Watchers: 19
- Forks: 45
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- AwesomeCppGameDev - microprofile - embeddable CPU/GPU profiler (C++)
README
# microprofile [![Build Status](https://travis-ci.org/zeux/microprofile.svg?branch=master)](https://travis-ci.org/zeux/microprofile)
This is a fork of [microprofile by Jonas Meyer](https://github.com/jonasmr/microprofile). This library has diverged from upstream.## Using the upstream version is recommended as this fork will no longer be maintained.
microprofile is an embeddable CPU/GPU profiler with an in-app and HTML visualizers.
![Screenshot](https://pbs.twimg.com/media/BnvzublCEAA0Mqf.png:large)
## Features
* Hierarchical regions for timing sections of the code
* Labels for adding extra information in the form of strings to regions
* GPU regions (D3D11/D3D12/GL/VK) with GPU timestamp synchronization
* Counters for measuring various global values that change over time
* Graphing any region or counter in real-time to observe differences over time
* Visualization using in-game UI, a web browser (buit-in server) or an HTML file
* Low overhead## Platform support
microprofile is known to work on Windows XP and above, Linux, OSX, iOS, Android and Xbox One.
It should be easy to adapt to support any other platforms; pull requests are welcome!
## Difference from upstream
This library has been forked from upstream in 2015 - back when upstream was using Bitbucket/Mercurial - and has diverged over time from upstream; the difference in priorities for features led to the divergence not really converging, so treat this as a permanent fork.
The list of features that have not been backported from upstream (as of October 2018):
* WebSocket-based live connection that displays graphs and allows to start the frame capture
* Timelines that can be useful for profiling long running code such as level loading
* Support for more than 48 categoriesThe list of features that this fork has but upstream doesn't (as of October 2018):
* On-screen UI support that can use OpenGL or any other rendering backend for rendering (upstream removed this in 2017)
* On-screen UI support for "Frame" display mode that only shows the frame bar, to allow for easier detection of spikes without obstructing gameplay
* Unified nomenclature between on-screen UI and web UI - the same information is consistently displayed in both, with the same names
* Support for dynamic strings (labels) that are displayed inside of scopes and can use printf-style format strings
* Automatic color selection based on scope name hash (you can use -1 instead of color value everywhere)
* Unified CPU/GPU scopes - MicroProfileEnter/MicroProfileLeave/etc. automatically determine whether the group is CPU or GPU
* Reworked dtrace based context switch visualization on OSX (higher performance, better time synchronization)
* Completely reworked GPU timing implementation, with support for GL on OSX as well as Vulkan, D3D12, D3D11 on other platforms (upstream now also supports Vulkan via a separate implementation)
* GPU backends can be chosen dynamically - you can compile support for D3D11, D3D12, OpenGL and Vulkan in (or any selection thereof) and dynamically initialize just one at some point later.
* Substantially improved web server performance (web server runs in a dedicated thread, creating the HTML dump is several times faster)
* A lot of robustness fixes for edge cases, overflow conditions, GPU timing issues etc. - this fork should be safe to enable in production builds.
* Reduce profiler memory overhead when no groups are captured by lazily allocating most large buffers
* iOS and Android supportThis library ships in Roblox client and editor for all platforms, compiled in (with profiler not capturing data by default but working in on-screen or web-server mode depending on the platform) for all users.