All Projects → bombomby → Optick

bombomby / Optick

Licence: mit
C++ Profiler For Games

Projects that are alternatives of or similar to Optick

Tracy
C++ frame profiler
Stars: ✭ 3,115 (+128.37%)
Mutual labels:  performance, profiler
Spark
spark is a performance profiling plugin/mod for Minecraft clients, servers and proxies.
Stars: ✭ 287 (-78.96%)
Mutual labels:  performance, profiler
Myperf4j
High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
Stars: ✭ 2,281 (+67.23%)
Mutual labels:  performance, profiler
Orbit
C/C++ Performance Profiler
Stars: ✭ 2,291 (+67.96%)
Mutual labels:  performance, profiler
Profimp
Python import profiler
Stars: ✭ 52 (-96.19%)
Mutual labels:  performance, profiler
Visualvm
VisualVM is an All-in-One Java Troubleshooting Tool
Stars: ✭ 2,084 (+52.79%)
Mutual labels:  performance, profiler
Pyinstrument
🚴 Call stack profiler for Python. Shows you why your code is slow!
Stars: ✭ 3,870 (+183.72%)
Mutual labels:  performance, profiler
Easy profiler
Lightweight profiler library for c++
Stars: ✭ 1,594 (+16.86%)
Mutual labels:  performance, profiler
Nanoscope
An extremely accurate Android method tracing tool.
Stars: ✭ 1,023 (-25%)
Mutual labels:  performance, profiler
Profiler
Firefox Profiler — Web app for Firefox performance analysis
Stars: ✭ 546 (-59.97%)
Mutual labels:  performance, profiler
Tickprofiler
Profile your minecraft server: Find which entities and tile entities are making your server slow
Stars: ✭ 119 (-91.28%)
Mutual labels:  performance, profiler
Vcprofiler
An accurate and simple tool uses KVO to measure the time cost of every view controller.
Stars: ✭ 61 (-95.53%)
Mutual labels:  performance, profiler
Liveprof Ui
An aggregator and web interface for Live Profiler
Stars: ✭ 118 (-91.35%)
Mutual labels:  performance, profiler
Hotspot
The Linux perf GUI for performance analysis.
Stars: ✭ 2,415 (+77.05%)
Mutual labels:  performance, profiler
Jvm Profiler
JVM Profiler Sending Metrics to Kafka, Console Output or Custom Reporter
Stars: ✭ 1,558 (+14.22%)
Mutual labels:  performance, profiler
Liveprof
A performance monitoring system for running on live sites
Stars: ✭ 206 (-84.9%)
Mutual labels:  performance, profiler
Pprof
pprof is a tool for visualization and analysis of profiling data
Stars: ✭ 4,990 (+265.84%)
Mutual labels:  performance, profiler
Phpspy
Low-overhead sampling profiler for PHP 7+
Stars: ✭ 1,105 (-18.99%)
Mutual labels:  performance, profiler
Xpedite
A non-sampling profiler purpose built to measure and optimize performance of ultra low latency/real time systems
Stars: ✭ 89 (-93.48%)
Mutual labels:  performance, profiler
Ngraph
nGraph has moved to OpenVINO
Stars: ✭ 1,322 (-3.08%)
Mutual labels:  performance

Optick: C++ Profiler For Games

GitHub GitHub release
Optick is a super-lightweight C++ profiler for Games.
It provides access for all the necessary tools required for efficient performance analysis and optimization:
instrumentation, switch-contexts, sampling, GPU counters.

Looking for 'Brofiler'? It has been renamed to 'Optick', so you are in the right place.

Build Status

Windows (x64: msvc) Linux (x64: clang, gcc) MacOS (x64: clang, gcc) Static Code Analysis
Windows Build status Linux+MacOS Build Status Linux+MacOS Build Status Total alerts Codacy Badge
Features Windows Linux MacOS XBox PS4 UE4
Instrumentation ✔️ ✔️ ✔️ ✔️ ✔️
Switch Contexts ✔️ ETW ✔️ FTrace ✔️ DTrace ✔️ ✔️ Win
Sampling ✔️ ETW ✔️ Win
GPU ✔️ D3D12, Vulkan ✔️ Vulkan ✔️ Vulkan

✔️ - works out of the box, ⏳ - in progress, ❔ - coming soon for the certified developers

List of Games and Studios using Optick(Brofiler)

Allods Team 4A Games CryEngine Larian Studios Skyforge Metro Exodus Warface Armored Warfare

Video Tutorial

Optick Video Tutorial

Basic Integration (one line of code)

  1. Copy 'src' folder from the repository or latest release to your game project
  2. Add OPTICK_FRAME("MainThread"); macro to the main loop of your game and #include "optick.h" header
#include "optick.h"
...
while( true ) 
{
	OPTICK_FRAME("MainThread");
	engine.Update();
}
  1. Use OPTICK_EVENT(); macro to instrument a function
void SlowFunction()
{ 
	OPTICK_EVENT();
	...
}
  1. Add OPTICK_THREAD("Name"); macro to declare a new thread with Optick
void WorkerThread(...)
{
	OPTICK_THREAD("Worker");
	while (isRunning)
	{
		...
	}
}
  1. Edit optick.config.h to enable/disable some of the features in specific configs or platforms.
    (e.g. disabling Optick in final builds)

⚠️ If your Game uses dynamic linking and you are planning to use Optick from multiple dlls within the same executable - please make sure that Optick's code is added to the common Dynamic Library and this library is compiled with OPTICK_EXPORT define (Static Library won't work).
You could also use precompiled OptickCore.dll which is packaged with every release:

  • Add include folder to the extra include dirs of your project
  • Add lib/x64/debug and lib/x64/release to the extra library dirs of your project
  • Copy lib/x64/debug/OptickCore.dll and lib/x64/release/OptickCore.dll to the debug and release output folders of your project respectively

API

All the available API calls are documented here:
https://github.com/bombomby/optick/wiki/Optick-API

Unreal Engine

Optick provides a special plugin for UE4. Check more detailed documentation here: https://github.com/bombomby/optick/wiki/UE4-Optick-Plugin

Samples

Run GenerateProjects_gpu.bat to generate project files. To compile the samples you'll need to install VulkanSDK. Alternatively you could use GenerateProjects.bat to generate only minimal solution with ConsoleApp sample.
Open solution build\vs2017\Optick.sln with generated samples.

WindowsD3D12 WindowsVulkan ConsoleApp
WindowsD3D12 WindowsVulkan ConsoleApp
DirectX12 multithreading sample with Optick integration SaschaWillems's vulkan multithreading sample with Optick integration Basic ConsoleApp with Optick integration (Windows, Linux, MacOS)

Brofiler

Brofiler has been renamed into Optick starting from v1.2.0.
All the future development is going under the new name.
Cheatsheet for upgrading to the new version:

  • BROFILER_FRAME("MainThread"); => OPTICK_FRAME("MainThread");
  • BROFILER_THREAD("WorkerThread"); => OPTICK_THREAD("WorkerThread");
  • BROFILER_CATEGORY("Physics", Brofiler::Color::Green); => OPTICK_CATEGORY("Physics", Optick::Category::Physics);
  • BROFILER_EVENT(NAME); => OPTICK_EVENT(NAME);
  • PROFILE; => OPTICK_EVENT();

How To Start?

You can find a short instruction here:
https://github.com/bombomby/optick/wiki/How-to-start%3F-(Programmers-Setup)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].