Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
O

optick

> 数据库
Open source

C++ Profiler For Games

3.1K stars0 likes0 views
WebsiteGitHub

About

C++ Profiler For Games

Optick: C++ Profiler For Games


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
Features Windows Linux MacOS XBox PS4 UE4
Instrumentation :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :grey_question: :heavy_check_mark:
Switch Contexts :heavy_check_mark: ETW :heavy_check_mark: FTrace :heavy_check_mark: DTrace :heavy_check_mark: :grey_question: :heavy_check_mark: Win
Sampling :heavy_check_mark: ETW :grey_question: :grey_question: :heavy_check_mark: Win
GPU :heavy_check_mark: D3D12, Vulkan :heavy_check_mark: Vulkan :heavy_check_mark: Vulkan :hourglass_flowing_sand:

:heavy_check_mark: - works out of the box, :hourglass_flowing_sand: - in progress, :grey_question: - coming soon for the certified developers

List of Games and Studios using Optick(Brofiler)

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)

:warning: 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
https://github.com/bombomby/optick/wiki/UE5-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
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)

GitHub Issues· 85 open

View all on GitHub
  • #183

    [Question] Linux GUI

    Updated Apr 29, 2025
  • #198

    The timer on the Android platform seems to have some problems, it is too small

    Updated Dec 7, 2024
  • #197

    Guessing this project is dead/abandoned?

    Updated Mar 1, 2024
  • #195

    optical.dev fails to load due to security settings/certificate

    Updated Dec 24, 2023
  • #106

    Support for conan

    Updated Nov 23, 2023
  • #192

    .NET bindings

    Updated Jul 31, 2023
  • #191

    EventStorage leak

    Updated Jul 23, 2023
  • #190

    Vulkan issue.

    Updated May 31, 2023

> Tags

C#c-plus-plusgamesperformanceprofiler

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category数据库
PricingOpen source

> Related tools

P
PostgreSQL
功能强大的开源关系型数据库
R
Redis
内存数据结构存储,常用作缓存与队列
M
MySQL
广泛使用的开源关系型数据库