Optick: C++ Profiler For Games

Overview

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)

Comments
  • How can I launch Brofiler at program startup?

    How can I launch Brofiler at program startup?

    Currently I start Brofiler while my program is running, so I can't catch the initial frames of my application. Is there a way to attach them on startup?

    opened by chuckleplant 12
  • Adding support for Vulkan Functions to be loaded by user

    Adding support for Vulkan Functions to be loaded by user

    After posting this issue: https://github.com/bombomby/optick/issues/108 I figured I'd dig in and at least see what would be needed to support vulkan meta-loaders. This is the solution I've whipped up so far. I've tested this in a personal engine and it seems to work great.

    opened by Honeybunch 8
  • Crash brofiling static constructor

    Crash brofiling static constructor

    I get a crash using this minimal example:

    #include "Brofiler.h"
    class Foo
    {
    public:
    	Foo(){ BROFILER_CATEGORY(__FUNCSIG__, Brofiler::Color::Khaki) }
    };
    
    Foo foo;
    
    int main( int argc, char * argv[] ) {}
    

    Details on the crash:

    Exception thrown: 'System.AccessViolationException' in BrofilerTest.exe Additional information: Attempted to read or write protected memory. This often an indication that other memory is corrupt. If there is a handler for this exception, the program may be safely continued.

    I get the crash when brofiling the constructors of static members of global variables. I guess that this is because the BROFILER_CATEGORY call is done before the BrofilerCore library is loaded?

    Is there any way to ensure the library is loaded before any global member is initialized?

    opened by MatillaMartin 6
  • Not recording session

    Not recording session

    OptickApp.png Attachments: [OptickApp.png] Once I have the app running and then click start profiling session, optick begins to capture frames. Then when I want to stop, there is a red sqaure icon, but it says start profiling session still and not 'stop'.

    Then once I've clicked that and exited the app, optick is sat in this same place. Even if I save the session, close optick and reopen that session there is nothing there.

    I've tried recording a session a few times now, but I always get stuck here. Is there something I am missing?

    quick edit: This is when I have my project added to the Optick_vs2017 GUI solution and added a reference to the Optick c# project. I my project from that solution and then have a separate Optick application from 'optick-master\bin\vs2017\x64\Debug' that is what I start the profiling from.

    opened by GameDeva 5
  • Optick cant connect to my app

    Optick cant connect to my app

    I'm sure it's not a BUG/Issue but a user issue.

    However, I was not able to get the information from the documentation.,,

    I am trying to use Optick to profile my application running on OpenFramworks.

    I included the src files in my project. I went thru the ConsoleApp example.

    I added: OPTICK_SET_MEMORY_ALLOCATOR( [](size_t size) -> void* { return operator new(size); }, [](void* p) { operator delete(p); }, []() { /* Do some TLS initialization here if needed */ } ); To Main.

    I added: OPTICK_FRAME("MainThread"); before the ofApp runs.

    finally, I added some ` OPTICK_EVENT();' calles within my code.

    When I run Opcick and click on the "start profiling" button, the GUI displays "Connecting .... " with my computers IP. And that's it. What am I missing to have Optick "see" my app?

    opened by nirgivon 4
  • Width and Height must be non-negative

    Width and Height must be non-negative

    When I somehow capture empty frames, this error happens:

    Version 1.2.3

    ************** Exception Text ************** System.ArgumentException: Width and Height must be non-negative. at System.Windows.Size..ctor(Double width, Double height) at Profiler.DirectX.DynamicMesh.AddRect(Rect rect, Color color) at Profiler.ThreadView.DrawSelection(DirectXCanvas canvas) at Profiler.ThreadView.OnDraw(DirectXCanvas canvas, Layer layer) at Profiler.DirectX.DirectXCanvas.RenderCanvas_Paint(Object sender, PaintEventArgs e) at System.Windows.Forms.Control.OnPaint(PaintEventArgs e) at SharpDX.Windows.RenderControl.OnPaint(PaintEventArgs e) at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) at System.Windows.Forms.Control.WmPaint(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.UserControl.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    optick-issue

    opened by malytomas 4
  • fix kernel_logger_name with /permisive-

    fix kernel_logger_name with /permisive-

    Hi again, I apologize for the forgotten (LPSTR) cast hotfix that has sneaked into my previous PR :( Anyway, when compiling with /permisive-, which forces visual studio to be more conformant with c++ standard, it fails on assigning const pointer to non-const variable. This PR does a proper fix. There are also few fixed line endings. I hope that is ok.

    opened by malytomas 3
  • segfault with clang

    segfault with clang

    repro case: https://github.com/malytomas/optick-test-clang

    when compiling Optick and/or the application that uses Optick with clang++ on linux with debug symbols and enabled optimizations, the application crashes

    opened by malytomas 3
  • Make EventDescription's deletable

    Make EventDescription's deletable

    In my usecase I am profiling the script running inside a scriptVM. So the same function can belong to many different script files. Thus I can't make the EventDescription static per function. I solved that by just having one EventDescription per file but after a reset in game every script is recompiled and I want to clear all EventDescriptions instead of creating memory leaks everywhere.

    Maybe you have a better idea on how to solve this? I first wanted to just add a Event::Delete on https://github.com/bombomby/brofiler/pull/31/files#diff-71975803275f8f3cc69ffb081a77aad7R274 but I found out that each Description has an index corresponding to their position in the board (https://github.com/bombomby/brofiler/pull/31/files#diff-60b37754b374b6cbb51603dfd1148165R78) array which means I would have to change all indeces.

    Also may I ask why your code looks so old? No ranged for loops?

    opened by dedmen 3
  • Crash in ProfileServer.cpp: Server::Update() CRITICAL_SECTION(lock)

    Crash in ProfileServer.cpp: Server::Update() CRITICAL_SECTION(lock)

    Hi,

    I've got brofiler working fine with a trivial 32-bit application, but get a crash in a more complex program in the first call of Server::Update() in ProfilerServer.cpp with "Access violation writing location 0x00000014.".

    The crash happens in the CRITICAL_SECTION(lock) call, and it looks like the 'lock' object is not initialized (in fact it looks like the entire Server object is not initialized, everything is initialized to zero, and the Server::Server() constructor is never called:

    brofiler_1

    On the other hand, the constructor Core::Core() is called, and the CRITICAL_SECTION(lock) in Core::Update() works fine.

    In the simpler program which works, the Server object is initialized when Server::Update() is called (although a breakpoint in the constructor is also never triggered, so this is a bit strange...):

    brofiler_2

    Any idea what's going on there, and how to fix or workaround?

    Thanks! -Floh.

    opened by floooh 3
  • Fix file corruption when using storage upload

    Fix file corruption when using storage upload

    When using the "Report a bug" feature targeting a network storage, we were experiencing file corruption issues when loading back the saved capture:

    image

    image

    image

    When debugging the issue, I noticed that the files saved out manually using the Save button vs the file from the Report Bug button were different sizes:

    image

    I eventually found that this was caused by not calling Dispose on the GZipStream created by Capture.Create. Reading the documentation on GZipStream, it's not totally clear why this becomes necessary, but the issue is a solid repro without the Dispose and I have not been able to repro with it.

    image

    ~Before finding this issue, I also found that the Save button leads to TimeLine.Save/TimeLine.ForEachResponse which appears as if it could save out more data that may be missed in TaskTrackerViewModel.SetGroup. My fix is to introduce a new interface, ISavable. The FrameGroup now has a reference back to the TimeLine as an ISavable and this is used to save the capture if available. I didn't confirm this was a "real" issue, so I can drop this part of the change if desired. If nothing else, it ensures that the two methods of saving follow a more similar code path.~ Dropped with b6ae6f1

    opened by growlitheharpo 2
  • Exeptions when trying to add thread pool workers

    Exeptions when trying to add thread pool workers

    Just added 31 thread pool workers via RegisterThread/UnRegisterThread and my .opt are now broken This threads are being started from the other .lib if it matters

    image

    Подробная информация об использовании оперативной 
    (JIT) отладки вместо данного диалогового 
    окна содержится в конце этого сообщения.
    
    ************** Текст исключения **************
    SharpDX.SharpDXException: HRESULT: [0x80070057], Module: [General], ApiCode: [E_INVALIDARG/Invalid Arguments], Message: Параметр задан неверно.
    
       в SharpDX.Result.CheckError()
       в SharpDX.DXGI.SwapChain.ResizeBuffers(Int32 bufferCount, Int32 width, Int32 height, Format newFormat, SwapChainFlags swapChainFlags)
       в Profiler.DirectX.DirectXCanvas.OnResize() в D:\Projects\optick-ue5\gui\Profiler.DirectX\DirectXCanvas.xaml.cs:строка 194
       в System.Windows.Forms.Control.OnResize(EventArgs e)
       в System.Windows.Forms.UserControl.OnResize(EventArgs e)
       в System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
       в System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
       в System.Windows.Forms.Control.UpdateBounds()
       в System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
       в System.Windows.Forms.Control.WndProc(Message& m)
       в System.Windows.Forms.UserControl.WndProc(Message& m)
       в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    
    
    ************** Загруженные сборки **************
    mscorlib
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4515.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
    ----------------------------------------
    Optick
        Версия сборки: 1.4.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    PresentationFramework
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework/v4.0_4.0.0.0__31bf3856ad364e35/PresentationFramework.dll
    ----------------------------------------
    WindowsBase
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll
    ----------------------------------------
    System.Core
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4536.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    PresentationCore
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/PresentationCore/v4.0_4.0.0.0__31bf3856ad364e35/PresentationCore.dll
    ----------------------------------------
    System.Xaml
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xaml/v4.0_4.0.0.0__b77a5c561934e089/System.Xaml.dll
    ----------------------------------------
    System.Configuration
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4190.0 built by: NET48REL1LAST_B
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    MahApps.Metro
        Версия сборки: 1.6.5.1
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    PresentationFramework.Aero2
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework.Aero2/v4.0_4.0.0.0__31bf3856ad364e35/PresentationFramework.Aero2.dll
    ----------------------------------------
    Profiler.Controls
        Версия сборки: 1.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    PresentationFramework.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework.resources/v4.0_4.0.0.0_ru_31bf3856ad364e35/PresentationFramework.resources.dll
    ----------------------------------------
    System.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.resources.dll
    ----------------------------------------
    System.Xaml.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xaml.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Xaml.resources.dll
    ----------------------------------------
    Profiler.InfrastructureMvvm
        Версия сборки: 1.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    Autofac
        Версия сборки: 4.8.1.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    Anonymously Hosted DynamicMethods Assembly
        Версия сборки: 0.0.0.0
        Версия Win32: 4.8.4515.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/mscorlib/v4.0_4.0.0.0__b77a5c561934e089/mscorlib.dll
    ----------------------------------------
    ControlzEx
        Версия сборки: 3.0.2.4
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.Windows.Interactivity
        Версия сборки: 4.5.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.Management
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4435.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Management/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Management.dll
    ----------------------------------------
    mscorlib.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------
    Profiler.Data
        Версия сборки: 1.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.ComponentModel.DataAnnotations
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.ComponentModel.DataAnnotations/v4.0_4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll
    ----------------------------------------
    Microsoft.GeneratedCode
        Версия сборки: 1.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    Xceed.Wpf.AvalonDock
        Версия сборки: 3.5.2.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    WindowsFormsIntegration
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/WindowsFormsIntegration/v4.0_4.0.0.0__31bf3856ad364e35/WindowsFormsIntegration.dll
    ----------------------------------------
    Xceed.Wpf.AvalonDock.Themes.VS2013
        Версия сборки: 1.0.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    Profiler.DirectX
        Версия сборки: 1.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    PresentationFramework-SystemCore
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework-SystemCore/v4.0_4.0.0.0__b77a5c561934e089/PresentationFramework-SystemCore.dll
    ----------------------------------------
    System.Drawing
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4390.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    SharpDX.DXGI
        Версия сборки: 2.6.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    SharpDX
        Версия сборки: 2.6.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    SharpDX.Direct3D11
        Версия сборки: 2.6.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.Windows.Forms
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4550.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    SharpDX.D3DCompiler
        Версия сборки: 2.6.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    SharpDX.Direct2D1
        Версия сборки: 2.6.3.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    InteractiveDataDisplay.WPF
        Версия сборки: 1.1.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.Reactive
        Версия сборки: 4.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    Xceed.Wpf.AvalonDock.resources
        Версия сборки: 3.5.2.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    PresentationCore.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationCore.resources/v4.0_4.0.0.0_ru_31bf3856ad364e35/PresentationCore.resources.dll
    ----------------------------------------
    PresentationFramework-SystemXml
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework-SystemXml/v4.0_4.0.0.0__b77a5c561934e089/PresentationFramework-SystemXml.dll
    ----------------------------------------
    UIAutomationTypes
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/UIAutomationTypes/v4.0_4.0.0.0__31bf3856ad364e35/UIAutomationTypes.dll
    ----------------------------------------
    UIAutomationProvider
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/UIAutomationProvider/v4.0_4.0.0.0__31bf3856ad364e35/UIAutomationProvider.dll
    ----------------------------------------
    Newtonsoft.Json
        Версия сборки: 10.0.0.0
        Версия Win32: 1.4.0.0
        CodeBase: file:///C:/Users/%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0/Desktop/Optick.exe
    ----------------------------------------
    System.Numerics
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    Microsoft.CSharp
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.CSharp/v4.0_4.0.0.0__b03f5f7f11d50a3a/Microsoft.CSharp.dll
    ----------------------------------------
    System.Web
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4494.0 built by: NET48REL1LAST_B
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Web/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Web.dll
    ----------------------------------------
    System.Dynamic
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Dynamic/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll
    ----------------------------------------
    Microsoft.CSharp.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.CSharp.resources/v4.0_4.0.0.0_ru_b03f5f7f11d50a3a/Microsoft.CSharp.resources.dll
    ----------------------------------------
    System.Data
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4536.0 built by: NET48REL1LAST_C
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    PresentationFramework-SystemData
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4566.0
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework-SystemData/v4.0_4.0.0.0__b77a5c561934e089/PresentationFramework-SystemData.dll
    ----------------------------------------
    Accessibility
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Версия сборки: 4.0.0.0
        Версия Win32: 4.8.4084.0 built by: NET48REL1
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    
    ************** Оперативная отладка (JIT) **************
    Для подключения оперативной (JIT) отладки файл .config данного
    приложения или компьютера (machine.config) должен иметь
    значение jitDebugging, установленное в секции system.windows.forms.
    Приложение также должно быть скомпилировано с включенной
    отладкой.
    
    Например:
    
    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
    При включенной отладке JIT любое необрабатываемое исключение
    пересылается отладчику JIT, зарегистрированному на данном компьютере,
    вместо того чтобы обрабатываться данным диалоговым окном.
    
    
    
    
    opened by n0lavar 1
  • Add CodeQL workflow for GitHub code scanning

    Add CodeQL workflow for GitHub code scanning

    Hi bombomby/optick!

    This is a one-off automatically generated pull request from LGTM.com :robot:. You might have heard that we’ve integrated LGTM’s underlying CodeQL analysis engine natively into GitHub. The result is GitHub code scanning!

    With LGTM fully integrated into code scanning, we are focused on improving CodeQL within the native GitHub code scanning experience. In order to take advantage of current and future improvements to our analysis capabilities, we suggest you enable code scanning on your repository. Please take a look at our blog post for more information.

    This pull request enables code scanning by adding an auto-generated codeql.yml workflow file for GitHub Actions to your repository — take a look! We tested it before opening this pull request, so all should be working :heavy_check_mark:. In fact, you might already have seen some alerts appear on this pull request!

    Where needed and if possible, we’ve adjusted the configuration to the needs of your particular repository. But of course, you should feel free to tweak it further! Check this page for detailed documentation.

    Questions? Check out the FAQ below!

    FAQ

    Click here to expand the FAQ section

    How often will the code scanning analysis run?

    By default, code scanning will trigger a scan with the CodeQL engine on the following events:

    • On every pull request — to flag up potential security problems for you to investigate before merging a PR.
    • On every push to your default branch and other protected branches — this keeps the analysis results on your repository’s Security tab up to date.
    • Once a week at a fixed time — to make sure you benefit from the latest updated security analysis even when no code was committed or PRs were opened.

    What will this cost?

    Nothing! The CodeQL engine will run inside GitHub Actions, making use of your unlimited free compute minutes for public repositories.

    What types of problems does CodeQL find?

    The CodeQL engine that powers GitHub code scanning is the exact same engine that powers LGTM.com. The exact set of rules has been tweaked slightly, but you should see almost exactly the same types of alerts as you were used to on LGTM.com: we’ve enabled the security-and-quality query suite for you.

    How do I upgrade my CodeQL engine?

    No need! New versions of the CodeQL analysis are constantly deployed on GitHub.com; your repository will automatically benefit from the most recently released version.

    The analysis doesn’t seem to be working

    If you get an error in GitHub Actions that indicates that CodeQL wasn’t able to analyze your code, please follow the instructions here to debug the analysis.

    How do I disable LGTM.com?

    If you have LGTM’s automatic pull request analysis enabled, then you can follow these steps to disable the LGTM pull request analysis. You don’t actually need to remove your repository from LGTM.com; it will automatically be removed in the next few months as part of the deprecation of LGTM.com (more info here).

    Which source code hosting platforms does code scanning support?

    GitHub code scanning is deeply integrated within GitHub itself. If you’d like to scan source code that is hosted elsewhere, we suggest that you create a mirror of that code on GitHub.

    How do I know this PR is legitimate?

    This PR is filed by the official LGTM.com GitHub App, in line with the deprecation timeline that was announced on the official GitHub Blog. The proposed GitHub Action workflow uses the official open source GitHub CodeQL Action. If you have any other questions or concerns, please join the discussion here in the official GitHub community!

    I have another question / how do I get in touch?

    Please join the discussion here to ask further questions and send us suggestions!

    opened by lgtm-com[bot] 0
  • Support for ClangCL

    Support for ClangCL

    It can compile with clang-cl but do not because of some macro in optick.h :

    if defined(__clang__) || defined(__GNUC__)
    #	define OPTICK_GCC (1)
    #	if defined(__APPLE_CC__)
    #		define OPTICK_OSX (1)
    #	elif defined(__linux__)
    #		define OPTICK_LINUX (1)
    #	elif defined(__FreeBSD__)
    #		define OPTICK_FREEBSD (1)
    #	endif
    #elif defined(_MSC_VER)
    #	define OPTICK_MSVC (1)
    #	if defined(_DURANGO)
    #		define OPTICK_PC (0)
    #	else
    #		define OPTICK_PC (1)
    #endif
    #else
    #error Compiler not supported
    #endif
    

    When clang-cl is used, both __clang__ and _MSC_VER are defined, it's a really small fix, but i think it's worth doing it :D!

    opened by HITOA 0
  • Added option to build OptickCore as a static lib via CMake

    Added option to build OptickCore as a static lib via CMake

    Sometimes is is much more convenient to build and link Optick as a static library instead of shared. This patch adds a CMake option OPTICK_BUILD_STATIC_LIB that can be used to build OptickCore library as a static library. It is turned off by default to prevent any conflicts with existing project generation scripts.

    opened by Poseydon42 1
  • GUI crashing trying to open captures

    GUI crashing trying to open captures

    I get complaints about an empty stack, as well as "Can merge only events inside the same frame". If you have a chance, could you load this capture in v1.4.0.0 / somehow help me understand what I'm doing wrong? I don't know what can cause these issues so not sure where to look re. my own profiling.

    profile(2022-09-24.16-14-13).opt.zip

    opened by BrodyHiggerson 0
Releases(1.4.0.0)
Owner
Vadim Slyusarev
Vadim Slyusarev
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.9k Dec 5, 2022
A C math library targeted at games

Kazmath Kazmath is a simple 3D maths library written in C. It was initially coded for use in my book, Beginning OpenGL Game Programming - Second editi

Luke Benstead 504 Nov 23, 2022
3D games console based on RP2040 and iCE40 UP5k

PicoStation 3D This is an unfinished, untested project to develop a 3D games console based on an RP2040 microcontroller and an iCE40 UP5k FPGA. Quick

Luke Wren 37 Sep 12, 2022
A set of libraries and tools to make MSX games using the C programming language.

ubox MSX lib This is a set of libraries and tools to make MSX games using the C programming language. There are three main components: ubox: thin wrap

Juan J. Martínez 42 May 30, 2022
TIC-80 is a fantasy computer for making, playing and sharing tiny games.

TIC-80 is a fantasy computer for making, playing and sharing tiny games.

Vadim Grigoruk 3.7k Dec 3, 2022
Enfusion Artifical Intelligence for DayZ and future Bohemia Interactive games.

Enfusion AI Project (eAI) This mod adds headless player units under the control of a script on the server. Although the script is very rudimentary now

William Bowers 61 Nov 26, 2022
Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Storm Devs 675 Nov 30, 2022
null 5.2k Nov 26, 2022
Cute Framework (CF for short) is the cutest framework available for making 2D games in C/C++

Cute Framework (CF for short) is the cutest framework available for making 2D games in C/C++. CF comprises of different features, where the various features avoid inter-dependencies. In this way using CF is about picking and choosing which pieces are needed for your game

null 307 Nov 25, 2022
Modding (hacking) il2cpp games by classes, methods, fields names.

ByNameModding Modding (hacking) il2cpp games by classes, methods, fields names. Status: Ready to use Why did I do it 1. In order not to update the off

null 94 Nov 28, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

null 3k Nov 30, 2022
Insomniac games cache simulation tool plugin for UE4

Insomniac Games CacheSim plugin for UE4 This plugin for Unreal Engine 4 lets you use the Insomniac Games Cache Simulation tool to detect cache misses

Toni Rebollo Berná 29 Aug 27, 2022
Bounce is a 3D physics engine for games.

Bounce Welcome! Bounce is a 3D physics engine for games. Features Common Efficient data structures with no use of STL Fast memory allocators Built-in

Irlan Robson 72 Aug 3, 2022
Project DELTA - An open-source trainer built on the Void Engine for Toby Fox's games and their spin-offs.

Project DELTA v3 Project DELTA - An open-source, modular mod menu for Toby Fox's games and their spin-offs. Important note to Grossley: Yes, it is out

Archie 8 Oct 15, 2022
Speedrun plugin for Source engine games.

Features Automatic demo recording Accurate session timing Speedrun timer with complex custom rule system Tools for segmented and tool-assisted speedru

Portal 2 Speedrunning 61 Nov 20, 2022
A single-header C++ library for making simple 2D games

A single-header C++ library for making simple 2D games PLATFORM: Windows LANGUAGE: C++ ENVIRONMENT: Visual Studio Why? Learning C++ is often seen as d

Sumo Digital Academy 63 Nov 22, 2022
Add FidelityFX SuperResolution to SteamVR games

Modified OpenVR DLL with AMD FidelityFX SuperResolution Upscaler This modified openvr_api.dll allows you to apply FidelityFX SuperResolution upscaling

Holger Frydrych 1.5k Dec 3, 2022
Stream Raspberry Pi games to the GBA via the Link Cable

gba-remote-play video-only.mp4 This software streams games from a Raspberry Pi to a Game Boy Advance, through its Link Port. Video and audio are compr

Rodrigo Alfonso 358 Nov 19, 2022
Graphical improvements mod for Hyperdimension Neptunia Re;Birth1, Re;Birth2 and Re;Birth3 games.

Neptastic Mod Graphical improvements mod for Hyperdimension Neptunia Re;Birth1, Re;Birth2 and Re;Birth3 games. Features: Resolution upscaling and down

tlaik 35 Nov 7, 2022