Copy disabled (too large)
Download .txt
Showing preview only (15,937K chars total). Download the full file to get everything.
Repository: wolfpld/tracy
Branch: master
Commit: 87781fd75ce5
Files: 391
Total size: 16.2 MB
Directory structure:
gitextract_20zgvja4/
├── .clang-format
├── .clang-tidy
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ ├── emscripten.yml
│ ├── latex.yml
│ ├── linux.yml
│ ├── macos.yml
│ ├── release.yml
│ └── windows.yml
├── .gitignore
├── .mailmap
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── CMakeLists.txt
├── Config.cmake.in
├── LICENSE
├── NEWS
├── README.md
├── capture/
│ ├── CMakeLists.txt
│ └── src/
│ ├── CaptureOutput.cpp
│ ├── CaptureOutput.hpp
│ ├── capture.cpp
│ └── capturedaemon.cpp
├── cmake/
│ ├── CPM.cmake
│ ├── ECMFindModuleHelpers.cmake
│ ├── FindWaylandScanner.cmake
│ ├── config.cmake
│ ├── gl3w-extra-symbols.patch
│ ├── imgui-emscripten.patch
│ ├── imgui-loader.patch
│ ├── ppqsort-nodebug.patch
│ ├── server.cmake
│ ├── tidy-cmake.patch
│ ├── vendor.cmake
│ └── version.cmake
├── csvexport/
│ ├── CMakeLists.txt
│ └── src/
│ └── csvexport.cpp
├── dtl/
│ ├── Diff.hpp
│ ├── Diff3.hpp
│ ├── Lcs.hpp
│ ├── Sequence.hpp
│ ├── Ses.hpp
│ ├── dtl.hpp
│ ├── functors.hpp
│ └── variables.hpp
├── examples/
│ ├── OpenCLVectorAdd/
│ │ ├── CMakeLists.txt
│ │ └── OpenCLVectorAdd.cpp
│ ├── ToyPathTracer/
│ │ ├── .gitignore
│ │ ├── README
│ │ ├── Source/
│ │ │ ├── Config.h
│ │ │ ├── MathSimd.h
│ │ │ ├── Maths.cpp
│ │ │ ├── Maths.h
│ │ │ ├── Test.cpp
│ │ │ ├── Test.h
│ │ │ └── enkiTS/
│ │ │ ├── Atomics.h
│ │ │ ├── LockLessMultiReadPipe.h
│ │ │ ├── TaskScheduler.cpp
│ │ │ ├── TaskScheduler.h
│ │ │ ├── TaskScheduler_c.cpp
│ │ │ ├── TaskScheduler_c.h
│ │ │ └── Threads.h
│ │ ├── Windows/
│ │ │ ├── ComputeShader.hlsl
│ │ │ ├── PixelShader.hlsl
│ │ │ ├── TestCpu.sln
│ │ │ ├── TestCpu.vcxproj
│ │ │ ├── TestCpu.vcxproj.filters
│ │ │ ├── TestWin.cpp
│ │ │ └── VertexShader.hlsl
│ │ └── license.md
│ └── fibers.cpp
├── extra/
│ ├── color-hot.cpp
│ ├── color.cpp
│ ├── desktop/
│ │ ├── application-tracy.xml
│ │ └── tracy.desktop
│ ├── dxt1divtable.c
│ ├── dxt1table.c
│ ├── identify.cpp
│ ├── make-build.sh
│ ├── natvis.py
│ ├── rdotbl.c
│ ├── uarch/
│ │ ├── TracyMicroArchitecture.hpp
│ │ └── uarch.cpp
│ ├── update-meson-version.sh
│ ├── version.cpp
│ └── x11_colors.c
├── getopt/
│ ├── getopt.c
│ └── getopt.h
├── icon/
│ └── application-tracy.copying
├── import/
│ ├── CMakeLists.txt
│ └── src/
│ ├── import-chrome.cpp
│ └── import-fuchsia.cpp
├── manual/
│ ├── filter.lua
│ ├── latex2md.sh
│ ├── techdoc.tex
│ ├── tracy.bib
│ ├── tracy.md
│ └── tracy.tex
├── merge/
│ ├── CMakeLists.txt
│ └── src/
│ └── merge.cpp
├── meson.build
├── meson.options
├── profiler/
│ ├── CMakeLists.txt
│ ├── helpers/
│ │ ├── CMakeLists.txt
│ │ └── embed.cpp
│ ├── src/
│ │ ├── Backend.hpp
│ │ ├── BackendEmscripten.cpp
│ │ ├── BackendGlfw.cpp
│ │ ├── BackendWayland.cpp
│ │ ├── ConnectionHistory.cpp
│ │ ├── ConnectionHistory.hpp
│ │ ├── EmscriptenShim.hpp
│ │ ├── Filters.cpp
│ │ ├── Filters.hpp
│ │ ├── Fonts.cpp
│ │ ├── Fonts.hpp
│ │ ├── HttpRequest.cpp
│ │ ├── HttpRequest.hpp
│ │ ├── ImGuiContext.cpp
│ │ ├── ImGuiContext.hpp
│ │ ├── IsElevated.cpp
│ │ ├── IsElevated.hpp
│ │ ├── ResolvService.cpp
│ │ ├── ResolvService.hpp
│ │ ├── RunQueue.cpp
│ │ ├── RunQueue.hpp
│ │ ├── WindowPosition.cpp
│ │ ├── WindowPosition.hpp
│ │ ├── font/
│ │ │ └── Font Awesome 6 Free-Solid-900.otf
│ │ ├── icon.hpp
│ │ ├── ini.c
│ │ ├── ini.h
│ │ ├── llm/
│ │ │ ├── system.prompt.md
│ │ │ └── tools.json
│ │ ├── main.cpp
│ │ ├── profiler/
│ │ │ ├── IconsFontAwesome6.h
│ │ │ ├── TracyAchievementData.cpp
│ │ │ ├── TracyAchievements.cpp
│ │ │ ├── TracyAchievements.hpp
│ │ │ ├── TracyBadVersion.cpp
│ │ │ ├── TracyBadVersion.hpp
│ │ │ ├── TracyBuzzAnim.hpp
│ │ │ ├── TracyColor.cpp
│ │ │ ├── TracyColor.hpp
│ │ │ ├── TracyConfig.cpp
│ │ │ ├── TracyConfig.hpp
│ │ │ ├── TracyDecayValue.hpp
│ │ │ ├── TracyEmbed.cpp
│ │ │ ├── TracyEmbed.hpp
│ │ │ ├── TracyEventDebug.cpp
│ │ │ ├── TracyEventDebug.hpp
│ │ │ ├── TracyFileselector.cpp
│ │ │ ├── TracyFileselector.hpp
│ │ │ ├── TracyFilesystem.cpp
│ │ │ ├── TracyFilesystem.hpp
│ │ │ ├── TracyImGui.cpp
│ │ │ ├── TracyImGui.hpp
│ │ │ ├── TracyLlm.cpp
│ │ │ ├── TracyLlm.hpp
│ │ │ ├── TracyLlmApi.cpp
│ │ │ ├── TracyLlmApi.hpp
│ │ │ ├── TracyLlmChat.cpp
│ │ │ ├── TracyLlmChat.hpp
│ │ │ ├── TracyLlmEmbeddings.cpp
│ │ │ ├── TracyLlmEmbeddings.hpp
│ │ │ ├── TracyLlmTools.cpp
│ │ │ ├── TracyLlmTools.hpp
│ │ │ ├── TracyLockHelpers.hpp
│ │ │ ├── TracyManualData.cpp
│ │ │ ├── TracyManualData.hpp
│ │ │ ├── TracyMarkdown.cpp
│ │ │ ├── TracyMarkdown.hpp
│ │ │ ├── TracyMicroArchitecture.cpp
│ │ │ ├── TracyMicroArchitecture.hpp
│ │ │ ├── TracyMouse.cpp
│ │ │ ├── TracyMouse.hpp
│ │ │ ├── TracyProtoHistory.cpp
│ │ │ ├── TracyProtoHistory.hpp
│ │ │ ├── TracySourceContents.cpp
│ │ │ ├── TracySourceContents.hpp
│ │ │ ├── TracySourceTokenizer.cpp
│ │ │ ├── TracySourceTokenizer.hpp
│ │ │ ├── TracySourceView.cpp
│ │ │ ├── TracySourceView.hpp
│ │ │ ├── TracyStorage.cpp
│ │ │ ├── TracyStorage.hpp
│ │ │ ├── TracyTexture.cpp
│ │ │ ├── TracyTexture.hpp
│ │ │ ├── TracyTimelineContext.hpp
│ │ │ ├── TracyTimelineController.cpp
│ │ │ ├── TracyTimelineController.hpp
│ │ │ ├── TracyTimelineDraw.hpp
│ │ │ ├── TracyTimelineItem.cpp
│ │ │ ├── TracyTimelineItem.hpp
│ │ │ ├── TracyTimelineItemCpuData.cpp
│ │ │ ├── TracyTimelineItemCpuData.hpp
│ │ │ ├── TracyTimelineItemGpu.cpp
│ │ │ ├── TracyTimelineItemGpu.hpp
│ │ │ ├── TracyTimelineItemPlot.cpp
│ │ │ ├── TracyTimelineItemPlot.hpp
│ │ │ ├── TracyTimelineItemThread.cpp
│ │ │ ├── TracyTimelineItemThread.hpp
│ │ │ ├── TracyUserData.cpp
│ │ │ ├── TracyUserData.hpp
│ │ │ ├── TracyUtility.cpp
│ │ │ ├── TracyUtility.hpp
│ │ │ ├── TracyView.cpp
│ │ │ ├── TracyView.hpp
│ │ │ ├── TracyViewData.hpp
│ │ │ ├── TracyView_Annotations.cpp
│ │ │ ├── TracyView_Callstack.cpp
│ │ │ ├── TracyView_Compare.cpp
│ │ │ ├── TracyView_ConnectionState.cpp
│ │ │ ├── TracyView_ContextSwitch.cpp
│ │ │ ├── TracyView_CpuData.cpp
│ │ │ ├── TracyView_FindZone.cpp
│ │ │ ├── TracyView_FlameGraph.cpp
│ │ │ ├── TracyView_FrameOverview.cpp
│ │ │ ├── TracyView_FrameTimeline.cpp
│ │ │ ├── TracyView_FrameTree.cpp
│ │ │ ├── TracyView_GpuTimeline.cpp
│ │ │ ├── TracyView_Locks.cpp
│ │ │ ├── TracyView_Manual.cpp
│ │ │ ├── TracyView_Memory.cpp
│ │ │ ├── TracyView_Messages.cpp
│ │ │ ├── TracyView_Navigation.cpp
│ │ │ ├── TracyView_NotificationArea.cpp
│ │ │ ├── TracyView_Options.cpp
│ │ │ ├── TracyView_Playback.cpp
│ │ │ ├── TracyView_Plots.cpp
│ │ │ ├── TracyView_Ranges.cpp
│ │ │ ├── TracyView_Samples.cpp
│ │ │ ├── TracyView_Statistics.cpp
│ │ │ ├── TracyView_Timeline.cpp
│ │ │ ├── TracyView_TraceInfo.cpp
│ │ │ ├── TracyView_Utility.cpp
│ │ │ ├── TracyView_ZoneInfo.cpp
│ │ │ ├── TracyView_ZoneTimeline.cpp
│ │ │ ├── TracyWeb.cpp
│ │ │ └── TracyWeb.hpp
│ │ ├── stb_image.h
│ │ ├── stb_image_resize.h
│ │ ├── winmain.cpp
│ │ ├── winmainArchDiscovery.cpp
│ │ ├── zigzag01.hpp
│ │ ├── zigzag02.hpp
│ │ ├── zigzag04.hpp
│ │ ├── zigzag08.hpp
│ │ ├── zigzag16.hpp
│ │ └── zigzag32.hpp
│ ├── wasm/
│ │ ├── httpd.py
│ │ └── index.html
│ └── win32/
│ ├── Tracy.manifest
│ └── Tracy.rc
├── public/
│ ├── TracyClient.F90
│ ├── TracyClient.cpp
│ ├── client/
│ │ ├── TracyAlloc.cpp
│ │ ├── TracyArmCpuTable.hpp
│ │ ├── TracyCallstack.cpp
│ │ ├── TracyCallstack.h
│ │ ├── TracyCallstack.hpp
│ │ ├── TracyCpuid.hpp
│ │ ├── TracyDebug.hpp
│ │ ├── TracyDxt1.cpp
│ │ ├── TracyDxt1.hpp
│ │ ├── TracyFastVector.hpp
│ │ ├── TracyKCore.cpp
│ │ ├── TracyKCore.hpp
│ │ ├── TracyLock.hpp
│ │ ├── TracyOverride.cpp
│ │ ├── TracyProfiler.cpp
│ │ ├── TracyProfiler.hpp
│ │ ├── TracyRingBuffer.hpp
│ │ ├── TracyRocprof.cpp
│ │ ├── TracyScoped.hpp
│ │ ├── TracyStringHelpers.hpp
│ │ ├── TracySysPower.cpp
│ │ ├── TracySysPower.hpp
│ │ ├── TracySysTime.cpp
│ │ ├── TracySysTime.hpp
│ │ ├── TracySysTrace.cpp
│ │ ├── TracySysTrace.hpp
│ │ ├── TracyThread.hpp
│ │ ├── tracy_SPSCQueue.h
│ │ ├── tracy_concurrentqueue.h
│ │ ├── tracy_rpmalloc.cpp
│ │ ├── tracy_rpmalloc.hpp
│ │ └── windows/
│ │ └── TracyETW.cpp
│ ├── common/
│ │ ├── TracyAlign.hpp
│ │ ├── TracyAlloc.hpp
│ │ ├── TracyApi.h
│ │ ├── TracyColor.hpp
│ │ ├── TracyForceInline.hpp
│ │ ├── TracyMutex.hpp
│ │ ├── TracyProtocol.hpp
│ │ ├── TracyQueue.hpp
│ │ ├── TracySocket.cpp
│ │ ├── TracySocket.hpp
│ │ ├── TracyStackFrames.cpp
│ │ ├── TracyStackFrames.hpp
│ │ ├── TracySystem.cpp
│ │ ├── TracySystem.hpp
│ │ ├── TracyTaggedUserlandAddress.hpp
│ │ ├── TracyVersion.hpp
│ │ ├── TracyWinFamily.hpp
│ │ ├── TracyYield.hpp
│ │ ├── tracy_lz4.cpp
│ │ ├── tracy_lz4.hpp
│ │ ├── tracy_lz4hc.cpp
│ │ └── tracy_lz4hc.hpp
│ ├── libbacktrace/
│ │ ├── LICENSE
│ │ ├── alloc.cpp
│ │ ├── backtrace.hpp
│ │ ├── config.h
│ │ ├── dwarf.cpp
│ │ ├── elf.cpp
│ │ ├── fileline.cpp
│ │ ├── filenames.hpp
│ │ ├── internal.hpp
│ │ ├── macho.cpp
│ │ ├── mmapio.cpp
│ │ ├── posix.cpp
│ │ ├── sort.cpp
│ │ └── state.cpp
│ └── tracy/
│ ├── Tracy.hpp
│ ├── TracyC.h
│ ├── TracyCUDA.hpp
│ ├── TracyD3D11.hpp
│ ├── TracyD3D12.hpp
│ ├── TracyLua.hpp
│ ├── TracyMetal.hmm
│ ├── TracyOpenCL.hpp
│ ├── TracyOpenGL.hpp
│ └── TracyVulkan.hpp
├── python/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── bindings/
│ │ ├── Memory.hpp
│ │ ├── Module.cpp
│ │ ├── NameBuffer.hpp
│ │ └── ScopedZone.hpp
│ ├── pyproject.toml
│ └── tracy_client/
│ ├── TracyClientBindings.pyi
│ ├── __init__.py
│ ├── py.typed
│ ├── scoped.py
│ └── tracy.py
├── server/
│ ├── TracyBroadcast.cpp
│ ├── TracyBroadcast.hpp
│ ├── TracyCharUtil.hpp
│ ├── TracyEvent.hpp
│ ├── TracyFileHeader.hpp
│ ├── TracyFileMeta.hpp
│ ├── TracyFileRead.hpp
│ ├── TracyFileWrite.hpp
│ ├── TracyMemory.cpp
│ ├── TracyMemory.hpp
│ ├── TracyMmap.cpp
│ ├── TracyMmap.hpp
│ ├── TracyPopcnt.hpp
│ ├── TracyPrint.cpp
│ ├── TracyPrint.hpp
│ ├── TracyShortPtr.hpp
│ ├── TracySlab.hpp
│ ├── TracySort.hpp
│ ├── TracySortedVector.hpp
│ ├── TracyStringDiscovery.hpp
│ ├── TracySysUtil.cpp
│ ├── TracySysUtil.hpp
│ ├── TracyTaskDispatch.cpp
│ ├── TracyTaskDispatch.hpp
│ ├── TracyTextureCompression.cpp
│ ├── TracyTextureCompression.hpp
│ ├── TracyThreadCompress.cpp
│ ├── TracyThreadCompress.hpp
│ ├── TracyVarArray.hpp
│ ├── TracyVector.hpp
│ ├── TracyWorker.cpp
│ ├── TracyWorker.hpp
│ ├── tracy_pdqsort.h
│ ├── tracy_robin_hood.h
│ └── tracy_xxhash.h
├── test/
│ ├── CMakeLists.txt
│ ├── stb_image.h
│ └── test.cpp
└── update/
├── CMakeLists.txt
└── src/
├── OfflineSymbolResolver.cpp
├── OfflineSymbolResolver.h
├── OfflineSymbolResolverAddr2Line.cpp
├── OfflineSymbolResolverDbgHelper.cpp
└── update.cpp
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
# Empirical format config, based on observed style guide
# Use this only as an help to fit the surrounding code style - don't reformat whole files at once
---
BasedOnStyle: Microsoft
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortLoopsOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
# AllowShortEnumsOnASingleLine: true # Broken for some reason, even in last versions of clang-format... So don't use it or it may change formating in the future.
AllowShortLambdasOnASingleLine: All
BreakConstructorInitializers: BeforeComma
BreakStringLiterals: false
SpaceAfterTemplateKeyword: false
AlwaysBreakTemplateDeclarations: Yes
# Allman seems to break lambda formatting for some reason with `ColumnLimit: 0`. See https://github.com/llvm/llvm-project/issues/50275
# Even though it is supposed to have been fixed, issue still remains in 20.1.8. (and is very much present in 18.x which is the one shipped by VS2022 and VSCord clangd as of 2025-07-27)
# Things work fine with `BasedOnStyle: Microsoft` so use that instead
#BreakBeforeBraces: Allman
ColumnLimit: 0
# We'd like to use LeftWithLastLine but it's only available in >=19.x
#AlignEscapedNewlines: LeftWithLastLine
AlignEscapedNewlines: Left
FixNamespaceComments: false
IndentPPDirectives: AfterHash
IndentAccessModifiers: false
AccessModifierOffset: -4
LambdaBodyIndentation: OuterScope
PPIndentWidth: 2
IndentWidth: 4
PointerAlignment: Left
SpaceBeforeParens: Never
SpacesInParentheses: true
TabWidth: 4
AlignTrailingComments:
Kind: Leave
================================================
FILE: .clang-tidy
================================================
---
Checks:
'
clang-diagnostic-*,
clang-analyzer-*,
bugprone-*,
google-*,
misc-*,
modernize-*,
performance-*,
readability-*,
-bugprone-easily-swappable-parameters,
-bugprone-implicit-widening-of-multiplication-result,
-bugprone-narrowing-conversions,
-bugprone-reserved-identifier,
-google-readability-braces-around-statements,
-google-readability-casting,
-google-readability-function-size,
-google-readability-todo,
-google-readability-namespace-comments,
-misc-confusable-identifiers,
-misc-no-recursion,
-misc-use-internal-linkage,
-modernize-avoid-c-arrays,
-modernize-deprecated-headers,
-modernize-use-default-member-init,
-modernize-use-designated-initializers,
-modernize-use-trailing-return-type,
-performance-no-int-to-ptr,
-readability-braces-around-statements,
-readability-else-after-return,
-readability-function-cognitive-complexity,
-readability-function-size,
-readability-identifier-length,
-readability-implicit-bool-conversion,
-readability-isolate-declaration,
-readability-magic-numbers,
-readability-math-missing-parentheses,
-readability-qualified-auto,
-readability-uppercase-literal-suffix
'
WarningsAsErrors: ''
HeaderFilterRegex: ''
FormatStyle: none
CheckOptions:
llvm-else-after-return.WarnOnConditionVariables: 'false'
modernize-loop-convert.MinConfidence: reasonable
modernize-replace-auto-ptr.IncludeStyle: llvm
modernize-pass-by-value.IncludeStyle: llvm
google-readability-namespace-comments.ShortNamespaceLines: '10'
google-readability-namespace-comments.SpacesBeforeComments: '2'
cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic: 'true'
google-readability-braces-around-statements.ShortStatementLines: '1'
cert-err33-c.CheckedFunctions: '::aligned_alloc;::asctime_s;::at_quick_exit;::atexit;::bsearch;::bsearch_s;::btowc;::c16rtomb;::c32rtomb;::calloc;::clock;::cnd_broadcast;::cnd_init;::cnd_signal;::cnd_timedwait;::cnd_wait;::ctime_s;::fclose;::fflush;::fgetc;::fgetpos;::fgets;::fgetwc;::fopen;::fopen_s;::fprintf;::fprintf_s;::fputc;::fputs;::fputwc;::fputws;::fread;::freopen;::freopen_s;::fscanf;::fscanf_s;::fseek;::fsetpos;::ftell;::fwprintf;::fwprintf_s;::fwrite;::fwscanf;::fwscanf_s;::getc;::getchar;::getenv;::getenv_s;::gets_s;::getwc;::getwchar;::gmtime;::gmtime_s;::localtime;::localtime_s;::malloc;::mbrtoc16;::mbrtoc32;::mbsrtowcs;::mbsrtowcs_s;::mbstowcs;::mbstowcs_s;::memchr;::mktime;::mtx_init;::mtx_lock;::mtx_timedlock;::mtx_trylock;::mtx_unlock;::printf_s;::putc;::putwc;::raise;::realloc;::remove;::rename;::scanf;::scanf_s;::setlocale;::setvbuf;::signal;::snprintf;::snprintf_s;::sprintf;::sprintf_s;::sscanf;::sscanf_s;::strchr;::strerror_s;::strftime;::strpbrk;::strrchr;::strstr;::strtod;::strtof;::strtoimax;::strtok;::strtok_s;::strtol;::strtold;::strtoll;::strtoul;::strtoull;::strtoumax;::strxfrm;::swprintf;::swprintf_s;::swscanf;::swscanf_s;::thrd_create;::thrd_detach;::thrd_join;::thrd_sleep;::time;::timespec_get;::tmpfile;::tmpfile_s;::tmpnam;::tmpnam_s;::tss_create;::tss_get;::tss_set;::ungetc;::ungetwc;::vfprintf;::vfprintf_s;::vfscanf;::vfscanf_s;::vfwprintf;::vfwprintf_s;::vfwscanf;::vfwscanf_s;::vprintf_s;::vscanf;::vscanf_s;::vsnprintf;::vsnprintf_s;::vsprintf;::vsprintf_s;::vsscanf;::vsscanf_s;::vswprintf;::vswprintf_s;::vswscanf;::vswscanf_s;::vwprintf_s;::vwscanf;::vwscanf_s;::wcrtomb;::wcschr;::wcsftime;::wcspbrk;::wcsrchr;::wcsrtombs;::wcsrtombs_s;::wcsstr;::wcstod;::wcstof;::wcstoimax;::wcstok;::wcstok_s;::wcstol;::wcstold;::wcstoll;::wcstombs;::wcstombs_s;::wcstoul;::wcstoull;::wcstoumax;::wcsxfrm;::wctob;::wctrans;::wctype;::wmemchr;::wprintf_s;::wscanf;::wscanf_s;'
modernize-loop-convert.MaxCopySize: '16'
cert-dcl16-c.NewSuffixes: 'L;LL;LU;LLU'
cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField: 'false'
cert-str34-c.DiagnoseSignedUnsignedCharComparisons: 'false'
modernize-use-nullptr.NullMacros: 'NULL'
llvm-qualified-auto.AddConstToQualified: 'false'
modernize-loop-convert.NamingStyle: CamelCase
llvm-else-after-return.WarnOnUnfixable: 'false'
google-readability-function-size.StatementThreshold: '800'
...
================================================
FILE: .github/FUNDING.yml
================================================
github: wolfpld
================================================
FILE: .github/workflows/emscripten.yml
================================================
name: emscripten
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache
jobs:
build:
runs-on: ubuntu-latest
container: archlinux:base-devel
steps:
- name: Install dependencies
run: pacman -Syu --noconfirm && pacman -S --noconfirm --needed cmake git unzip python ninja zstd
- name: Setup emscripten
uses: mymindstorm/setup-emsdk@v14
with:
version: 4.0.10
- name: Trust git repo
run: git config --global --add safe.directory '*'
- uses: actions/checkout@v4
- name: Cache CPM packages
uses: actions/cache@v4
with:
path: ${{ env.CPM_SOURCE_CACHE }}
key: ${{ runner.os }}-cpm-${{ hashFiles('**/vendor.cmake', '**/CMakeLists.txt') }}
restore-keys: ${{ runner.os }}-cpm-
- name: Profiler GUI
run: |
cmake -G Ninja -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=MinSizeRel -DGIT_REV=${{ github.sha }} -DCMAKE_TOOLCHAIN_FILE=${{env.EMSDK}}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
cmake --build profiler/build --parallel
- name: Compress artifacts
run: |
zstd -18 profiler/build/tracy-profiler.js profiler/build/tracy-profiler.wasm
gzip -9 profiler/build/tracy-profiler.js profiler/build/tracy-profiler.wasm
- name: Find Artifacts
id: find_artifacts
run: |
mkdir -p bin
cp profiler/build/index.html bin
cp profiler/build/favicon.svg bin
cp profiler/build/tracy-profiler.data bin
cp profiler/build/tracy-profiler.js.gz bin
cp profiler/build/tracy-profiler.js.zst bin
cp profiler/build/tracy-profiler.wasm.gz bin
cp profiler/build/tracy-profiler.wasm.zst bin
- uses: actions/upload-artifact@v4
with:
name: emscripten
path: bin
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/download-artifact@v4
- uses: wlixcc/SFTP-Deploy-Action@v1.2.4
with:
username: ${{ secrets.USERNAME }}
server: ${{ secrets.SERVER }}
port: ${{ secrets.PORT }}
ssh_private_key: ${{ secrets.PRIVATE_KEY }}
local_path: './emscripten/*'
remote_path: ${{ secrets.REMOTE_PATH }}
sftp_only: true
================================================
FILE: .github/workflows/latex.yml
================================================
name: Manual
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
workflow_call:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Compile LaTeX
uses: xu-cheng/latex-action@v3
with:
working_directory: manual
root_file: tracy.tex
- uses: actions/upload-artifact@v4
with:
name: manual
path: manual/tracy.pdf
================================================
FILE: .github/workflows/linux.yml
================================================
name: linux
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache
jobs:
build:
runs-on: ubuntu-latest
container: archlinux:base-devel
steps:
- name: Install dependencies
run: pacman -Syu --noconfirm && pacman -S --noconfirm --needed freetype2 debuginfod wayland dbus libxkbcommon libglvnd meson cmake git wayland-protocols nodejs lua
- name: Trust git repo
run: git config --global --add safe.directory '*'
- uses: actions/checkout@v4
- name: Cache CPM packages
uses: actions/cache@v4
with:
path: ${{ env.CPM_SOURCE_CACHE }}
key: ${{ runner.os }}-cpm-${{ hashFiles('**/vendor.cmake', '**/CMakeLists.txt') }}
restore-keys: ${{ runner.os }}-cpm-
- name: Profiler GUI
run: |
cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release -DGIT_REV=${{ github.sha }}
cmake --build profiler/build --parallel
- name: Update utility
run: |
cmake -B update/build -S update -DCMAKE_BUILD_TYPE=Release
cmake --build update/build --parallel
- name: Capture utility
run: |
cmake -B capture/build -S capture -DCMAKE_BUILD_TYPE=Release
cmake --build capture/build --parallel
- name: Csvexport utility
run: |
cmake -B csvexport/build -S csvexport -DCMAKE_BUILD_TYPE=Release
cmake --build csvexport/build --parallel
- name: Import utilities
run: |
cmake -B import/build -S import -DCMAKE_BUILD_TYPE=Release
cmake --build import/build --parallel
- name: Library
run: meson setup -Dprefix=$GITHUB_WORKSPACE/bin/lib build && meson compile -C build && meson install -C build
- name: Test application
run: |
# test compilation with different flags
# we clean the build folder to reset cached variables between runs
cmake -B test/build -S test -DCMAKE_BUILD_TYPE=Release
cmake --build test/build --parallel
rm -rf test/build
# same with TRACY_ON_DEMAND
cmake -B test/build -S test -DCMAKE_BUILD_TYPE=Release -DTRACY_ON_DEMAND=ON .
cmake --build test/build --parallel
rm -rf test/build
# same with TRACY_DELAYED_INIT TRACY_MANUAL_LIFETIME
cmake -B test/build -S test -DCMAKE_BUILD_TYPE=Release -DTRACY_DELAYED_INIT=ON -DTRACY_MANUAL_LIFETIME=ON .
cmake --build test/build --parallel
rm -rf test/build
# same with TRACY_DEMANGLE
cmake -B test/build -S test -DCMAKE_BUILD_TYPE=Release -DTRACY_DEMANGLE=ON .
cmake --build test/build --parallel
rm -rf test/build
- name: Find Artifacts
id: find_artifacts
run: |
mkdir -p bin
cp profiler/build/tracy-profiler bin
cp update/build/tracy-update bin
cp capture/build/tracy-capture bin
cp csvexport/build/tracy-csvexport bin
cp import/build/tracy-import-chrome bin
cp import/build/tracy-import-fuchsia bin
strip bin/tracy-*
- uses: actions/upload-artifact@v4
with:
name: arch-linux
path: bin
================================================
FILE: .github/workflows/macos.yml
================================================
name: macos
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache
jobs:
build:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
- name: Cache CPM packages
uses: actions/cache@v4
with:
path: ${{ env.CPM_SOURCE_CACHE }}
key: ${{ runner.os }}-cpm-${{ hashFiles('**/vendor.cmake', '**/CMakeLists.txt') }}
restore-keys: ${{ runner.os }}-cpm-
- name: Install dependencies
run: brew install pkg-config glfw meson
- name: Trust git repo
run: git config --global --add safe.directory '*'
- name: Build profiler
run: |
cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release -DGIT_REV=${{ github.sha }}
cmake --build profiler/build --parallel --config Release
- name: Build update
run: |
cmake -B update/build -S update -DCMAKE_BUILD_TYPE=Release
cmake --build update/build --parallel --config Release
- name: Build capture
run: |
cmake -B capture/build -S capture -DCMAKE_BUILD_TYPE=Release
cmake --build capture/build --parallel --config Release
- name: Build csvexport
run: |
cmake -B csvexport/build -S csvexport -DCMAKE_BUILD_TYPE=Release
cmake --build csvexport/build --parallel --config Release
- name: Build import
run: |
cmake -B import/build -S import -DCMAKE_BUILD_TYPE=Release
cmake --build import/build --parallel --config Release
- name: Build library
run: meson setup -Dprefix=$GITHUB_WORKSPACE/bin/lib build && meson compile -C build && meson install -C build
- name: Package artifacts
run: |
mkdir -p bin
cp profiler/build/tracy-profiler bin
cp update/build/tracy-update bin
cp capture/build/tracy-capture bin
cp csvexport/build/tracy-csvexport bin
cp import/build/tracy-import-chrome bin
cp import/build/tracy-import-fuchsia bin
- uses: actions/upload-artifact@v4
with:
name: macos
path: bin
================================================
FILE: .github/workflows/release.yml
================================================
name: release
on:
release:
types: [published]
jobs:
build-windows:
uses: ./.github/workflows/windows.yml
build-manual:
uses: ./.github/workflows/latex.yml
attach-to-release:
needs: [build-windows, build-manual]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
- name: Create versioned zip
run: |
VERSION="${{ github.event.release.tag_name }}"
VERSION_NO_V="${VERSION#v}"
cd windows
zip -r ../windows-$VERSION_NO_V.zip .
- uses: softprops/action-gh-release@v2
with:
files: |
windows-*.zip
manual/tracy.pdf
================================================
FILE: .github/workflows/windows.yml
================================================
name: windows
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
workflow_call:
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Cache CPM packages
uses: actions/cache@v4
with:
path: ${{ env.CPM_SOURCE_CACHE }}
key: ${{ runner.os }}-cpm-${{ hashFiles('**/vendor.cmake', '**/CMakeLists.txt') }}
restore-keys: ${{ runner.os }}-cpm-
- uses: microsoft/setup-msbuild@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
- run: pip install meson ninja
- name: Trust git repo
run: git config --global --add safe.directory '*'
- name: Build profiler
run: |
cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release -DGIT_REV=${{ github.sha }}
cmake --build profiler/build --parallel --config Release
- name: Build update
run: |
cmake -B update/build -S update -DCMAKE_BUILD_TYPE=Release
cmake --build update/build --parallel --config Release
- name: Build capture
run: |
cmake -B capture/build -S capture -DCMAKE_BUILD_TYPE=Release
cmake --build capture/build --parallel --config Release
- name: Build csvexport
run: |
cmake -B csvexport/build -S csvexport -DCMAKE_BUILD_TYPE=Release
cmake --build csvexport/build --parallel --config Release
- name: Build import
run: |
cmake -B import/build -S import -DCMAKE_BUILD_TYPE=Release
cmake --build import/build --parallel --config Release
- name: Package artifacts
run: |
mkdir bin
copy profiler\build\Release\tracy-profiler.exe bin
copy update\build\Release\tracy-update.exe bin
copy capture\build\Release\tracy-capture.exe bin
copy csvexport\build\Release\tracy-csvexport.exe bin
copy import\build\Release\tracy-import-chrome.exe bin
copy import\build\Release\tracy-import-fuchsia.exe bin
- uses: actions/upload-artifact@v4
with:
name: windows
path: bin
================================================
FILE: .gitignore
================================================
.vs
_build
_compiler
tools/*
*.d
*.o
*.so
*.swp
*.obj
imgui.ini
test/tracy_test
test/tracy_test.exe
*/build/unix/*-*
manual/t*.aux
manual/t*.log
manual/t*.out
manual/t*.pdf
manual/t*.synctex.gz
manual/t*.toc
manual/t*.bbl
manual/t*.blg
manual/t*.fdb_latexmk
manual/t*.fls
profiler/build/win32/packages
profiler/build/win32/Tracy.aps
.deps/
.dirstamp
/_*/**
/**/__pycache__/**
extra/vswhere.exe
extra/tracy-build
.cache
compile_commands.json
profiler/build/wasm/Tracy-release.*
profiler/build/wasm/Tracy-debug.*
profiler/build/wasm/embed.tracy
examples/ToyPathTracer/Windows/TestCpu
examples/ToyPathTracer/Windows/x64
*.user
================================================
FILE: .mailmap
================================================
<wolf@nereid.pl> <wolf.pld@gmail.com>
<wolf@nereid.pl> <bartosz.taudul@game-lion.com>
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"llvm-vs-code-extensions.vscode-clangd",
"vadimcn.vscode-lldb",
"ms-vscode.cmake-tools"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "lldb",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"cmake.sourceDirectory": [
"${workspaceFolder}/profiler",
"${workspaceFolder}/capture",
"${workspaceFolder}/csvexport",
"${workspaceFolder}/import",
"${workspaceFolder}/merge",
"${workspaceFolder}/update",
"${workspaceFolder}/test",
"${workspaceFolder}",
],
"cmake.buildDirectory": "${sourceDirectory}/build",
"cmake.autoSelectActiveFolder": false,
"cmake.options.advanced": {
"folder": { "statusBarVisibility": "visible" },
"variant": { "statusBarVisibility": "compact" }
},
"cmake.copyCompileCommands": "${workspaceFolder}/compile_commands.json",
"lldb.launch.initCommands": ["command script import ${workspaceRoot}/extra/natvis.py"],
}
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.10)
# Run version helper script
include(cmake/version.cmake)
project(Tracy LANGUAGES CXX VERSION ${TRACY_VERSION_STRING})
file(GENERATE OUTPUT .gitignore CONTENT "*")
if(${BUILD_SHARED_LIBS})
set(DEFAULT_STATIC OFF)
else()
set(DEFAULT_STATIC ON)
endif()
option(TRACY_STATIC "Whether to build Tracy as a static library" ${DEFAULT_STATIC})
option(TRACY_Fortran "Build Fortran bindings" OFF)
option(TRACY_LTO "Enable Link-Time optimization" OFF)
if(TRACY_Fortran)
enable_language(Fortran)
set(CMAKE_Fortran_VERSION 2003)
endif()
if(TRACY_LTO OR CMAKE_INTERPROCEDURAL_OPTIMIZATION)
include(CheckIPOSupported)
check_ipo_supported(RESULT LTO_SUPPORTED)
if(NOT LTO_SUPPORTED)
message(WARNING "LTO is not supported!")
endif()
else()
set(LTO_SUPPORTED OFF)
endif()
find_package(Threads REQUIRED)
find_package(rocprofiler-sdk PATHS "/opt/rocm/lib/cmake")
set(TRACY_PUBLIC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/public)
if(LTO_SUPPORTED)
set(TRACY_VISIBILITY "OBJECT")
elseif(TRACY_STATIC)
set(TRACY_VISIBILITY "STATIC")
else()
set(TRACY_VISIBILITY "SHARED")
endif()
add_library(TracyClient ${TRACY_VISIBILITY} "${TRACY_PUBLIC_DIR}/TracyClient.cpp")
target_compile_features(TracyClient PUBLIC cxx_std_11)
set_target_properties(TracyClient PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${LTO_SUPPORTED})
target_include_directories(TracyClient SYSTEM PUBLIC
$<BUILD_INTERFACE:${TRACY_PUBLIC_DIR}>
$<INSTALL_INTERFACE:include/tracy>)
target_link_libraries(
TracyClient
PUBLIC
Threads::Threads
${CMAKE_DL_LIBS}
)
if(rocprofiler-sdk_FOUND)
target_compile_definitions(TracyClient PUBLIC TRACY_ROCPROF)
target_link_libraries(TracyClient PUBLIC rocprofiler-sdk::rocprofiler-sdk)
endif()
if(TRACY_Fortran)
add_library(TracyClientF90 ${TRACY_VISIBILITY} "${TRACY_PUBLIC_DIR}/TracyClient.F90")
target_include_directories(TracyClientF90 PUBLIC
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
$<INSTALL_INTERFACE:include/tracy>)
target_link_libraries(
TracyClientF90
PUBLIC
TracyClient
)
set_target_properties(TracyClientF90 PROPERTIES Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}
INTERPROCEDURAL_OPTIMIZATION ${LTO_SUPPORTED})
endif()
# Public dependency on some libraries required when using Mingw
if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU|Clang")
target_link_libraries(TracyClient PUBLIC ws2_32 dbghelp secur32)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
find_library(EXECINFO_LIBRARY NAMES execinfo REQUIRED)
target_link_libraries(TracyClient PUBLIC ${EXECINFO_LIBRARY})
endif()
if(TRACY_LIBUNWIND_BACKTRACE)
include(FindPkgConfig)
pkg_check_modules(unwind REQUIRED libunwind)
target_include_directories(TracyClient INTERFACE ${unwind_INCLUDE_DIRS})
target_link_libraries(TracyClient INTERFACE ${unwind_LINK_LIBRARIES})
endif()
if(TRACY_DEBUGINFOD)
include(FindPkgConfig)
pkg_check_modules(debuginfod REQUIRED libdebuginfod)
target_include_directories(TracyClient INTERFACE ${debuginfod_INCLUDE_DIRS})
target_link_libraries(TracyClient INTERFACE ${debuginfod_LINK_LIBRARIES})
endif()
add_library(Tracy::TracyClient ALIAS TracyClient)
if(TRACY_Fortran)
add_library(Tracy::TracyClient_Fortran ALIAS TracyClientF90)
endif()
macro(set_option option help value)
option(${option} ${help} ${value})
if(${option})
message(STATUS "${option}: ON")
target_compile_definitions(TracyClient PUBLIC ${option})
else()
message(STATUS "${option}: OFF")
endif()
endmacro()
set_option(TRACY_ENABLE "Enable profiling" ON)
set_option(TRACY_ON_DEMAND "On-demand profiling" OFF)
set(TRACY_CALLSTACK "" CACHE STRING "Override the callstack collection depth for tracy zones")
set_option(TRACY_NO_CALLSTACK "Disable all callstack related functionality" OFF)
set_option(TRACY_NO_CALLSTACK_INLINES "Disables the inline functions in callstacks" OFF)
set_option(TRACY_ONLY_LOCALHOST "Only listen on the localhost interface" OFF)
set_option(TRACY_NO_BROADCAST "Disable client discovery by broadcast to local network" OFF)
set_option(TRACY_ONLY_IPV4 "Tracy will only accept connections on IPv4 addresses (disable IPv6)" OFF)
set_option(TRACY_NO_CODE_TRANSFER "Disable collection of source code" OFF)
set_option(TRACY_NO_CONTEXT_SWITCH "Disable capture of context switches" OFF)
set_option(TRACY_NO_EXIT "Client executable does not exit until all profile data is sent to server" OFF)
set_option(TRACY_NO_SAMPLING "Disable call stack sampling" OFF)
set_option(TRACY_NO_VERIFY "Disable zone validation for C API" OFF)
set_option(TRACY_NO_VSYNC_CAPTURE "Disable capture of hardware Vsync events" OFF)
set_option(TRACY_NO_FRAME_IMAGE "Disable the frame image support and its thread" OFF)
set_option(TRACY_NO_SYSTEM_TRACING "Disable systrace sampling" OFF)
set_option(TRACY_PATCHABLE_NOPSLEDS "Enable nopsleds for efficient patching by system-level tools (e.g. rr)" OFF)
set_option(TRACY_DELAYED_INIT "Enable delayed initialization of the library (init on first call)" OFF)
set_option(TRACY_MANUAL_LIFETIME "Enable the manual lifetime management of the profile" OFF)
set_option(TRACY_FIBERS "Enable fibers support" OFF)
set_option(TRACY_NO_CRASH_HANDLER "Disable crash handling" OFF)
set_option(TRACY_TIMER_FALLBACK "Use lower resolution timers" OFF)
set_option(TRACY_DISALLOW_HW_TIMER "Disallow hardware timer (may be useful on VMs). Requires TRACY_TIMER_FALLBACK=ON" OFF)
set_option(TRACY_LIBUNWIND_BACKTRACE "Use libunwind backtracing where supported" OFF)
set_option(TRACY_SYMBOL_OFFLINE_RESOLVE "Instead of full runtime symbol resolution, only resolve the image path and offset to enable offline symbol resolution" OFF)
set_option(TRACY_LIBBACKTRACE_ELF_DYNLOAD_SUPPORT "Enable libbacktrace to support dynamically loaded elfs in symbol resolution resolution after the first symbol resolve operation" OFF)
set_option(TRACY_DEBUGINFOD "Enable debuginfod support" OFF)
set_option(TRACY_IGNORE_MEMORY_FAULTS "Ignore instrumentation errors from memory free events that do not have a matching allocation" OFF)
if(TRACY_CALLSTACK)
message(STATUS "TRACY_CALLSTACK: ${TRACY_CALLSTACK}")
target_compile_definitions(TracyClient PUBLIC TRACY_CALLSTACK=${TRACY_CALLSTACK})
endif()
# advanced
set_option(TRACY_VERBOSE "[advanced] Verbose output from the profiler" OFF)
mark_as_advanced(TRACY_VERBOSE)
set_option(TRACY_NO_INTERNAL_MESSAGE "[advanced] Prevent the profiler from logging messages" OFF)
mark_as_advanced(TRACY_NO_INTERNAL_MESSAGE)
set_option(TRACY_DEMANGLE "[advanced] Don't use default demangling function - You'll need to provide your own" OFF)
mark_as_advanced(TRACY_DEMANGLE)
if(rocprofiler-sdk_FOUND)
set_option(TRACY_ROCPROF_CALIBRATION "[advanced] Use continuous calibration of the Rocprof GPU time." OFF)
mark_as_advanced(TRACY_ROCPROF_CALIBRATION)
endif()
# handle incompatible combinations
if(TRACY_MANUAL_LIFETIME AND NOT TRACY_DELAYED_INIT)
message(FATAL_ERROR "TRACY_MANUAL_LIFETIME can not be activated with disabled TRACY_DELAYED_INIT")
endif()
if(TRACY_DISALLOW_HW_TIMER AND NOT TRACY_TIMER_FALLBACK)
message(FATAL_ERROR "TRACY_DISALLOW_HW_TIMER can not be activated with disabled TRACY_TIMER_FALLBACK")
endif()
if(NOT TRACY_STATIC)
target_compile_definitions(TracyClient PRIVATE TRACY_EXPORTS)
target_compile_definitions(TracyClient PUBLIC TRACY_IMPORTS)
endif()
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
set_target_properties(TracyClient PROPERTIES VERSION ${PROJECT_VERSION})
if(TRACY_Fortran)
set_target_properties(TracyClientF90 PROPERTIES VERSION ${PROJECT_VERSION})
endif()
set(tracy_includes
${TRACY_PUBLIC_DIR}/tracy/TracyC.h
${TRACY_PUBLIC_DIR}/tracy/Tracy.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyCUDA.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyD3D11.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyD3D12.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyLua.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyMetal.hmm
${TRACY_PUBLIC_DIR}/tracy/TracyOpenCL.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyOpenGL.hpp
${TRACY_PUBLIC_DIR}/tracy/TracyVulkan.hpp)
set(client_includes
${TRACY_PUBLIC_DIR}/client/tracy_concurrentqueue.h
${TRACY_PUBLIC_DIR}/client/tracy_rpmalloc.hpp
${TRACY_PUBLIC_DIR}/client/tracy_SPSCQueue.h
${TRACY_PUBLIC_DIR}/client/TracyKCore.hpp
${TRACY_PUBLIC_DIR}/client/TracyArmCpuTable.hpp
${TRACY_PUBLIC_DIR}/client/TracyCallstack.h
${TRACY_PUBLIC_DIR}/client/TracyCallstack.hpp
${TRACY_PUBLIC_DIR}/client/TracyCpuid.hpp
${TRACY_PUBLIC_DIR}/client/TracyDebug.hpp
${TRACY_PUBLIC_DIR}/client/TracyDxt1.hpp
${TRACY_PUBLIC_DIR}/client/TracyFastVector.hpp
${TRACY_PUBLIC_DIR}/client/TracyLock.hpp
${TRACY_PUBLIC_DIR}/client/TracyProfiler.hpp
${TRACY_PUBLIC_DIR}/client/TracyRingBuffer.hpp
${TRACY_PUBLIC_DIR}/client/TracyScoped.hpp
${TRACY_PUBLIC_DIR}/client/TracyStringHelpers.hpp
${TRACY_PUBLIC_DIR}/client/TracySysPower.hpp
${TRACY_PUBLIC_DIR}/client/TracySysTime.hpp
${TRACY_PUBLIC_DIR}/client/TracySysTrace.hpp
${TRACY_PUBLIC_DIR}/client/TracyThread.hpp)
set(common_includes
${TRACY_PUBLIC_DIR}/common/tracy_lz4.hpp
${TRACY_PUBLIC_DIR}/common/tracy_lz4hc.hpp
${TRACY_PUBLIC_DIR}/common/TracyAlign.hpp
${TRACY_PUBLIC_DIR}/common/TracyAlloc.hpp
${TRACY_PUBLIC_DIR}/common/TracyApi.h
${TRACY_PUBLIC_DIR}/common/TracyColor.hpp
${TRACY_PUBLIC_DIR}/common/TracyForceInline.hpp
${TRACY_PUBLIC_DIR}/common/TracyMutex.hpp
${TRACY_PUBLIC_DIR}/common/TracyProtocol.hpp
${TRACY_PUBLIC_DIR}/common/TracyQueue.hpp
${TRACY_PUBLIC_DIR}/common/TracySocket.hpp
${TRACY_PUBLIC_DIR}/common/TracyStackFrames.hpp
${TRACY_PUBLIC_DIR}/common/TracySystem.hpp
${TRACY_PUBLIC_DIR}/common/TracyWinFamily.hpp
${TRACY_PUBLIC_DIR}/common/TracyYield.hpp)
install(TARGETS TracyClient
EXPORT TracyConfig
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
COMPONENT lib)
if(TRACY_Fortran)
install(TARGETS TracyClientF90
EXPORT TracyConfig
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<IF:$<CONFIG:Release>,,$<CONFIG>>
COMPONENT lib)
endif()
# Export targets to build tree root
export(TARGETS TracyClient
NAMESPACE Tracy::
FILE ${CMAKE_BINARY_DIR}/TracyTargets.cmake)
if(TRACY_Fortran)
export(TARGETS TracyClientF90
NAMESPACE Tracy::
APPEND
FILE ${CMAKE_BINARY_DIR}/TracyTargets.cmake)
endif()
install(FILES ${tracy_includes}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tracy/tracy)
install(FILES ${client_includes}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tracy/client)
install(FILES ${common_includes}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tracy/common)
if(TRACY_Fortran)
if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Cray")
install(FILES ${PROJECT_BINARY_DIR}/TRACY.mod
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tracy)
else()
install(FILES ${PROJECT_BINARY_DIR}/tracy.mod
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tracy)
endif()
endif()
install(EXPORT TracyConfig
NAMESPACE Tracy::
FILE TracyTargets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
include(CMakePackageConfigHelpers)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/TracyConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TracyConfig.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
option(TRACY_CLIENT_PYTHON "Whether to build Tracy python client library" OFF)
if(TRACY_CLIENT_PYTHON)
if(TRACY_STATIC)
message(FATAL_ERROR "Python-bindings require a shared client library")
endif()
add_subdirectory(python)
endif()
================================================
FILE: Config.cmake.in
================================================
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(Threads REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/TracyTargets.cmake")
================================================
FILE: LICENSE
================================================
Tracy Profiler (https://github.com/wolfpld/tracy) is licensed under the
3-clause BSD license.
Copyright (c) 2017-2026, Bartosz Taudul <wolf@nereid.pl>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the <organization> nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: NEWS
================================================
Note: There is no guarantee that version mismatched client and server will
be able to talk with each other. Network protocol breakages won't be listed
here.
vx.xx.x (2026-xx-xx)
--------------------
- External frames are now omitted in the single-line call stack list visible
in messages list, or in memory allocation info window.
- System tracing on Windows has been refactored to be more robust.
- Tracing on Arm macOS will now have more precise timer readings.
- Extended CUDA support to track some previously missing memory operations.
- Added support for setting message's source and severity, through the
TracyLogString macro.
- Various LLM integration improvements.
- The protocol has been updated to use model templates. As a result, tools
are now specified in a common way and the reasoning is performed in a
separate content stream.
- Smaller models are now viable to use. Models as small a 4B parameters do
now work really well. You can run such models on virtually all hardware.
- Added horizontal scroll bars to code segments.
- LLM thinking regions are now hidden by default.
- Sampled execution costs are now included in assembly attachments.
- Source code retrieval now has an optional line context parameter.
- Added ability to search the code for keywords.
- Calls in assembly attachments are now annotated with function names.
- Wikipedia search will now return 10 results, not only the top one.
- Added emoji font.
- Maximum tool reply size has been tweaked to better work with larger
contexts.
- Tool reply eviction logic for context management has been adjusted to
better work with larger contexts. Additional logic was added to prefer
eviction of old responses.
- Expanded LLM attachments.
- You can now attach complete symbol assembly.
- Entry call stacks can be now attached (previously it was only regular
call stacks).
- Crash call stack attachments are now annotated with crash info.
- Source code can be attached (also with execution costs in symbol view).
- Markdown renderer improvements.
- Tables are now properly rendered.
- Tasklist rendering has been implemented.
- Strikethrough is now supported.
- Clickable links are now underlined.
- Tweaked high-resolution scroll handling on Wayland.
- Full user name is now stored in trace info.
- External functions can be filtered out in the sampling statistics view.
- Tweaked external paths heuristics.
- Check for both 64-bit and 32-bit versions of Program Files directory.
- Hidden unix files and directories are now also considered external. For
example: $(HOME)/.cache/cpm/somelib/file.h.
- LLM configuration now also expects a "fast model" to be set. It is intended
for quick queries that do not require tool use or reasoning.
- Call stack window can now provide LLM summaries. It uses the fast model.
- These summaries can be performed automatically. Enable in LLM settings.
- The capture utility is now displaying query backlog, just like the profiler
GUI.
- Lua source locations that are script code will now have newlines removed.
This is a capture-time change, so previously captured broken Lua source
locations won't be fixed.
- Call stack window will now display notification if viewing a crash call
stack.
- Removal of Tracy crash handler stack from the reported crash call stack
should now work again on Linux.
- In disassembly line view, source file names are now displayed instead of
"unknown", in case the source line number is not known.
v0.13.1 (2025-12-11)
--------------------
- Fixed parsing of extended model and family of x86 CPUID.
- Fixed memory corruption when a "long" user name was used on Android.
- Fixed wrong function signature when TRACY_DEBUGINFOD was enabled.
- Mount list is now read using proper API instead of processing /proc/mounts.
- Fixed shadow warning supression not being enabled on gcc.
- Silently ignore lost ETW Vsync events instead of asserting.
- Worked around few cases where old macOS machines do not support C++20
properly. Thanks Tim Apple!
- Added truncated mean parameter to csvexport.
- Added experimental viewer for the user manual.
- Memory free faults can be now ignored with the TRACY_IGNORE_MEMORY_FAULTS
option.
- Fixed race condition during profiler shutdown.
v0.13.0 (2025-11-11)
--------------------
- Added optional LLM integration.
- Can be completely disabled in options.
- Requires you to provide a local LLM service.
- Can be used to retrieve information from the user manual.
- Can answer queries about application call stacks, assembly code, other
general questions.
- Will refer to network resources to obtain information.
- The required setup is detailed in the user manual.
- Added support for Microsoft Game Development Kit (GDK).
- Added support for ROCm / Rocprof.
- Default values for certain settings can be now saved in the options
window.
- The display height of any timeline thread can be limited with a thread
cropper widget at the left border of the screen.
- System tracing is now stopped when the profiled program wants to exit.
- System tracing can be now enabled and disabled by the profile program.
- Added support for host query reset when collecting Vulkan traces.
- The find zone statistics now also show P99 and P99.9.
- Timeline for a thread will no longer hide if there are no zones to show,
but samples are visible.
- Fixed problems with Wayland integration.
- Proper order of operations is now ensured during initialization.
- The window size calculations for fractional scaling are now done
correctly.
- The Linux tracefs mount path is now properly detected, instead of relying
on a hardcoded value.
- Fixed LockMark macro expansion.
- Fixed invalid reported fiber enter time.
- Properly handle fiber enter and leave events in the on demand mode.
- Removed calibration of queue delay time. It served no real purpose.
- Various improvements have been made to speed up symbol and executable
image queries.
- Exposed internal mutex variable in Lockable and SharedLockable.
- Fixed problems with Linux systems that do not use glibc.
- Fixed edge case that could corrupt rpmalloc state in the profiled
application.
- Extended ZoneNameF macro with compiler checks for proper printf args.
- Warnings about variable redefinition by nested zone macros are now
supressed by default. The old behavior can be restored by adding the
TRACY_ALLOW_SHADOW_WARNING define during compilation of your program.
- Fixed window icon and dock integration on macOS.
- Fixed edge case with symbols thread not behaving as expected when on
demand mode was used and a rapid reconnection was made.
- Properly defer GPU context events in serial C API.
v0.12.2 (2025-06-25)
--------------------
- Fixed builds made out of git checkout directory.
- Added range limits for flame graph.
- Fixed wayland include paths for distros that use non-standard package
layouts.
- Workarounded MinGW build problems. Safe symbol retrieval is not available
on this platform.
- Fixed Lua bindings when TRACY_NO_CALLSTACK is defined.
v0.12.1 (2025-06-07)
--------------------
- Fixed window size calculation on macOS, most notably enabling the vertical
timeline scroll bar.
- Made debug builds of the GUI profiler work with broken Apple compiler.
- Fixed profiler compilation when build directory is outside the source
directory.
- Set proper include path when using CMake integration.
- Added the Tracy Metal and CUDA headers to CMake install configuration.
- Documented flame graphs.
v0.12.0 (2025-05-30)
--------------------
- Enabled workaround for MSVC runtime library SNAFU, which manifested with
the profiler executables crashing at startup inside mutex code.
- CPU topology data now includes CPU die information.
- Clients running under Wine will now report that in the trace info.
- Added flame graph.
- The Git ref information for the build is now included in the about dialog.
- Added support for clipboard copy and paste on Wayland.
- The welcome dialog client address entry field will now trim the entered
address, so that stray spaces at the start and the end are removed. This
should reduce the amount of user precision required when copy pasting the
address from somewhere else.
- GPU profiling is now available with Metal and CUDA.
- Profiling zones can now optionally inherit their parent color.
- It is no longer needed to have up-to-date copy of wayland-protocols
installed. CMake will download the required version from GitHub.
- Added option to show the top inline in symbol statistics list in stead of
the symbol name.
- Parallel sorting is now performed with PPQSort (which removes potential
dependency on TBB).
- Added CMake option TRACY_DEBUGINFOD to enable use of libdebuginfod to
retrieve symbols on Linux clients.
- Added a "custom" label as an option to select for GPU context type.
- Symbol code retrieval is now protected against reading no longer available
memory.
- Clicking on a symbol in the symbol statistics list will now open a popup
with two options. This change intends to make the useful but quite hidden
disassembly view more discoverable.
- "View symbol" shows the symbol code disassembly. It was previously
available by right-click on the source file name.
- "Sample entry stacks" shows the list window that was previously
opened when the symbol entry was clicked.
- Plots are now extended to the end of the trace, instead of ending at the
last data point.
- Added TracyMemoryDiscard macros to mark that all allocations made in a
certain memory pool were freed. This enables better support for arena
allocators.
- It is now possible to fine-tune horizontal and vertical mouse wheel scroll
sensitivity.
- Added p75 and p90 percentiles in the Find zone window.
- Zone info window will now display (approximate) wall-clock time of when
the zone appeared, in addition to the previously displayed time from the
start of the program.
- Zone values passed via ZoneValue macro will be now also displayed in hex.
- The csvexport utility can now export:
- plots,
- GPU zones,
- zone text.
- Fortran integration is now available.
- Added TRACY_LTO CMake option to enable Link-Time Optimizations.
- Executable image names will now be shortened to just the file name. The
full path is available as a tooltip. Shortening can be disabled with a
"scissors" checkbox.
- Entry stacks can be now also viewed via a button in the symbol view.
- On Wayland the application icon is now set even without the desktop file.
- Lua code can be now automatically instrumented via a hook.
- User text set in zone can be now copied to clipboard.
- The LockMark() macro is now less strict about what object you can pass
to it. It is now possible to pass members, e.g. LockMark(obj.mutex).
- The profiler application now adapts to per-monitor DPI on Windows.
- It is now possible to save the UI scale of the profiler (needs to be
enabled in settings).
- Added thread wakeup visualization.
v0.11.1 (2024-08-22)
--------------------
- Utilities import-chrome and import-fuchsia now live together in the import
directory.
- Added TRACY_VERBOSE to available CMake options.
- It is now possible to set TRACY_SAMPLING_HZ via a environment variable.
- Thread group hints can be now used to group threads together in the
profiler UI.
- Limit Lua file names to 255 characters, as the source string can contain
the whole script, if loaded with loadstring().
v0.11.0 (2024-07-16)
--------------------
- Support for pre-0.9 traces has been dropped.
- The old server-side build system has been replaced by CMake. The client
integration is not affected. Refer to the manual for details.
- Most importantly, a known version of the capstone library is now
downloaded from GitHub. You will need to have git installed for this
to work (there is a CMake option to use the capstone installed on the
system, as was done previously).
- Various Meson fixes.
- Proper way of loading Vulkan calibrated timestamps extension.
- Fixed C API support for GPU tracing when on demand mode is enabled.
- Added a way to resynchronize CPU and GPU timestamps.
- Using calibrated contexts should always be preferred.
- Each synchronization event requires a sync of CPU and GPU, which is
something you always want to avoid.
- This is not exposed as an easy-to-use API available through the GPU
wrappers.
- Added TracyIsStarted macro to check if the profiler has been started.
Using this functionality only makes sense in the manual lifetime mode,
and will always return true in any other mode of operation.
- Added basic QNX support.
- Zmmword is now recognized as an assemble size directive.
- Libunwind can be used for call stack capture on Linux if you build with
the TRACY_LIBUNWIND_BACKTRACE define.
- Preloading symbols for all modules on Windows, which is always performed
on program init, and which can be quite slow, may now be omitted through
the TRACY_NO_DBGHELP_INIT_LOAD define. In this mode, symbols will be
loaded as needed.
- Validation of discontinuous frames has been disabled in on-demand mode.
It's quite likely to connect in the middle of a discontinuous frame,
which resulted in frame end event for a frame that hasn't been started.
- Symbols can be now resolved offline on Windows and Linux.
- Enabled with the TRACY_SYMBOL_OFFLINE_RESOLVE define or env variable.
- The update utility has two additional options:
- -r, which enables resolving symbol and patching stack frames in the
trace.
- -p, which you can use to modify the paths used for symbol resolution.
- Some functionality will be missing if this mode is used. For example,
symbol statistics are unavailable.
- Resolving symbol names on Linux will now use image cache to reduce the
number of dladdr() calls.
- Compiling with the TRACY_LIBBACKTRACE_ELF_DYNLOAD_SUPPORT define will
enable support for run-time updating of known elf ranges in libbacktrace
on Linux. Previously, shared objects dlopened() after libbacktrace init
would not be visible during symbol resolution.
- Zone group count in the Find zone window is now explicitly displayed.
- Instrumentation statistics now display in how many threads each source
location has appeared in.
- Added import tool for fuchsia traces.
- https://fuchsia.dev/fuchsia-src/reference/tracing/trace-format
- Added checks for overflow of source locations.
- As a reminder, Tracy only allows to have 64K unique source locations,
split in half between static and dynamic locations.
- Runtime checks are active during capture and will stop a trace that
goes beyond the limit.
- Load-time checks will stop any broken trace file from loading.
- Opening the source code view that has no associated address in code
(i.e., from the list of instrumented zones, or from the find zone
window) will now search the list of symbols for a function name match.
- In many cases this will result in displaying the full disassembly view
where previously you would only see the source code.
- Matching is performed by string comparisons, which in rare cases may
result in showing false data.
- Press ctrl key while opening source view to keep the old behavior.
- If more than one matching symbol is found (e.g., if two classes have
methods with the same name, or if a template is instantiated in multiple
places in code), it is not possible to tell which of the code locations
the source location corresponds to and only the source code will be
displayed.
- Added TracyNoop macro, which inserts a reference to Tracy's object file
into your application. Use it if you want to use Tracy in sampling mode,
without any manual instrumentation (so no references of your own exist)
and link Tracy as a static library. Linkers will only include library code
if code references it, and this doesn't work as intended with Tracy, as it
ignores global constructors that have side effects.
- ZoneText and ZoneName macros now have a printf-like variant, denoted with
a 'F' postfix.
- The 'tracy_shared_libs' Meson option was removed. Use interface provided
by Meson to set the library type instead.
- Dropped the 'tracy_' prefix from Meson options. The `tracy_enable` option
remains as it was, as it can be inherited from parent projects.
- Fixed display of active / inactive allocations in memory call tree.
- Instrumentation statistics can be now sorted by source location.
- Added option to hide external code frames in call stack view.
- There's now a copy to clipboard button in the statistics view. It copies
the visible rows of either the instrumentation or GPU statistics view to
a CSV string matching a subset of the csvexport format.
- Source file contents can be copied to the clipboard.
- Added key binding for immediate reconnect: Ctrl+Shift+Alt+R.
- Lock markup is now available through the C API.
- Symbol statistics window now allows aggregation of inlined functions in
symbols.
- Cost measurements of inlined functions in the symbol statistics window
can be now relative to the base symbol instead of total program run time.
- ScopedZone and AllocSourceLocation now accept color parameter. Impact on
existing code should be minimal.
- AllocSourceLocation has a new parameter with a default value.
- __tracy_alloc_srcloc and __tracy_alloc_srcloc_name break the existing
API. This can be easily fixed by setting the last parameter to zero.
- To build the profiler GUI with Wayland you now need wayland-scanner and
wayland-protocols to be installed. A reasonably recent release of the
protocols is required, which, as always, is not available on Ubuntu.
Seriously, stop trying to build modern software with that broken distro.
- Fractional DPI scaling is now properly supported on Wayland.
- Added Python bindings.
- The per-line sampling statistics are now also displayed as a percentage
of total program run time.
- The out-of-focus render frame rate reduction can be now disabled in
global settings.
- It is now possible to load source files that are newer than the trace.
The default setting is still to reject such files.
- Memory limit for a capture can be now set, both in the GUI profiler and
in the capture utility.
- Thread list can be now sorted alphabetically.
- It is now possible to adjust plot height.
- Trace comparison statistics were expanded and made more clear.
- Implemented retrieval of kernel symbol code on Linux.
- Added support for multiple compression streams in trace files. This
effectively parallelizes both load and save operations.
- The default save setup is now set to Zstd level 3 with 4 compression
streams. This gives both faster compression time and smaller file size.
- New users will be now eased into the profiler with a set of tutorial
achievements.
- You can now set the timeline options default values in global settings.
- Added a check for program memory being available before symbol retrieval
on Windows.
v0.10.0 (2023-10-16)
--------------------
- Missed frames region of on-demand captures will be now ignored when
calculating trace time span, zone percentages, etc.
- Due to technicalities information about locks, frame statistics in trace
information window and csvexport utility still include the missed frames
time.
- When source location dynamic zone coloring mode is enabled, collapsed
zones will be now gray-colored. Previously such regions falled back to
showing thread colors, which may have been confusing to users.
- Vulkan contexts can now use VK_EXT_host_query_reset extension.
- System power usage is now reported on x86 Linux.
- Program name displayed in broadcast messages can be now changed with the
TracySetProgramName() macro.
- Zone error markers (red regions and error bars) have been removed for
consistency with how all other profiling events are displayed.
- It is now possible to export messages in the csvexport utility.
- Major overhaul of how timeline items are processed in GUI.
- The process of figuring out what needs to be drawn on the timeline has
been heavily parallelized.
- The impact is especially visible with traces containing large amounts
of data. The framerate improvement in such cases can be ~30x.
- Consequently, the profiler GUI will now produce multi-core spikes when
rendering frames. This may have impact on the profiled application's
performance, if both the application and the profiler GUI are running
on the same machine. If this is a problem, you may consider the capture
utility instead, which is not affected by these changes. Alternatively,
you may disable parallelization in the options menu.
- Most of the timeline item logic has been written from scratch, which
may have taken care of some elusive bugs.
- Added global configuration settings dialog. You can find it in the
profiler's about menu (the wrench icon in the welcome dialog).
- List of found zones in the Find zone menu can be filtered by user text.
- Fixed div-by-zero in cvsexport utility when there was only one zone of
a kind.
- Fixed compatibility problems with FreeBSD.
- Added support for dynamically loaded Vulkan symbols.
- Trace description or filename is now displayed on the window title bar.
- The csvexport utility will now export thread id data.
- Improved compatibility with MSVC projects not defining NOMINMAX.
- Improved compatibility with Linux setups targeting musl as libc.
- Thread safety of Vulkan instrumentation has been reviewed.
- D3D11 and D3D12 instrumentation was rewritten.
- Added support for efficient profiling when running under rr, the record-
replaying debugger. This is enabled with TRACY_PATCHABLE_NOPSLEDS define.
- History of viewed symbols is now preserved and you can go back to
previously displayed entries.
v0.9.1 (2023-02-26)
-------------------
- Support for pre-0.8 traces has been dropped.
- Profiled programs will ignore dlclose() calls.
- Added warning when the profiler interface is run with privilege elevation.
Advice is given to instead run the client with admin rights.
- Switched to official ZEN4 uarch data.
- Handle cases when thread name is set, but not through Tracy facilities.
- Allow customization of source location data through the following macros:
- TracyFunction - defaults to __FUNCTION__
- TracyFile - defaults to __FILE__
- TracyLine - defaults to __LINE__
- Tracy on Linux now targets and requires Wayland by default.
- Please don't ask about window decorations on Gnome. Current behavior is
the intended behavior. Gnome does not want windows to have decorations,
and Tracy respects this choice. If you find this problematic, use a
desktop environment that actually listens to its users.
- Pass LEGACY=1 parameter to make, if you want to instead rely on the GLFW
library, like before.
- Other platforms still use GLFW.
- Compare traces menu can now display source code differences between two
traces.
- Assembly listings saved to files have been improved.
- Listings are now annotated with source line information.
- To improve compatibility with external tools comments are now prefixed
with '#' instead of ';'.
- Histogram tooltip will now also show left/right counts.
- Tracy now actively manages timeline vertical scroll offset in order to keep
the thread under the mouse cursor in the same place on screen.
- Removed support for AT&T assembly syntax.
- Tracy will not display notification if the file selector can't be used.
Possible reasons for failure include lack of xdg-desktop-portal.
- Using the TRACY_NO_CRASH_HANDLER define will disable handling of
application crashes by the profiler.
- Tracy will now query jump and call target addresses. This enables discovery
of target function names, even if such function has no samples and is not
present in any call stack.
v0.9.0 (2022-10-26)
-------------------
- Attention! All the header and source files used for integrating Tracy with
applications were moved to the public/ directory. This will break your
integration!
- To fix this, update the source and include directories lists to point to
the new location.
- Tracy include files directly referenced by the client were moved to
tracy/ subdirectory, to facilitate setups which previously had Tracy
checkout parent directory in the include paths list (i.e. when you
included "tracy/Tracy.hpp").
- Previously, if you have included the Tracy checkout directory in your
project include directories list (i.e. you could include "Tracy.hpp"),
this could result in third-party library conflicts, e.g. with ImGui.
Such scenarios are no longer the case.
- Tracy macros now require to be terminated with a semicolon.
- The undocumented ___tracy_demangle() function API has been changed. Please
refer to the source code for further instructions.
- The parameter callback and its registration macro have been extended to
include user data pointer. You will need to update your code accordingly.
- Plots visualization has been improved.
- Each plot now has its own color, which can also be defined by the user.
- The area below the plot is now optionally filled with a color.
- Plots can now also be configured to be staircase instead of smooth. This
new setting is appropriate for many inputs where only discrete values
make sense, e.g. the memory allocation plot.
- The API for TracyPlotConfig() macro has been changed. Please refer to
the manual to see how you can fix this.
- Some text labels in the user interface are now more easy to read.
- The profiler will now instruct the user in the UI on what can be done, if
the send queue is slow to process (typically due to symbol resolution).
- If a client with an incompatible protocol is discovered, Tracy will now
try to show which versions can be used to handle the connection.
- Messages list in zone info window can now show messages exclusive to the
zone, filtering out the messages emitted from child zones.
- Added capture of vertical synchronization timings on Linux.
- The range of frame bar colors in the frames overview on top of the screen
can be now controlled with the "Target FPS" entry box in the options menu.
- The "Draw frame targets" option does not need to be selected.
- Previously the hardcoded FPS target thresholds were: 30, 60, 144 FPS.
- Currently the FPS target threshold is: half of target, target, twice the
target.
- Reworked the way zone names are shortened.
- Previously shortening supported only namespace removal, in a way that
didn't consider function parameters or template arguments.
- Shortening to one-letter namespace chains is no longer available.
- The new shortening rules first perform normalization of the function name.
- The function const qualifier is removed.
- Common return types are removed.
- All function parameters and all template arguments are removed.
- The next steps consist of repeated removal of namespaces, starting with
the most outermost one.
- While the old process was all or nothing, the new implementation by
default will dynamically adjust to the space available, trying to show
the most context possible.
- It is also possible to completely disable shortening, or require that it
is always performed in full.
- Function name normalization is enabled by default, even if there is space
to show full function name. This can be changed in options.
- Previously shortening was only applied to the zone names displayed on the
timeline. Currently this process will also apply to all other places in
the UI where function names are displayed. However, in these cases the
function names will only be normalized.
- Full function names are still available as tooltips, or in fine print if
the normalized name is already displayed in a tooltip.
- This functionality is disabled if zone name shortening is disabled.
- Added context menu for timeline labels. Currently the only option is to hide
the selected thread, plot, etc.
- You can now provide custom source file contents through a profiler callback.
- Exposed Tracy version to client applications (available through the
common/TracyVersion.hpp header file).
- D3D12 instrumentation is now thread-safe.
- Timeline can be now navigated with WASD keys.
- Symbol file paths are now normalized on libbacktrace systems. For example,
instead of "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../
include/c++/12.2.0/bits/std_mutex.h" Tracy will now report such file as
"/usr/include/c++/12.2.0/bits/std_mutex.h".
- The import-chrome utility interprets Instant (`i`/`I`) events where the
`name` field contains the word `frame` as a frame event. The `name` is the
frame set name.
- Frame data won't be displayed if there was no frame instrumentation in the
profiling session.
- Note that some automated functionality (e.g. vertical synchronization
capture) may automatically generate frame data, which will force frames to
be displayed.
- Tracy threads will now be collapsed by default on the timeline.
- Clicking on a local thread in the CPU data view will make the thread visible
and uncollapsed on the timeline.
- Assembly view is now in color.
- The profiler UI will no longer unnecessarily redraw the screen if nothing
was changed. This should have a profound impact on power usage.
- Added microarchitecture data for Zen 4.
- Implemented optional propagation of inline cost down the local call stack.
- This feature may be useful when trying to get a general outlook of the
cost at the top-level function in the symbol.
- It is possible to get nonsense data when this is enabled, for example
total cost exceeding 100%. This is by design.
- Assembly line costs are not affected.
- Available clients now also broadcast their PID.
- Reversed mouse button assignments for jumping to source / assembly line in
symbol view. The left mouse button will now focus the target line.
- Assembly lines tooltip will now display local call stack of inline functions
(within the symbol).
- Right-clicking the source location entry in assembly line will show the
local call stack, along with source code preview of each entry and ability
to navigate to any selected inline function.
- The profiler UI will now indicate that it needs attention if the window is
not focused and something interesting happens. For example when a connection
is established, or when a saved trace finishes loading, etc. How the
attention request is indicated depends on the operating system.
- Clicking on the red microarchitecture icon in the symbol view assembly pane
will switch the selected microarchitecture to one the profiled application
was running on.
- Removed option to display instruction latencies in a graphical form. Latency
data is still available in instruction tooltip.
v0.8.2 (2022-06-28)
-------------------
- Added support for debuginfod debug information services. Note that
since this depends on proper system configuration, vendors providing
the debug information, and network retrieval, it is disabled by
default. To enable, compile the profiled application with the
TRACY_DEBUGINFOD define and link with libdebuginfod.
- When Tracy server-side utilities are build with MSVC, the required
libraries will be now automatically retrieved and built with vcpkg.
- Added microarchitecture data for: Bonnell, Airmont, Goldmont, Goldmont
Plus, Tremont.
- Recognize additional CPUIDs of Zen 3, Alder Lake, Ice Lake
microarchitectures.
- Assembly line width will be now extended, if needed. Previously the line
width was calculated for the initial layout and changing amount of
displayed data (especially listing the read/written registers) didn't
affect this, which may have made some lines partially unreadable.
- Added ability to filter call stacks in memory tab by inactive allocations.
Filtering by inactive allocations helps to pinpoint wasteful allocations
in the program.
- Plot graph will no longer display min/max values interpolated for
animation, but rather true values.
- The CPU topology tree structure was replaced by a CPU schematic showing
the same thing in a more concise way.
v0.8.1 (2022-04-21)
-------------------
- Support for pre-0.7 traces has been dropped.
- Update utility can now scan for source files missing in the trace cache,
if the '-c' parameter is given. Found files will be added to the cache.
- Added high-priority queue for fast queries to bypass slow symbol queries.
- Fixed Android documentation to show how to enable context switch tracing.
- Workaround MSVC 2015 stupidity which prevented compilation as C++11.
- Added support for showing branch cost data for CPUs that don't report
branch retirement events (but do report branch misses).
- The right-click context menu available for jump arrows in the symbol view
window will now additionally display jump context, i.e. jump sources and
jump target source code fragments.
- Added freedesktop.org compliant desktop entry and MIME type definition.
- The call stack column in list of messages will now be only displayed when
at least one message on the list has call stack data.
- File dialogs on Unix will be now native to the desktop environment you are
using. Note that this relies on xdg-desktop-portal and dbus.
v0.8.0 (2022-03-28)
-------------------
- Support for Cygwin has been dropped. It was not working for a very long
time and nobody had complained about it.
- Mingw is deprecated due to lack of interest.
- Added TRACY_NO_CALLSTACK_INLINES macro to disable inline functions
resolution in call stacks on Windows.
- Improved function matching algorithm in compare traces view.
- Added CMake integration.
- Reworked rpmalloc initialization.
- Fixed display of messages with newlines on messages list.
- Excluded some uninteresting wrapper functions from call stacks (for
example SIMD pass-through intrinsics to the compiler built-ins).
- Adjusted coloring of instruction hotness in symbol view.
- Properly handle rare cases when sampling on Linux is momentary not able to
resolve time stamps.
- Added Rocket Lake microarchitectural data.
- Updated CPU identifier lists.
- Implemented GPU timer overflow handling heuristics.
- Assembly instructions are now assigned to inline symbols.
- You can not only see the assembly source file and line, but also the
originating function.
- If symbol view is restricted to a single inline function, all assembly
instructions not in this context will be dimmed out.
- Likewise, the navigation in assembly code will be limited just to the
inline context, if a single function is selected.
- Kernel call stacks will be now properly captured and displayed in the
profiler. Kernel functions are marked with the red color.
- The CPU hardware performance counters can be now sampled on Linux.
- Three inferred statistics are displayed for lines in both source and
assembly code in the symbol view window:
- Instructions executed per cycle.
- Branch miss rate.
- Cache miss rate.
- Instruction cost estimation method is no longer tied to software call
stack sampling.
- The image name filter entry field is now providing a list of available
images.
- Reentrant function calls may be now excluded from calculations in the
statistics view.
- Crash handler is now properly removed during profiler destruction.
- Repeatedly right-clicking on the same source line in the symbol view
window will now cycle through assembly blocks associated with this source
line.
- Vulkan headers must be now explicitly included before including
TracyVulkan.hpp.
- The capture utility may now limit capture time to a specified number of
seconds.
- Fixed message thread assignment in the import-chrome utility.
- Sampling data can be now also found in the find zone menu.
- Instrumentation failures may now display their context, e.g. the zone text
that was to be set.
- A warning is now displayed when sampling data is out-of-order.
- Average value for plots can be now viewed.
- Moved symbol resolution to a separate thread. Profiling will no longer be
stuck when there is a large number of symbols to resolve. This not only
improves user experience, but also prevents buildup of data (and memory
consumption) on the client side.
- Android device name will be now reported.
- Added support for capturing fibers.
- Fibers require additional processing, which has to be enabled by adding
the TRACY_FIBERS define on the client side.
- Client code requires additional instrumentation using the new macros
TracyFiberEnter and TracyFiberLeave (or the corresponding C API
variants).
- Fibers are represented in traces as separate threads, and are
distinguished by green color. Faux context switch regions are used to
indicate when a fiber is being run by the worker thread.
- Continuous frame marks no longer need to be issued from a single thread.
- Context switch call stacks are now captured on Windows and Linux.
- Hovering the context switch wait region will now display wait stack,
which may provide additional insight into why the switch happened.
- Wait stacks inspection can be performed in a new view.
- Stacks can be limited to certain threads and to a selected time range.
- Stacks are presented either as a sorted list, or as a bottom-up and
top-down trees.
- Entry call stacks can be now also viewed as a bottom-up and top-down
trees.
- Updated project build files to MSVC 2022.
- Call stack tooltips now also show the executable image name.
- Playback frames can be now changed by interacting with the frame image
slider using the mouse wheel.
- Signal used to handle crashes on Linux can be now redefined.
- Various DPI scaling improvements.
- User interface can be now scaled in run time.
- Symbol code retrieval now also supports kernel on Windows.
- Added low-level C API interface for GPU zones.
- Symbol child calls can be now listed.
- Replaced "restrict time" in memory window with a proper time range limit.
- Added Alder Lake microarchitectural data.
- Added GPU zone statistics.
- Universal Windows Platform support.
- All call stack related functionality can be now disabled with the
TRACY_NO_CALLSTACK macro.
- Added ability to add full-view annotations from the annotations list
window.
v0.7.8 (2021-05-19)
-------------------
- Updated Zen 3 and added Tiger Lake microarchitectural data.
- Manually disconnecting from the server will no longer display erroneous
warning message.
- Added ability to display sample time spent in child function calls.
- Fixed issue which may have prevented sampling on ARM64.
- Added TRACY_NO_FRAME_IMAGE macro to disable frame image compression
thread.
- Ctrl and shift keys will now modify mouse wheel zoom speed.
- Improved user experience in the symbol view window.
- Added support for Direct3D 11 instrumentation.
- Vulkan contexts can be now calibrated on Linux.
- Support loading zstd-compressed chrome traces.
- Chrome traces with multiple PID entries (and possibly conflicting TIDs)
can be now imported.
- Added support for custom source location tag ("loc") in chrome traces.
- Sampling frequency can be now controlled using TRACY_SAMPLING_HZ macro.
- Trace compression can be now selected when saving a trace.
- If a trace cannot be saved, a failure dialog will be displayed.
- Run-time memory usage of frame images can be reduced by calculating
a compression dictionary. This can be only performed when a trace is saved
or through the update utility.
v0.7.7 (2021-04-01)
-------------------
- Linux crash handler will now also catch SIGABRT.
- Fixed invalid name assignment to source files discovered client-side.
- Added ability to check if a zone is active (which may be used to avoid
preparing zone text, etc., as it wouldn't be used anyway).
- Improved sorting behavior of internal vectors.
- Some data will now be always properly displayed during live capture.
This was not particularly visible before, as it mainly concerns edge
cases.
- Sorting is performed only as needed.
- In case of plots the performance during live capture may be decreased,
as these were sorted with at least 0.25 second intervals before. Now
the sorting is performed every frame.
- Some other data, which previously was not sorted, is sorted now.
- In headless capture mode sorting will be only performed when the trace
is saved to disk.
- Fixed some typos in macros.
- Fixed handling of non-ANSI file names on Windows. You can now name your
traces 'ęśąćż.tracy' and it should work as intended. This is supported on
Windows 10 release 1903 and newer.
- Fixed sending GPU context name in on-demand mode.
- Fixed color channel order in ZoneColor() macro.
- Handle failure state when a memory pointer allocation is reported twice,
without an intermediate free.
- Renamed "call stack parents" to "entry call stacks".
- Display number of entry call stacks in assembly line sample count tooltip.
- Added tooltips with preview of source code in various places in the UI.
v0.7.6 (2021-02-06)
-------------------
- Various fixes in build scripts.
- Fixed a faulty rpmalloc initialization path when the first thing the
thread did was sending a message with call stack.
- Added fallback timer define for various virtualized environments, which
may not be able to access the hardware timer registers. This will result
in usage of timer provided by the standard library, with reduced
resolution.
- Further OpenCL improvements.
- Updated libbacktrace.
- Adds Mach-O 64-bit FAT support.
- Fixes memory corruption when processing Mach-O data.
- Fixes missing matching entries during binary search.
- Adds support for MiniDebugInfo.
- Adds fallback to ELF symbol table if no debug info is available.
- Various other fixes.
- Store build time of profiled program in captures.
- GPU contexts can be now named.
- Implemented client -> server source code transfer.
v0.7.5 (2021-01-23)
-------------------
- More robust handling of system tracing on Android.
- Added warning dialog when the connection is lost before all needed data
can be retrieved.
- Fixed handling of NaN plot entries (by skipping them).
- Dynamic zone colors are now supported through the ZoneColor() macro.
- Fixed Arm machine code printout to match the one printed by objdump.
- Fixed client memory corruption when using colored messages.
- Switched to the next-gen ImGui table UI.
- Table columns can have their order rearranged, can be hidden, can be
sorted both in ascending and descending order (where appropriate).
- Table columns state is now preserved between runs.
- Various fixes related to restricting listening to localhost.
- Improved compatibility of ETW tracing with non-MSVC compilers.
- Fixed Vulkan call stack transfer.
- Added support for transient GPU zones (OpenGL, Vulkan, Direct3D 12).
- OpenCL fixes for assert-less builds and non-active zones.
- Added support for thread names and title bar description in traces
imported from chrome tracing format.
v0.7.4 (2020-11-15)
-------------------
- Added support for user-provided locks to keep dbghelp calls thread-safe.
- Call stacks can be now copied to clipboard.
- Allow more control over which automated captures are performed.
- Added textual descriptions for some assembly instructions.
- Profiler memory usage is now also displayed as a percentage of available
physical memory.
- Microarchitecture mismatch is now clearly displayed in the source view
window.
- Added Zen 3 and Cascade Lake microarchitectural data.
- Ghost zones are now supporting all zone coloring modes and namespace
shortening.
- Extend C API to support memory pools.
- Frame rate targets can be now visually represented on the timeline view.
v0.7.3 (2020-10-06)
-------------------
- Properly support DPI scaling on Linux (requires GLFW 3.3).
- Added early checks for output file validity in the capture utility.
- Improvements to presence broadcast handling.
- Custom zone colors can be optionally ignored.
- Added support for tracking multiple memory pools.
- Memory free failure dialog can now show call stack pointing to the failure
location.
- Added support for Wayland on Linux.
- If during the first 5 seconds of the trace there are no frames being
reported, the profiler will switch to following last 5 seconds of the
trace, instead of displaying three last frames.
v0.7.2 (2020-09-14)
-------------------
- Note: the bitbucket repository is obsolete and will soon stop receiving
updates. Migrate to https://github.com/wolfpld/tracy, if you haven't
already.
- The "waiting for connection" dialog no longer has "cancel" button. To
abort connection attempt just use the "close window" button.
- Added update notification.
- The most recent traced events can be now viewed regardless of timeline
zoom level.
- Fixed going-to-line in source view (again).
- Crash handling on client is now not performed, if there is no active
connection.
- Added ability to listen only on IPv4 interfaces.
v0.7.1 (2020-08-24)
-------------------
- Dropped support for pre-v0.6 traces.
- Fixed regression on non-AVX2 CPUs.
- Fixed incorrect calculation of some ghost zones.
- Added list of cached source files.
- Added import of plot data.
- Secure versions of alloc/free macros.
- Automated tracing of vertical synchronization on Windows.
- Fixed attachment of postponed frame images.
- Source location data can be now copied to clipboard from zone info window.
- Zones in find zones menu can be now grouped by zone name.
- Vulkan and D3D12 GPU contexts can be now calibrated.
- Added CSV export utility.
- "Go to frame" popup no longer has a dedicated button. To show it, click on
the frame counter.
- Added macro for checking if profiler is connected.
- Implemented optional data removal from traces in the update utility.
- Allow manual management of profiler lifetime.
- Adjusted priority of ETW threads to time critical.
- Annotations can be now freely adjusted on the timeline.
- Limiting time range for find zone functionality has been significantly
improved.
- Added time range limits for statistics and symbol view.
- Implemented call stack sampling on Linux (including Android).
- Exact time from start of profiling session can be now viewed by hovering
the mouse over the time scale.
- Code transfer can be now compiled-out.
- Added support for zone markup in unloadable modules.
- Added image name filter to sampling statistics results window.
v0.7 (2020-06-11)
-----------------
This is the last release which will be able to load pre-v0.6 traces. Use the
update utility to convert your old traces now!
- chrome:tracing importer now imports zone metadata from "args" key.
- Added display of statistical mode to find zone menu.
- Automatic stack sampling is now available on windows.
- Properly handle tracing on long-running systems.
- Message list entries can now show associated frame image.
- Call stack window will now display module names.
- Symbol location in call stack window may now also display symbol address.
- Statistics menu can now be used to display call stack sampling data or
list available symbols.
- All call paths leading to the sampled instruction in a call stack can be
now displayed.
- Frame image compression ratio (lossless in-memory compression, not taking
into account DXT compression) is displayed in playback window.
- Allow reconnection straight from the discard data dialog.
- Added ability to set custom names for locks.
- Improved handling of network ports.
- Added time percentage display to instrumentation statistics.
- Display of ghost zones (generated from automated call stack sampling).
- Notify when empty labels display is enabled.
- Small fragments of executable code will be now sent from client to server.
- Added notification about query backlog.
- Fixed performance problem with query backlog.
- Display number of in-flight queries, in addition to query backlog.
- Improved failure reports.
- The capture utility will connect to localhost by default.
- Added optional support for QPC timer on windows.
- Complete rewrite of source file viewer. It is now 100% reliable when going
to a source location.
- Symbol source view was added.
- Extension of source file viewer.
- Can display source file, assembly view, or both at the same time.
- May include display of statistical profiling data.
- Ability to switch between source files which were used to build the
symbol.
- Ability to switch between inlined functions which are incorporated into
the symbol.
- Graphical representation of control flow in program.
- Display of micro-architectural data for each assembly instruction.
- Tracking register dependencies between assembly instructions.
- Disassembly may be saved to a file, in order to be processed by external
tools.
- If the default listening port is occupied, profiler will now try listening
on other ports.
- Added possibility to perform source file names substitution.
- Profiler windows can be now docked.
- CPU usage tooltip now displays a list of running threads.
- Added possibility to filter discovered clients list.
- Source files are now cached during capture.
- Profiler will now display a popup when application crashes.
- Added ability to send simple integral values as extra payload for zones.
- Per-frame zone times on the frames plot can now display self time.
- Ability to bind only on localhost interface.
- OpenCL profiling.
- Direct3D 12 profiling.
v0.6.3 (2020-02-13)
-------------------
- Fixed performance issues with loading saved traces on Ryzen CPUs.
- Profiler window contents are now properly updated during window resize.
- Improved tid to pid mapping on windows.
- Zero length and unfinished zones are no longer taken into account for
statistics.
- Build files for shared library are now available (experimental).
- GPU zones now also have "active" parameter.
- Further reduction of memory usage and on-disk trace size.
- Replaced ska::flat_hash_map with robin-hood-hashing.
- Speed-up rendering of long lists of items.
- Exact event time is displayed in some places in the UI.
- Memory allocation lists can now be sorted.
- Added display of trace file compression ratio.
- Optional Zstd compression of trace files.
- Frame images are now internally compressed using Zstd (instead of LZ4).
- Fix display of continuous frame set tooltips.
v0.6.2 (2019-12-30)
-------------------
- Improved call stack decoding on OSX.
- Collection of CPU topology data.
- C API now supports allocated source locations.
- Added chrome:tracing importer.
- Allow merging of ZoneText() strings.
- Time distribution can now show both exclusive and inclusive times.
- Display proper value of selection time in find zone menu.
- Implemented limiting find zone search to a specified time range.
- Highlight hovered zone from find zone menu zone list on the histogram.
- Allow copying user data directory location to the clipboard.
v0.6.1 (2019-11-28)
-------------------
- Dropped support for pre-v0.5 traces.
- Improve BSD support.
- GPU zone CPU thread highlight will now highlight whole thread, not only
the thread name.
- Added CPU thread highlight for CPU data items.
- Client parameters may be now set from the server.
- Minor UI fixes.
v0.6 (2019-11-17)
-----------------
This is the last release which will be able to load pre-v0.5 traces. Use the
update utility to convert your old traces now!
- Dropped support for pre-v0.4 traces.
- Major memory usage decrease.
- Significant network bandwidth decrease.
- Implemented context switch capture on selected platforms.
- Zone timings in various UI places can now take into account only the
time when the thread was executing.
- Zone information window can now display regions in which thread was
suspended by the operating system.
- CPUs on which the zone was running are enumerated.
- Thread activity regions can be graphed on the timeline.
- API breakage: SetThreadName() now only works on current thread.
- Fixed thread name retrieval after thread is destroyed.
- Added number of CPU cores to host info.
- Limited number of possible source locations to 64K.
- Limited supported capture length to 1.6 days.
- CPU cores are now displayed on the timeline.
- Thread execution workload is displayed, including threads from external
programs.
- Thread migrations across CPU cores can be graphed.
- System-wide workload distribution is now plotted on the timeline.
- Added "CPU data" window showing programs competing for CPU during the
capture.
- Switched to using native thread identifiers (relatively small numbers), as
opposed to pthreads identifiers, which in reality were pointers.
- Improved thread name discovery if context switch capture is enabled.
- Per-trace state is now preserved between profiling sessions:
- Timeline view position.
- Item categories draw/hide settings.
- Timeline zones will be highlighted using a different color, when a
matching time range is selected on histogram.
- Per-frame zone times are now displayed on the frames plot when a zone is
selected in the find zone menu.
- Zone color is now displayed in zone information window.
- Zone colors can now be determined basing on depth and thread or source
location.
- Thread colors are displayed across the profiler application.
- Frame times can be now compared.
- Expose more lock handling functionality.
- Network port can be now specified by the user.
- Proper handling of multithreaded Vulkan code.
- Added extreme compression level in update utility.
- Added time distribution data in the zone information window.
- Trace file name is now displayed in trace information window.
- Annotations can be now added to the timeline.
- Server now performs network data retrieval and decompression on a dedicated
thread.
- Added examples of Tracy integration.
- Allow grouping of zones in the find zone menu by zone parent or with no
grouping.
- Zone list in the statistics window can be now filtered.
- Implemented configuration of plots.
- Messages can now collect call stacks.
v0.5 (2019-08-10)
-----------------
This is the last release which will be able to load pre-v0.4 traces. Use the
update utility to convert your old traces now!
- Major decrease of trace dump file size.
- Major optimizations across the board.
- Vcpkg is now used for library management on Windows.
- Display dump file size change in the update utility.
- Added notification area.
- Display trace loading time.
- Display background processing tasks after trace is loaded.
- Display trace save notification.
- Show crash icon, if there was a crash.
- Added C API.
- Profiling session may now gracefully terminate, due to incorrect
instrumentation. A popup with termination reason will be displayed.
- Call stack improvements.
- Call stack frames now have a proper source file and file line
information on Linux.
- Single call stack frame may now have multiple entries, representing
inlined function calls.
- Call stack grouping in the find zone menu now has a special display
mode.
- Call stack memory allocations tree improvements:
- Add top-down variant to complement the previously available bottom-up
one.
- Add ability to group tree nodes by function name.
- Allow restricting tree to display only active allocations.
- Added support for Lua call stack capture.
- Self time of zones may be now displayed in the find zone menu.
- Added ability to disconnect from a client.
- Find zone groups can now be sorted by mean time per call.
- Zones displayed in the find zone menu can be now grouped by order of
appearance, execution time or name.
- Time is now displayed without trailing fractional zeros (e.g. "2.5 ms"
instead of "2.50 ms").
- Child zones displayed in zone info window can be now grouped by source
location.
- Selected or hovered lock is now highlighted on the timeline.
- Locks are now grouped into single and multithreaded (contended and
uncontended) in the options menu locks list.
- On broken platforms the profiler can now be initialized as needed (and
possible), taking a performance and functionality hit.
- User experience improvements in the graphical profiler.
- Thread position and height is now animated, to eliminate flickering that
was happening when depth of displayed zones was changing.
- Zooming in/out using the mouse wheel is now animated.
- Plot range adjustment is now animated.
- Various other UI improvements.
- System CPU usage is now being monitored.
- Threads that have nothing to display in the current view are now hidden by
default.
- Dimmed-out the timeline outside the profiling area.
- Source file view can now be opened also from statistics menu.
- Display standard deviation in find zone and compare traces menus.
- Display zone messages in zone information window.
- Display order of threads can be changed in the options menu.
- Prevent deadlocks by querying socket send buffer size.
- Frame set statistics can be now limited to frames visible on the screen.
- Messages can be now colored.
- Zone selection in compare traces menu can be now linked to the other
trace.
- Added support for frame image (screen shot) storage.
- Implemented ability to cut off outliers on histograms.
- Zone or frame that is currently hovered by the mouse cursor will be
highlighted on the histogram.
- Server now displays available clients in the local network.
- Source code whitespace visibility can now be enabled or disabled.
- Profiler will now check if proper timer readings can be performed on
x86/x64.
- Application can now log app-specific information, similarly to how the
host info reports system information.
- Message list will automatically scroll down to the most recent message.
- Feature will disable when the list is scrolled by user.
- To re-enable, scroll to the bottom of the list.
- Message list can be now filtered.
- A notification popup will be displayed during trace cleanup.
- Source file view won't be available if a source file is newer than the
capture.
- Added ability to set custom trace descriptions.
- Added frame time target lines.
- FPS counts are now displayed next to frame times.
- GPU drift value can be now automatically measured.
- Connection window is now a popup hidden under a dedicated button.
v0.4.1 (2018-12-30)
-------------------
- Active frame set can be now switched by clicking on a frame set on the
timeline.
- Add ability to go to a specified frame.
- Most commonly used addresses can be now selected from the drop-down menu.
- Fixed corner case problem with profiler initialization on Windows.
- Added third state (stopped) to the pause/resume button. It will be used
after the connection to the client is terminated.
- Active trace can be discarded.
- Call stack capture may be forced through TRACY_CALLSTACK define.
- Lock info window has been added.
- Time of lock creation and termination is now being tracked.
- Menu bar buttons are now toggles that can also close their corresponding
windows.
- Find zone and compare menu improvements.
- Ability to ignore case during search.
- Pressing enter key will now start search, just like pressing the "find"
button.
- Using the ^F keyboard shortcut will open the find zone menu and focus
the input box.
- Added ability to automatically connect to an IP address in the graphical
profiler application (use "-a address" argument to enable).
- Pressing enter key after entering client address in the welcome dialog
will now automatically begin connection process.
v0.4 (2018-10-09)
-----------------
- Renamed "standalone" utility to "profiler".
- Added trace update utility, which will convert files saved in previous
versions of tracy to be up-to-date.
- Optional high compression (--hc) mode is available that will increase
the compression level, at the cost of considerably longer compression
time.
- Fix regression causing varying size of profiler window for different
captures.
- Added support for on-demand tracing.
- If a client application is compiled with the TRACY_ON_DEMAND macro
defined, tracing will not begin until a connection to server is
established.
- Since data is not fully captured in this mode, the resulting trace will
be less precise, until application state is appropriately reset. For
example, locks need to be fully released, zone stacks need to be
flushed. This is an automatic process.
- All tracing macros are able to work in the on-demand mode.
- Improved compatibility with various system setups.
- Aside from using TRACY_NO_EXIT define you can also set the same-named
environmental variable to 1 to get the same effect.
- Added ability to show/hide all threads and plots.
- Performance improvements.
- Improvements to memory data presentation.
- Added memory allocation info window.
- Selecting memory allocation on a plot will draw time range of the
allocation.
- Middle clicking on an memory allocation address (or on a button in
memory allocation info window) will zoom the view to the allocation
range.
- Find zone menu improvements:
- Zones can be now also grouped by call stacks.
- Zone groups can be now also sorted by time spend in each zone.
- Zone groups list now displays group times.
- Average and median zone times are now displayed on the histogram.
- Selected zones will be highlighted on the timeline view.
- Added named versions of tracing macros that allow specifying scoped
variable name.
- The main profiler window is now kept at the bottom of windows stack.
- The "profiler" utility will now use a custom embedded font.
- Microseconds are now displayed using correct symbol ('μ' instead of 'u').
- Unix builds of the "profiler" utility will now ask for a file name when
saving a trace.
- Progress popup is now displayed when a trace file is loading.
- Zones that share source location with a zone that is hovered over are now
highlighted.
- Added ability to zoom-in to a selection range made using middle mouse
button.
- Holding the ctrl key will switch to zoom-out mode.
- The "profiler" utility will use less resources when its window is
out-of-focus or minimized.
- Added support for cross-DLL profiling.
- Items in options menu (locks, threads, etc.) are now described with number
of events.
- Source location of lock declaration is also provided.
- Created an extensive user manual for the profiler.
- Added ability to capture multiple frame sets.
- Viewer will display multiple frame ranges at once.
- Only one frame set can be active at once. The selected one is used for
the frame navigation graph, frame navigation buttons and drawing frame
separators.
- The active frame set will be highlighted, and the rest will be dimmed
out.
- Frames can now also be discontinuous.
- Frames and zones too small to be displayed will be marked with a zig-zag
pattern.
- General improvements to message list and message markers.
- Hovering over message on a list will highlight its marker (previously it
only worked the other way).
- Left clicking on a message marker will focus the message list on the
selected message.
- Middle clicking on a message marker will center it on screen.
- Added trace information window.
- This includes frame time statistics and histogram.
- Displayed memory sizes are now properly formatted.
- Added call stack tree for memory allocations.
- You can display allocations list for each call stack tree entry.
- The source code of the profiled application may now be viewed in the
profiler.
- BIG FAT WARNING: The actual profiled program source code is not known to
the profiler. It only checks if there is a file on your disk that
matches the file name of the captured source location. Even if the file
is displayed, it may be out of date.
- CPU and GPU zones will have "Source" button, if source file can be
opened.
- Source files for call stack traces can be opened by right-clicking on
the file name. Since in this case there is no button that can be hidden,
a small animation will be played to notify user if the source cannot be
opened.
- The main profiler view will now occupy the whole window. Previous behavior
is still available for embedded use cases.
- Many button labels are now accompanied by icons.
- Fonts should now be less blurry.
- "Go to parent" button in zone info window won't be displayed if there is
no parent to go to.
- Improvements to the compare traces menu.
- There are now colored markers to make it easier to distinguish "this" and
"external" traces.
- The amount of saved time is now displayed (a difference between total
run times of both traces).
- Tracy will now collect host information, like CPU name, amount of system
memory, etc.
- Windows builds of the "profiler" utility will perform a check of supported
CPU instruction set and match it against the one required by the binary
(by default AVX2 is used). If the program cannot be executed on the
processor, a message dialog with workaround instructions will be
displayed.
- Tracy can intercept crashes and finish sending data from a dying process.
- Currently this is only implemented on Windows, Linux and Android.
- Call stack window may now display addresses of the frames, instead of
source file locations.
- Memory events will now properly register their thread.
- Profiler settings are now stored in a persistent location.
- On Windows settings are stored in %APPDATA%/tracy.
- On other platforms settings are stored in $XDG_CONFIG_HOME/tracy or
$HOME/.config/tracy, if the variable is not set.
- The main profiler window position, size and maximized state are saved
and restored.
- The size and position of internal windows now doesn't depend on the
runtime directory of the profiler executable.
- Added connection handshake.
- Server won't be able to connect to client if there's a protocol version
mismatch.
- Client not in on-demand mode will refuse connections after the first
connection was made and the initial event buffers were cleared.
- A single server will no longer try to connect to multiple clients.
- The capture utility will now display time span of the ongoing capture.
v0.3 (2018-07-03)
-----------------
- Breaking change: the format of trace files has changed.
- Previous tracy version will crash when trying to open new traces.
- Loading of traces saved by previous version is supported.
- Tracy will no longer crash when trying to load traces saved by future
versions. Instead, a dialog advising to update will be displayed.
- Tracy will no longer crash in most cases when trying to open files that
are not traces. Some crashes are still possible, due to support of old,
header-less traces.
- Ability to track every memory allocation in profiled program.
- Allocation event queuing must be done in order, which requires exclusive
access to the serialized queue on the client side. This has no effect on
the rest of events, which are stored in a concurrent queue, as before.
- You can search for a memory address and see where it was allocated, for
how long, etc. This lists all matching allocations since the program was
started.
- All active (non-freed) allocations may be listed. This shows the current
memory state by default, but can go back to any point in time.
- Graphical representation of process memory map may be displayed. New
allocations/frees are displayed in a bright color and fade out with
time. This feature also can look back in time.
- Memory usage plot is automatically generated.
- Basic allocation information is displayed in memory plot tooltips.
- A summary of memory events within a zone (and its children) is now
printed in zone info window.
- Support loading profile dumps with no memory allocation data (generated by
v0.2).
- Added ability to display global statistics of a selected zone from the
zone info window.
- Fixed regression with lock announce processing that appeared during
worker/viewer split.
- Allow selecting/unselecting all locks for display.
- Performance improvements.
- Don't save unneeded lock information in trace file.
- Don't save thrash in message list data.
- Allow expanding view span up to one hour, instead of one minute.
- Added trace comparison window.
- An external trace has to be loaded first.
- Zone query in both traces (current and external).
- Both results are overlaid on the same histogram.
- Graphs can be adjusted as-if there was the same number of zones
collected.
- Read time directly from a hardware register on ARM/ARM64, if possible.
- User-space access to the timer needs to be enabled in the kernel, so
tracy will perform run-time checks and fallback to the old method if the
check fails.
- Prevent connections in a TIME-WAIT state from blocking new listen
connections.
- Display y-range of plots.
- Added ability to unload traces loaded from files. To do so close the main
profiler window. You will return to the connect/open selection dialog.
Live captures cannot be terminated this way.
- Zones previously displayed in zone info window are remembered and you can
go back to them. Closing the zone info window or switching between CPU and
GPU zones will clear the memory.
- Improved message list window.
- Messages are now displayed in columns.
- Originating thread of each message is now included in the list.
- Messages can be filtered by the originating thread.
- You can now navigate to next and previous frame.
- Zone statistics can be now displayed using only self times.
- Support for tracing GPU events using Vulkan.
- Timeline will now display "OpenGL context" or "Vulkan context" instead of
"GPU context".
- Fixed regression causing invalid display of GPU context appearance time.
- Fixed regression causing invalid reporting of an active CPU in zone end
events, if MSVC rdtscp optimization was not enabled.
- Ability to collect true call stacks.
- Supported on Windows, Linux, Android.
- The following events can collect call stacks:
- Memory alloc/free.
- Zone begin.
- GPU zone begin.
- Zone stack trace now also displays frames from a real call trace.
- On Linux call stack frame name resolution requires a call to dladdr,
which in turn requires linking with libdl.
- Allow manual entry of GPU time drift value.
- Unix build system no longer shares object files between different build
units.
- Fixes inability to build debug and release versions of a single utility
without "make clean".
- Fixes incompatibility between "standalone" and "capture" utilities due
to different set of used feature flags.
- On Windows "standalone" utility now adapts to system DPI setting.
- Optional per-call zone naming.
v0.2 (2018-04-05)
-----------------
- Fixed broken TRACY_NO_EXIT behavior.
- Visual refresh (new color scheme).
- Added optional support for live in-depth zone analysis.
- Ability to search for zones matching a query.
- Histogram of zone time spans.
- List occurrences of a zone, grouped by thread, or by user text.
- Zone groups can be selected and highlighted on histogram graph.
- Support for linear and logarithmic display of time and values.
- Histogram bins can show zone counts or total execution time.
- Listed zones can be narrowed down by data range selection on histogram.
- Separation of server data handling code from the visualisation.
- Implementation of a command line capture utility.
- Support libraries have been updated.
- Fixed an issue that prevented de-duplication of source location payloads.
- Fixed an issue that prevented the ability to disable threads in settings
menu, if two threads had the same name.
- Performance optimizations.
- Visual clean up of the settings menu.
- Zone info windows improvements.
- Visual improvements to zone info window child list.
- Zone info windows now show zone thread.
- Display zone stack trace.
- Hide pause/resume button if there's no data connection (i.e. trace was
loaded from file).
- Source location statistics view has been added.
- Fixed crash when a saved trace was opened, but no trace capture session
was performed before.
- Standalone server will now open trace files passed as an argument to the
executable.
- Fix possible crash in SetThreadName, that could happen if TLS init was
delayed until first use of thread local variable.
- Store full thread name if pthreads (with 15 character name limit) are
used.
- Properly handle unaligned memory access (no performance impact).
- Fixed broken lock identifiers in try_lock().
v0.1 (2017-12-18)
-----------------
- Initial release.
================================================
FILE: README.md
================================================
# Tracy Profiler
[](https://github.com/sponsors/wolfpld/)
### A real time, nanosecond resolution, remote telemetry, hybrid frame and sampling profiler for games and other applications.
Tracy supports profiling CPU (Direct support is provided for C, C++, Lua, Python and Fortran integration. At the same time, third-party bindings to many other languages exist on the internet, such as [Rust](https://github.com/nagisa/rust_tracy_client), [Zig](https://github.com/tealsnow/zig-tracy), [C#](https://github.com/clibequilibrium/Tracy-CSharp), [OCaml](https://github.com/imandra-ai/ocaml-tracy), [Odin](https://github.com/oskarnp/odin-tracy), etc.), GPU (All major graphic APIs: OpenGL, Vulkan, Direct3D 11/12, Metal, OpenCL, CUDA.), memory allocations, locks, context switches, automatically attribute screenshots to captured frames, and much more.
- [Documentation](https://github.com/wolfpld/tracy/releases/latest/download/tracy.pdf) for usage and build process instructions
- [Releases](https://github.com/wolfpld/tracy/releases) containing the documentation (`tracy.pdf`) and compiled Windows x64 binaries (`Tracy-<version>.7z`) as assets
- [Changelog](NEWS)
- [Interactive demo](https://tracy.nereid.pl/)



[An Introduction to Tracy Profiler in C++ - Marcos Slomp - CppCon 2023](https://youtu.be/ghXk3Bk5F2U?t=37)
[Introduction to Tracy Profiler v0.2](https://www.youtube.com/watch?v=fB5B46lbapc)
[New features in Tracy Profiler v0.3](https://www.youtube.com/watch?v=3SXpDpDh2Uo)
[New features in Tracy Profiler v0.4](https://www.youtube.com/watch?v=eAkgkaO8B9o)
[New features in Tracy Profiler v0.5](https://www.youtube.com/watch?v=P6E7qLMmzTQ)
[New features in Tracy Profiler v0.6](https://www.youtube.com/watch?v=uJkrFgriuOo)
[New features in Tracy Profiler v0.7](https://www.youtube.com/watch?v=_hU7vw00MZ4)
[New features in Tracy Profiler v0.8](https://www.youtube.com/watch?v=30wpRpHTTag)
================================================
FILE: capture/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)
option(NO_ISA_EXTENSIONS "Disable ISA extensions (don't pass -march=native or -mcpu=native to the compiler)" OFF)
option(NO_STATISTICS "Disable calculation of statistics" ON)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/version.cmake)
set(CMAKE_CXX_STANDARD 20)
project(
tracy-capture
LANGUAGES C CXX
VERSION ${TRACY_VERSION_STRING}
)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/config.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/vendor.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/server.cmake)
set(PROGRAM_FILES
src/capture.cpp
src/CaptureOutput.cpp
)
add_executable(${PROJECT_NAME} ${PROGRAM_FILES} ${COMMON_FILES} ${SERVER_FILES})
target_link_libraries(${PROJECT_NAME} PRIVATE TracyServer TracyGetOpt)
set_property(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
add_executable(tracy-capture-daemon src/capturedaemon.cpp src/CaptureOutput.cpp ${COMMON_FILES} ${SERVER_FILES})
target_link_libraries(tracy-capture-daemon PRIVATE TracyServer TracyGetOpt)
install(TARGETS tracy-capture-daemon DESTINATION ${CMAKE_INSTALL_BINDIR})
================================================
FILE: capture/src/CaptureOutput.cpp
================================================
#ifdef _WIN32
# include <io.h>
# include <windows.h>
#else
# include <unistd.h>
#endif
#include <atomic>
#include <chrono>
#include <cstdarg>
#include <cstdio>
#include <cstring>
#include <inttypes.h>
#include <thread>
#include "CaptureOutput.hpp"
#include "../../public/common/TracyProtocol.hpp"
#include "../../public/common/TracyStackFrames.hpp"
#include "../../server/TracyMemory.hpp"
#include "../../server/TracyPrint.hpp"
#include "../../server/TracyWorker.hpp"
static bool s_isTerminal = false;
void InitTerminalDetection()
{
#ifdef _WIN32
s_isTerminal = _isatty( fileno( stdout ) );
#else
s_isTerminal = isatty( fileno( stdout ) );
#endif
}
bool IsTerminal()
{
return s_isTerminal;
}
void AnsiPrintf( const char* ansiEscape, const char* format, ... )
{
if( IsTerminal() )
{
char buf[256];
va_list args;
va_start( args, format );
vsnprintf( buf, sizeof buf, format, args );
va_end( args );
printf( "%s%s" ANSI_RESET, ansiEscape, buf );
}
else
{
va_list args;
va_start( args, format );
vfprintf( stdout, format, args );
va_end( args );
}
}
int WaitForConnection( tracy::Worker& worker )
{
while( !worker.HasData() )
{
const auto handshake = worker.GetHandshakeStatus();
if( handshake == tracy::HandshakeProtocolMismatch )
{
printf( "\nThe client you are trying to connect to uses incompatible protocol version.\nMake sure you are using the same Tracy version on both client and server.\n" );
return 1;
}
if( handshake == tracy::HandshakeNotAvailable )
{
printf( "\nThe client you are trying to connect to is no longer able to sent profiling data,\nbecause another server was already connected to it.\nYou can do the following:\n\n 1. Restart the client application.\n 2. Rebuild the client application with on-demand mode enabled.\n" );
return 2;
}
if( handshake == tracy::HandshakeDropped )
{
printf( "\nThe client you are trying to connect to has disconnected during the initial\nconnection handshake. Please check your network configuration.\n" );
return 3;
}
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
}
return 0;
}
void PrintWorkerFailure( tracy::Worker& worker )
{
const auto& failure = worker.GetFailureType();
if( failure == tracy::Worker::Failure::None ) return;
AnsiPrintf( ANSI_RED ANSI_BOLD, "\nInstrumentation failure: %s", tracy::Worker::GetFailureString( failure ) );
auto& fd = worker.GetFailureData();
if( !fd.message.empty() )
{
printf( "\nContext: %s", fd.message.c_str() );
}
if( fd.callstack != 0 )
{
AnsiPrintf( ANSI_BOLD, "\nFailure callstack:\n" );
auto& cs = worker.GetCallstack( fd.callstack );
int fidx = 0;
for( auto& entry : cs )
{
auto frameData = worker.GetCallstackFrame( entry );
if( !frameData )
{
printf( "%3i. %p\n", fidx++, (void*)worker.GetCanonicalPointer( entry ) );
}
else
{
const auto fsz = frameData->size;
for( uint8_t f = 0; f < fsz; f++ )
{
const auto& frame = frameData->data[f];
auto txt = worker.GetString( frame.name );
if( fidx == 0 && f != fsz - 1 )
{
auto test = tracy::s_tracyStackFrames;
bool match = false;
do
{
if( strcmp( txt, *test ) == 0 )
{
match = true;
break;
}
}
while( *++test );
if( match ) continue;
}
if( f == fsz - 1 )
{
printf( "%3i. ", fidx++ );
}
else
{
AnsiPrintf( ANSI_BLACK ANSI_BOLD, "inl. " );
}
AnsiPrintf( ANSI_CYAN, "%s ", txt );
txt = worker.GetString( frame.file );
if( frame.line == 0 )
{
AnsiPrintf( ANSI_YELLOW, "(%s)", txt );
}
else
{
AnsiPrintf( ANSI_YELLOW, "(%s:%" PRIu32 ")", txt, frame.line );
}
if( frameData->imageName.Active() )
{
AnsiPrintf( ANSI_MAGENTA, " %s\n", worker.GetString( frameData->imageName ) );
}
else
{
printf( "\n" );
}
}
}
}
}
}
void PrintCaptureProgress( tracy::Worker& worker, int64_t firstTime, int64_t memoryLimit )
{
if( !IsTerminal() ) return;
auto& lock = worker.GetMbpsDataLock();
lock.lock();
const auto mbps = worker.GetMbpsData().back();
const auto compRatio = worker.GetCompRatio();
const auto netTotal = worker.GetDataTransferred();
const auto queueSize = worker.GetSendQueueSize();
lock.unlock();
const char* unit = "Mbps";
float unitsPerMbps = 1.f;
if( mbps < 0.1f )
{
unit = "Kbps";
unitsPerMbps = 1000.f;
}
AnsiPrintf( ANSI_ERASE_LINE ANSI_CYAN ANSI_BOLD, "\r%7.2f %s", mbps * unitsPerMbps, unit );
printf( " /" );
AnsiPrintf( ANSI_CYAN ANSI_BOLD, "%5.1f%%", compRatio * 100.f );
printf( " =" );
AnsiPrintf( ANSI_YELLOW ANSI_BOLD, "%7.2f Mbps", mbps / compRatio );
printf( " | " );
AnsiPrintf( ANSI_YELLOW, "Tx: " );
AnsiPrintf( ANSI_GREEN, "%s", tracy::MemSizeToString( netTotal ) );
printf( " | " );
AnsiPrintf( ANSI_RED ANSI_BOLD, "%s", tracy::MemSizeToString( tracy::memUsage.load( std::memory_order_relaxed ) ) );
if( memoryLimit > 0 )
{
printf( " / " );
AnsiPrintf( ANSI_BLUE ANSI_BOLD, "%s", tracy::MemSizeToString( memoryLimit ) );
}
printf( " | " );
AnsiPrintf( ANSI_RED, "%s", tracy::TimeToString( worker.GetLastTime() - firstTime ) );
printf( " | " );
AnsiPrintf( ANSI_RED ANSI_BOLD, "%s query backlog", tracy::RealToString( queueSize ) );
fflush( stdout );
}
================================================
FILE: capture/src/CaptureOutput.hpp
================================================
#ifndef __CAPTUREOUTPUT_HPP__
#define __CAPTUREOUTPUT_HPP__
#include <stdint.h>
#define ANSI_RESET "\033[0m"
#define ANSI_BOLD "\033[1m"
#define ANSI_BLACK "\033[30m"
#define ANSI_RED "\033[31m"
#define ANSI_GREEN "\033[32m"
#define ANSI_YELLOW "\033[33m"
#define ANSI_BLUE "\033[34m"
#define ANSI_MAGENTA "\033[35m"
#define ANSI_CYAN "\033[36m"
#define ANSI_ERASE_LINE "\033[2K"
namespace tracy { class Worker; }
void InitTerminalDetection();
bool IsTerminal();
#ifdef __GNUC__
[[gnu::format( __printf__, 2, 3 )]]
#endif
void AnsiPrintf( const char* ansiEscape, const char* format, ... );
int WaitForConnection( tracy::Worker& worker );
void PrintWorkerFailure( tracy::Worker& worker );
void PrintCaptureProgress( tracy::Worker& worker, int64_t firstTime, int64_t memoryLimit );
#endif
================================================
FILE: capture/src/capture.cpp
================================================
#ifdef _WIN32
# include <windows.h>
#else
# include <unistd.h>
#endif
#include <atomic>
#include <chrono>
#include <inttypes.h>
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "../../server/TracyFileWrite.hpp"
#include "../../server/TracyPrint.hpp"
#include "../../server/TracySysUtil.hpp"
#include "../../server/TracyWorker.hpp"
#include "CaptureOutput.hpp"
#ifdef _WIN32
# include "../../getopt/getopt.h"
#endif
// This atomic is written by a signal handler (SigInt). Traditionally that would
// have had to be `volatile sig_atomic_t`, and annoyingly, `bool` was
// technically not allowed there, even though in practice it would work.
// The good thing with C++11 atomics is that we can use atomic<bool> instead
// here and be on the actually supported path.
static std::atomic<bool> s_disconnect { false };
void SigInt( int )
{
s_disconnect.store(true, std::memory_order_relaxed);
}
[[noreturn]] void Usage()
{
printf( "Usage: capture -o output.tracy [-a address] [-p port] [-f] [-s seconds] [-m memlimit]\n" );
exit( 1 );
}
int main( int argc, char** argv )
{
#ifdef _WIN32
if( !AttachConsole( ATTACH_PARENT_PROCESS ) )
{
AllocConsole();
SetConsoleMode( GetStdHandle( STD_OUTPUT_HANDLE ), 0x07 );
}
#endif
InitTerminalDetection();
bool overwrite = false;
const char* address = "127.0.0.1";
const char* output = nullptr;
int port = 8086;
int seconds = -1;
int64_t memoryLimit = -1;
int c;
while( ( c = getopt( argc, argv, "a:o:p:fs:m:" ) ) != -1 )
{
switch( c )
{
case 'a':
address = optarg;
break;
case 'o':
output = optarg;
break;
case 'p':
port = atoi( optarg );
break;
case 'f':
overwrite = true;
break;
case 's':
seconds = atoi(optarg);
break;
case 'm':
memoryLimit = std::clamp( atoll( optarg ), 1ll, 999ll ) * tracy::GetPhysicalMemorySize() / 100;
break;
default:
Usage();
break;
}
}
if( !address || !output ) Usage();
struct stat st;
if( stat( output, &st ) == 0 && !overwrite )
{
printf( "Output file %s already exists! Use -f to force overwrite.\n", output );
return 4;
}
FILE* test = fopen( output, "wb" );
if( !test )
{
printf( "Cannot open output file %s for writing!\n", output );
return 5;
}
fclose( test );
unlink( output );
printf( "Connecting to %s:%i...", address, port );
fflush( stdout );
tracy::Worker worker( address, port, memoryLimit );
int result = WaitForConnection( worker );
if( result != 0 ) return result;
printf( "\nTimer resolution: %s\n", tracy::TimeToString( worker.GetResolution() ) );
#ifdef _WIN32
signal( SIGINT, SigInt );
#else
struct sigaction sigint, oldsigint;
memset( &sigint, 0, sizeof( sigint ) );
sigint.sa_handler = SigInt;
sigaction( SIGINT, &sigint, &oldsigint );
#endif
const auto firstTime = worker.GetFirstTime();
const auto t0 = std::chrono::high_resolution_clock::now();
while( worker.IsConnected() )
{
if( s_disconnect.load( std::memory_order_relaxed ) )
{
worker.Disconnect();
s_disconnect.store(false, std::memory_order_relaxed );
break;
}
PrintCaptureProgress( worker, firstTime, memoryLimit );
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
if( seconds != -1 )
{
const auto dur = std::chrono::high_resolution_clock::now() - t0;
if( std::chrono::duration_cast<std::chrono::seconds>(dur).count() >= seconds )
{
s_disconnect.store(true, std::memory_order_relaxed );
}
}
}
const auto t1 = std::chrono::high_resolution_clock::now();
PrintWorkerFailure( worker );
printf( "\nFrames: %" PRIu64 "\nTime span: %s\nZones: %s\nElapsed time: %s\nSaving trace...",
worker.GetFrameCount( *worker.GetFramesBase() ), tracy::TimeToString( worker.GetLastTime() - firstTime ), tracy::RealToString( worker.GetZoneCount() ),
tracy::TimeToString( std::chrono::duration_cast<std::chrono::nanoseconds>( t1 - t0 ).count() ) );
fflush( stdout );
auto f = std::unique_ptr<tracy::FileWrite>( tracy::FileWrite::Open( output, tracy::FileCompression::Zstd, 3, 4 ) );
if( f )
{
worker.Write( *f, false );
AnsiPrintf( ANSI_GREEN ANSI_BOLD, " done!\n" );
f->Finish();
const auto stats = f->GetCompressionStatistics();
printf( "Trace size %s (%.2f%% ratio)\n", tracy::MemSizeToString( stats.second ), 100.f * stats.second / stats.first );
}
else
{
AnsiPrintf( ANSI_RED ANSI_BOLD, " failed!\n");
}
return 0;
}
================================================
FILE: capture/src/capturedaemon.cpp
================================================
#ifdef _WIN32
# include <windows.h>
#else
# include <unistd.h>
#endif
#include <atomic>
#include <chrono>
#include <cstdint>
#include <cstring>
#include <filesystem>
#include <map>
#include <mutex>
#include <signal.h>
#include <string>
#include <thread>
#include <unordered_set>
#include <vector>
#include "../../getopt/getopt.h"
#include "../../public/common/TracySocket.hpp"
#include "../../server/TracyBroadcast.hpp"
#include "../../server/TracyFileWrite.hpp"
#include "../../server/TracyMemory.hpp"
#include "../../server/TracyPrint.hpp"
#include "../../server/TracySysUtil.hpp"
#include "../../server/TracyWorker.hpp"
#include "CaptureOutput.hpp"
static std::atomic<bool> g_shutdown{false};
static std::mutex g_clientsMutex;
static uint16_t g_listenPort = 8086;
static std::string g_filterName;
static int g_filterPort = 0;
static int64_t g_memoryLimit = -1;
void SigInt( int )
{
g_shutdown.store( true, std::memory_order_relaxed );
}
struct ClientStats
{
std::atomic<float> mbps{0};
std::atomic<int64_t> txBytes{0};
std::atomic<int64_t> memUsage{0};
std::atomic<int64_t> firstTime{-1};
};
struct ClientSession
{
std::string id;
std::string programName;
std::string address;
uint16_t port;
std::string outputFile;
std::thread thread;
std::atomic<bool> active{true};
std::atomic<bool> finished{false};
ClientStats stats;
std::atomic<uint64_t> fileSize{0};
};
static std::map<std::string, ClientSession*> g_clients;
static std::unordered_set<std::string> g_outputFiles;
[[noreturn]] void Usage()
{
printf( "Usage: tracy-capture-daemon -o <output_dir> [options]\n\n" );
printf( "Options:\n" );
printf( " -o, --output <dir> Output directory (required)\n" );
printf( " -p, --port <port> UDP listen port (default: 8086)\n" );
printf( " -m, --memory <limit> Memory limit per client as %% of system RAM\n" );
printf( " --filter-name <pattern> Only capture clients matching program name\n" );
printf( " --filter-port <port> Only capture clients with specific data port\n" );
printf( " -h, --help Show this help\n" );
exit( 1 );
}
std::string SanitizeName( const std::string& name )
{
std::string result;
for( char c : name )
{
if( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || ( c >= '0' && c <= '9' ) || c == '_' || c == '-' )
{
result += c;
}
else if( c == ' ' || c == '\t' )
{
result += '_';
}
}
if( result.empty() ) result = "unknown";
return result;
}
std::string GenerateOutputFilename( const std::string& outputDir, const std::string& programName, const std::string& address, uint16_t port )
{
std::string base = SanitizeName( programName ) + "_" + address + "_" + std::to_string( port );
std::string candidate = base + ".tracy";
std::string path = outputDir + "/" + candidate;
int idx = 0;
while( g_outputFiles.count( path ) || std::filesystem::exists( path ) )
{
idx++;
candidate = base + "_" + std::to_string( idx ) + ".tracy";
path = outputDir + "/" + candidate;
}
g_outputFiles.insert( path );
return path;
}
bool MatchesFilters( const tracy::BroadcastMessage& msg )
{
if( !g_filterName.empty() )
{
if( strstr( msg.programName, g_filterName.c_str() ) == nullptr )
{
return false;
}
}
if( g_filterPort > 0 && msg.listenPort != g_filterPort )
{
return false;
}
return true;
}
void CaptureThread( ClientSession* session, const std::string& address, uint16_t port, int64_t memoryLimit, const std::string& outputFile )
{
printf( "Connecting to %s:%u...\n", address.c_str(), port );
fflush( stdout );
tracy::Worker worker( address.c_str(), port, memoryLimit );
int result = WaitForConnection( worker );
if( result != 0 )
{
session->active = false;
session->finished = true;
return;
}
printf( "Connected to %s (%s:%u)\n", session->programName.c_str(), address.c_str(), port );
int64_t firstTime = worker.GetFirstTime();
session->stats.firstTime = firstTime;
while( session->active && worker.IsConnected() )
{
auto& lock = worker.GetMbpsDataLock();
lock.lock();
float mbps = worker.GetMbpsData().back();
int64_t txTotal = worker.GetDataTransferred();
lock.unlock();
session->stats.mbps = mbps;
session->stats.txBytes = txTotal;
session->stats.memUsage = tracy::memUsage.load( std::memory_order_relaxed );
std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
}
printf( "\nSaving %s...", outputFile.c_str() );
fflush( stdout );
auto file = std::unique_ptr<tracy::FileWrite>( tracy::FileWrite::Open( outputFile.c_str(), tracy::FileCompression::Zstd, 3, 4 ) );
if( file )
{
worker.Write( *file, false );
file->Finish();
auto stats = file->GetCompressionStatistics();
session->fileSize = stats.second;
AnsiPrintf( ANSI_GREEN ANSI_BOLD, " done!\n" );
}
else
{
AnsiPrintf( ANSI_RED ANSI_BOLD, " failed!\n" );
}
session->finished = true;
session->active = false;
}
void RefreshDisplay( const std::string& listenAddr )
{
if( !IsTerminal() ) return;
printf( "\033[H\033[J" );
size_t clientCount = 0;
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
clientCount = g_clients.size();
}
printf( "[%zu client%s] Listening on %s:%u... Press Ctrl+C to stop\n\n", clientCount, clientCount == 1 ? "" : "s", listenAddr.c_str(), g_listenPort );
int idx = 1;
float totalMbps = 0;
int64_t totalTx = 0;
int64_t totalMem = 0;
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
for( auto& [id, session] : g_clients )
{
printf( " [%d] %s @ %s:%u ", idx, session->programName.c_str(), session->address.c_str(), session->port );
if( session->finished )
{
printf( "finished (" );
printf( "%s", tracy::MemSizeToString( session->fileSize.load() ) );
printf( ")" );
}
else if( session->active )
{
float mbps = session->stats.mbps.load();
int64_t tx = session->stats.txBytes.load();
int64_t mem = session->stats.memUsage.load();
int64_t firstTime = session->stats.firstTime.load();
printf( "%.1f Mbps | %s | %s", mbps, tracy::MemSizeToString( tx ), tracy::MemSizeToString( mem ) );
totalMbps += mbps;
totalTx += tx;
totalMem += mem;
}
else
{
printf( "connecting..." );
}
printf( "\n" );
idx++;
}
}
printf( "\nTotal: %.1f Mbps | %s | Mem: %s", totalMbps, tracy::MemSizeToString( totalTx ), tracy::MemSizeToString( totalMem ) );
fflush( stdout );
}
void PrintSummary()
{
printf( "\n\n=== Capture Summary ===\n" );
std::lock_guard<std::mutex> lock( g_clientsMutex );
int idx = 1;
int64_t totalSize = 0;
for( auto& [id, session] : g_clients )
{
int64_t size = session->fileSize.load();
totalSize += size;
printf( " [%d] %s @ %s:%u -> %s (%s)\n", idx++, session->programName.c_str(), session->address.c_str(), session->port, session->outputFile.c_str(), tracy::MemSizeToString( size ) );
}
printf( "\nTotal: %zu files, %s\n", g_clients.size(), tracy::MemSizeToString( totalSize ) );
}
int main( int argc, char** argv )
{
#ifdef _WIN32
if( !AttachConsole( ATTACH_PARENT_PROCESS ) )
{
AllocConsole();
SetConsoleMode( GetStdHandle( STD_OUTPUT_HANDLE ), 0x07 );
}
#endif
std::string outputDir;
static struct option longOptions[] = {
{ "output", required_argument, nullptr, 'o' },
{ "port", required_argument, nullptr, 'p' },
{ "memory", required_argument, nullptr, 'm' },
{ "filter-name", required_argument, nullptr, 1 },
{ "filter-port", required_argument, nullptr, 2 },
{ "help", no_argument, nullptr, 'h' },
{ nullptr, 0, nullptr, 0 }
};
int c;
while( ( c = getopt_long( argc, argv, "o:p:m:h", longOptions, nullptr ) ) != -1 )
{
switch( c )
{
case 'o':
outputDir = optarg;
break;
case 'p':
g_listenPort = atoi( optarg );
break;
case 'm':
g_memoryLimit = std::clamp( atoll( optarg ), 1ll, 999ll ) * tracy::GetPhysicalMemorySize() / 100;
break;
case 1:
g_filterName = optarg;
break;
case 2:
g_filterPort = atoi( optarg );
break;
case 'h':
default:
Usage();
break;
}
}
if( outputDir.empty() )
{
fprintf( stderr, "Error: Output directory is required (-o)\n" );
Usage();
}
std::filesystem::create_directories( outputDir );
InitTerminalDetection();
#ifdef _WIN32
signal( SIGINT, SigInt );
#else
struct sigaction sigint, oldsigint;
memset( &sigint, 0, sizeof( sigint ) );
sigint.sa_handler = SigInt;
sigaction( SIGINT, &sigint, &oldsigint );
#endif
tracy::UdpListen udpSocket;
if( !udpSocket.Listen( g_listenPort ) )
{
fprintf( stderr, "Error: Failed to listen on port %u\n", g_listenPort );
return 1;
}
printf( "Listening on 0.0.0.0:%u... Press Ctrl+C to stop\n", g_listenPort );
printf( "Output directory: %s\n", outputDir.c_str() );
const std::string listenAddr = "0.0.0.0";
auto lastDisplay = std::chrono::steady_clock::now();
while( !g_shutdown )
{
tracy::IpAddress clientAddr;
size_t len;
const char* msg = udpSocket.Read( len, clientAddr, 100 );
if( msg )
{
auto parsed = tracy::ParseBroadcastMessage( msg, len );
if( parsed )
{
std::string clientId = std::to_string( parsed->pid ) + "_" + clientAddr.GetText() + "_" + std::to_string( parsed->listenPort );
bool isNew = false;
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
isNew = g_clients.find( clientId ) == g_clients.end();
}
if( isNew && MatchesFilters( *parsed ) )
{
std::string addressStr = clientAddr.GetText();
std::string outputFile = GenerateOutputFilename( outputDir, parsed->programName, addressStr, parsed->listenPort );
auto session = new ClientSession();
session->id = clientId;
session->programName = parsed->programName;
session->address = addressStr;
session->port = parsed->listenPort;
session->outputFile = outputFile;
session->active = true;
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
g_clients[clientId] = session;
}
session->thread = std::thread( CaptureThread, session, addressStr, parsed->listenPort, g_memoryLimit, outputFile );
}
}
}
auto now = std::chrono::steady_clock::now();
if( std::chrono::duration_cast<std::chrono::milliseconds>( now - lastDisplay ).count() >= 100 )
{
RefreshDisplay( listenAddr );
lastDisplay = now;
}
}
printf( "\n\nShutting down... waiting for %zu client(s) to finish\n", g_clients.size() );
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
for( auto& [id, session] : g_clients )
{
session->active = false;
}
}
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
for( auto& [id, session] : g_clients )
{
if( session->thread.joinable() )
{
session->thread.join();
}
}
}
PrintSummary();
{
std::lock_guard<std::mutex> lock( g_clientsMutex );
for( auto& [id, session] : g_clients )
{
delete session;
}
g_clients.clear();
}
return 0;
}
================================================
FILE: cmake/CPM.cmake
================================================
# CPM.cmake - CMake's missing package manager
# ===========================================
# See https://github.com/cpm-cmake/CPM.cmake for usage and update instructions.
#
# MIT License
# -----------
#[[
Copyright (c) 2019-2023 Lars Melchior and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
]]
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
# Initialize logging prefix
if(NOT CPM_INDENT)
set(CPM_INDENT
"CPM:"
CACHE INTERNAL ""
)
endif()
if(NOT COMMAND cpm_message)
function(cpm_message)
message(${ARGV})
endfunction()
endif()
set(CURRENT_CPM_VERSION 0.40.2)
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
if(CPM_DIRECTORY)
if(NOT CPM_DIRECTORY STREQUAL CPM_CURRENT_DIRECTORY)
if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION)
message(
AUTHOR_WARNING
"${CPM_INDENT} \
A dependency is using a more recent CPM version (${CURRENT_CPM_VERSION}) than the current project (${CPM_VERSION}). \
It is recommended to upgrade CPM to the most recent version. \
See https://github.com/cpm-cmake/CPM.cmake for more information."
)
endif()
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
include(FetchContent)
endif()
return()
endif()
get_property(
CPM_INITIALIZED GLOBAL ""
PROPERTY CPM_INITIALIZED
SET
)
if(CPM_INITIALIZED)
return()
endif()
endif()
if(CURRENT_CPM_VERSION MATCHES "development-version")
message(
WARNING "${CPM_INDENT} Your project is using an unstable development version of CPM.cmake. \
Please update to a recent release if possible. \
See https://github.com/cpm-cmake/CPM.cmake for details."
)
endif()
set_property(GLOBAL PROPERTY CPM_INITIALIZED true)
macro(cpm_set_policies)
# the policy allows us to change options without caching
cmake_policy(SET CMP0077 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
# the policy allows us to change set(CACHE) without caching
if(POLICY CMP0126)
cmake_policy(SET CMP0126 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0126 NEW)
endif()
# The policy uses the download time for timestamp, instead of the timestamp in the archive. This
# allows for proper rebuilds when a projects url changes
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0135 NEW)
endif()
# treat relative git repository paths as being relative to the parent project's remote
if(POLICY CMP0150)
cmake_policy(SET CMP0150 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0150 NEW)
endif()
endmacro()
cpm_set_policies()
option(CPM_USE_LOCAL_PACKAGES "Always try to use `find_package` to get dependencies"
$ENV{CPM_USE_LOCAL_PACKAGES}
)
option(CPM_LOCAL_PACKAGES_ONLY "Only use `find_package` to get dependencies"
$ENV{CPM_LOCAL_PACKAGES_ONLY}
)
option(CPM_DOWNLOAD_ALL "Always download dependencies from source" $ENV{CPM_DOWNLOAD_ALL})
option(CPM_DONT_UPDATE_MODULE_PATH "Don't update the module path to allow using find_package"
$ENV{CPM_DONT_UPDATE_MODULE_PATH}
)
option(CPM_DONT_CREATE_PACKAGE_LOCK "Don't create a package lock file in the binary path"
$ENV{CPM_DONT_CREATE_PACKAGE_LOCK}
)
option(CPM_INCLUDE_ALL_IN_PACKAGE_LOCK
"Add all packages added through CPM.cmake to the package lock"
$ENV{CPM_INCLUDE_ALL_IN_PACKAGE_LOCK}
)
option(CPM_USE_NAMED_CACHE_DIRECTORIES
"Use additional directory of package name in cache on the most nested level."
$ENV{CPM_USE_NAMED_CACHE_DIRECTORIES}
)
set(CPM_VERSION
${CURRENT_CPM_VERSION}
CACHE INTERNAL ""
)
set(CPM_DIRECTORY
${CPM_CURRENT_DIRECTORY}
CACHE INTERNAL ""
)
set(CPM_FILE
${CMAKE_CURRENT_LIST_FILE}
CACHE INTERNAL ""
)
set(CPM_PACKAGES
""
CACHE INTERNAL ""
)
set(CPM_DRY_RUN
OFF
CACHE INTERNAL "Don't download or configure dependencies (for testing)"
)
if(DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_SOURCE_CACHE_DEFAULT $ENV{CPM_SOURCE_CACHE})
else()
set(CPM_SOURCE_CACHE_DEFAULT ${CMAKE_CURRENT_BINARY_DIR}/.cpm-cache)
endif()
set(CPM_SOURCE_CACHE
${CPM_SOURCE_CACHE_DEFAULT}
CACHE PATH "Directory to download CPM dependencies"
)
if(NOT CPM_DONT_UPDATE_MODULE_PATH)
set(CPM_MODULE_PATH
"${CMAKE_BINARY_DIR}/CPM_modules"
CACHE INTERNAL ""
)
# remove old modules
file(REMOVE_RECURSE ${CPM_MODULE_PATH})
file(MAKE_DIRECTORY ${CPM_MODULE_PATH})
# locally added CPM modules should override global packages
set(CMAKE_MODULE_PATH "${CPM_MODULE_PATH};${CMAKE_MODULE_PATH}")
endif()
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
set(CPM_PACKAGE_LOCK_FILE
"${CMAKE_BINARY_DIR}/cpm-package-lock.cmake"
CACHE INTERNAL ""
)
file(WRITE ${CPM_PACKAGE_LOCK_FILE}
"# CPM Package Lock\n# This file should be committed to version control\n\n"
)
endif()
include(FetchContent)
# Try to infer package name from git repository uri (path or url)
function(cpm_package_name_from_git_uri URI RESULT)
if("${URI}" MATCHES "([^/:]+)/?.git/?$")
set(${RESULT}
${CMAKE_MATCH_1}
PARENT_SCOPE
)
else()
unset(${RESULT} PARENT_SCOPE)
endif()
endfunction()
# Try to infer package name and version from a url
function(cpm_package_name_and_ver_from_url url outName outVer)
if(url MATCHES "[/\\?]([a-zA-Z0-9_\\.-]+)\\.(tar|tar\\.gz|tar\\.bz2|zip|ZIP)(\\?|/|$)")
# We matched an archive
set(filename "${CMAKE_MATCH_1}")
if(filename MATCHES "([a-zA-Z0-9_\\.-]+)[_-]v?(([0-9]+\\.)*[0-9]+[a-zA-Z0-9]*)")
# We matched <name>-<version> (ie foo-1.2.3)
set(${outName}
"${CMAKE_MATCH_1}"
PARENT_SCOPE
)
set(${outVer}
"${CMAKE_MATCH_2}"
PARENT_SCOPE
)
elseif(filename MATCHES "(([0-9]+\\.)+[0-9]+[a-zA-Z0-9]*)")
# We couldn't find a name, but we found a version
#
# In many cases (which we don't handle here) the url would look something like
# `irrelevant/ACTUAL_PACKAGE_NAME/irrelevant/1.2.3.zip`. In such a case we can't possibly
# distinguish the package name from the irrelevant bits. Moreover if we try to match the
# package name from the filename, we'd get bogus at best.
unset(${outName} PARENT_SCOPE)
set(${outVer}
"${CMAKE_MATCH_1}"
PARENT_SCOPE
)
else()
# Boldly assume that the file name is the package name.
#
# Yes, something like `irrelevant/ACTUAL_NAME/irrelevant/download.zip` will ruin our day, but
# such cases should be quite rare. No popular service does this... we think.
set(${outName}
"${filename}"
PARENT_SCOPE
)
unset(${outVer} PARENT_SCOPE)
endif()
else()
# No ideas yet what to do with non-archives
unset(${outName} PARENT_SCOPE)
unset(${outVer} PARENT_SCOPE)
endif()
endfunction()
function(cpm_find_package NAME VERSION)
string(REPLACE " " ";" EXTRA_ARGS "${ARGN}")
find_package(${NAME} ${VERSION} ${EXTRA_ARGS} QUIET)
if(${CPM_ARGS_NAME}_FOUND)
if(DEFINED ${CPM_ARGS_NAME}_VERSION)
set(VERSION ${${CPM_ARGS_NAME}_VERSION})
endif()
cpm_message(STATUS "${CPM_INDENT} Using local package ${CPM_ARGS_NAME}@${VERSION}")
CPMRegisterPackage(${CPM_ARGS_NAME} "${VERSION}")
set(CPM_PACKAGE_FOUND
YES
PARENT_SCOPE
)
else()
set(CPM_PACKAGE_FOUND
NO
PARENT_SCOPE
)
endif()
endfunction()
# Create a custom FindXXX.cmake module for a CPM package This prevents `find_package(NAME)` from
# finding the system library
function(cpm_create_module_file Name)
if(NOT CPM_DONT_UPDATE_MODULE_PATH)
# erase any previous modules
file(WRITE ${CPM_MODULE_PATH}/Find${Name}.cmake
"include(\"${CPM_FILE}\")\n${ARGN}\nset(${Name}_FOUND TRUE)"
)
endif()
endfunction()
# Find a package locally or fallback to CPMAddPackage
function(CPMFindPackage)
set(oneValueArgs NAME VERSION GIT_TAG FIND_PACKAGE_ARGUMENTS)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "" ${ARGN})
if(NOT DEFINED CPM_ARGS_VERSION)
if(DEFINED CPM_ARGS_GIT_TAG)
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
endif()
endif()
set(downloadPackage ${CPM_DOWNLOAD_ALL})
if(DEFINED CPM_DOWNLOAD_${CPM_ARGS_NAME})
set(downloadPackage ${CPM_DOWNLOAD_${CPM_ARGS_NAME}})
elseif(DEFINED ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
set(downloadPackage $ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
endif()
if(downloadPackage)
CPMAddPackage(${ARGN})
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
if(NOT CPM_PACKAGE_FOUND)
CPMAddPackage(${ARGN})
cpm_export_variables(${CPM_ARGS_NAME})
endif()
endfunction()
# checks if a package has been added before
function(cpm_check_if_package_already_added CPM_ARGS_NAME CPM_ARGS_VERSION)
if("${CPM_ARGS_NAME}" IN_LIST CPM_PACKAGES)
CPMGetPackageVersion(${CPM_ARGS_NAME} CPM_PACKAGE_VERSION)
if("${CPM_PACKAGE_VERSION}" VERSION_LESS "${CPM_ARGS_VERSION}")
message(
WARNING
"${CPM_INDENT} Requires a newer version of ${CPM_ARGS_NAME} (${CPM_ARGS_VERSION}) than currently included (${CPM_PACKAGE_VERSION})."
)
endif()
cpm_get_fetch_properties(${CPM_ARGS_NAME})
set(${CPM_ARGS_NAME}_ADDED NO)
set(CPM_PACKAGE_ALREADY_ADDED
YES
PARENT_SCOPE
)
cpm_export_variables(${CPM_ARGS_NAME})
else()
set(CPM_PACKAGE_ALREADY_ADDED
NO
PARENT_SCOPE
)
endif()
endfunction()
# Parse the argument of CPMAddPackage in case a single one was provided and convert it to a list of
# arguments which can then be parsed idiomatically. For example gh:foo/bar@1.2.3 will be converted
# to: GITHUB_REPOSITORY;foo/bar;VERSION;1.2.3
function(cpm_parse_add_package_single_arg arg outArgs)
# Look for a scheme
if("${arg}" MATCHES "^([a-zA-Z]+):(.+)$")
string(TOLOWER "${CMAKE_MATCH_1}" scheme)
set(uri "${CMAKE_MATCH_2}")
# Check for CPM-specific schemes
if(scheme STREQUAL "gh")
set(out "GITHUB_REPOSITORY;${uri}")
set(packageType "git")
elseif(scheme STREQUAL "gl")
set(out "GITLAB_REPOSITORY;${uri}")
set(packageType "git")
elseif(scheme STREQUAL "bb")
set(out "BITBUCKET_REPOSITORY;${uri}")
set(packageType "git")
# A CPM-specific scheme was not found. Looks like this is a generic URL so try to determine
# type
elseif(arg MATCHES ".git/?(@|#|$)")
set(out "GIT_REPOSITORY;${arg}")
set(packageType "git")
else()
# Fall back to a URL
set(out "URL;${arg}")
set(packageType "archive")
# We could also check for SVN since FetchContent supports it, but SVN is so rare these days.
# We just won't bother with the additional complexity it will induce in this function. SVN is
# done by multi-arg
endif()
else()
if(arg MATCHES ".git/?(@|#|$)")
set(out "GIT_REPOSITORY;${arg}")
set(packageType "git")
else()
# Give up
message(FATAL_ERROR "${CPM_INDENT} Can't determine package type of '${arg}'")
endif()
endif()
# For all packages we interpret @... as version. Only replace the last occurrence. Thus URIs
# containing '@' can be used
string(REGEX REPLACE "@([^@]+)$" ";VERSION;\\1" out "${out}")
# Parse the rest according to package type
if(packageType STREQUAL "git")
# For git repos we interpret #... as a tag or branch or commit hash
string(REGEX REPLACE "#([^#]+)$" ";GIT_TAG;\\1" out "${out}")
elseif(packageType STREQUAL "archive")
# For archives we interpret #... as a URL hash.
string(REGEX REPLACE "#([^#]+)$" ";URL_HASH;\\1" out "${out}")
# We don't try to parse the version if it's not provided explicitly. cpm_get_version_from_url
# should do this at a later point
else()
# We should never get here. This is an assertion and hitting it means there's a problem with the
# code above. A packageType was set, but not handled by this if-else.
message(FATAL_ERROR "${CPM_INDENT} Unsupported package type '${packageType}' of '${arg}'")
endif()
set(${outArgs}
${out}
PARENT_SCOPE
)
endfunction()
# Check that the working directory for a git repo is clean
function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean)
find_package(Git REQUIRED)
if(NOT GIT_EXECUTABLE)
# No git executable, assume directory is clean
set(${isClean}
TRUE
PARENT_SCOPE
)
return()
endif()
# check for uncommitted changes
execute_process(
COMMAND ${GIT_EXECUTABLE} status --porcelain
RESULT_VARIABLE resultGitStatus
OUTPUT_VARIABLE repoStatus
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
WORKING_DIRECTORY ${repoPath}
)
if(resultGitStatus)
# not supposed to happen, assume clean anyway
message(WARNING "${CPM_INDENT} Calling git status on folder ${repoPath} failed")
set(${isClean}
TRUE
PARENT_SCOPE
)
return()
endif()
if(NOT "${repoStatus}" STREQUAL "")
set(${isClean}
FALSE
PARENT_SCOPE
)
return()
endif()
# check for committed changes
execute_process(
COMMAND ${GIT_EXECUTABLE} diff -s --exit-code ${gitTag}
RESULT_VARIABLE resultGitDiff
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_QUIET
WORKING_DIRECTORY ${repoPath}
)
if(${resultGitDiff} EQUAL 0)
set(${isClean}
TRUE
PARENT_SCOPE
)
else()
set(${isClean}
FALSE
PARENT_SCOPE
)
endif()
endfunction()
# Add PATCH_COMMAND to CPM_ARGS_UNPARSED_ARGUMENTS. This method consumes a list of files in ARGN
# then generates a `PATCH_COMMAND` appropriate for `ExternalProject_Add()`. This command is appended
# to the parent scope's `CPM_ARGS_UNPARSED_ARGUMENTS`.
function(cpm_add_patches)
# Return if no patch files are supplied.
if(NOT ARGN)
return()
endif()
# Find the patch program.
find_program(PATCH_EXECUTABLE patch)
if(WIN32 AND NOT PATCH_EXECUTABLE)
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
# it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe.
find_package(Git QUIET)
if(GIT_EXECUTABLE)
get_filename_component(extra_search_path ${GIT_EXECUTABLE} DIRECTORY)
get_filename_component(extra_search_path_1up ${extra_search_path} DIRECTORY)
get_filename_component(extra_search_path_2up ${extra_search_path_1up} DIRECTORY)
find_program(
PATCH_EXECUTABLE patch HINTS "${extra_search_path_1up}/usr/bin"
"${extra_search_path_2up}/usr/bin"
)
endif()
endif()
if(NOT PATCH_EXECUTABLE)
message(FATAL_ERROR "Couldn't find `patch` executable to use with PATCHES keyword.")
endif()
# Create a temporary
set(temp_list ${CPM_ARGS_UNPARSED_ARGUMENTS})
# Ensure each file exists (or error out) and add it to the list.
set(first_item True)
foreach(PATCH_FILE ${ARGN})
# Make sure the patch file exists, if we can't find it, try again in the current directory.
if(NOT EXISTS "${PATCH_FILE}")
if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}")
message(FATAL_ERROR "Couldn't find patch file: '${PATCH_FILE}'")
endif()
set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}")
endif()
# Convert to absolute path for use with patch file command.
get_filename_component(PATCH_FILE "${PATCH_FILE}" ABSOLUTE)
# The first patch entry must be preceded by "PATCH_COMMAND" while the following items are
# preceded by "&&".
if(first_item)
set(first_item False)
list(APPEND temp_list "PATCH_COMMAND")
else()
list(APPEND temp_list "&&")
endif()
# Add the patch command to the list
list(APPEND temp_list "${PATCH_EXECUTABLE}" "-p1" "<" "${PATCH_FILE}")
endforeach()
# Move temp out into parent scope.
set(CPM_ARGS_UNPARSED_ARGUMENTS
${temp_list}
PARENT_SCOPE
)
endfunction()
# method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload
# FetchContent calls. As these are internal cmake properties, this method should be used carefully
# and may need modification in future CMake versions. Source:
# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake#L1152
function(cpm_override_fetchcontent contentName)
cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "")
if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "")
message(FATAL_ERROR "${CPM_INDENT} Unsupported arguments: ${arg_UNPARSED_ARGUMENTS}")
endif()
string(TOLOWER ${contentName} contentNameLower)
set(prefix "_FetchContent_${contentNameLower}")
set(propertyName "${prefix}_sourceDir")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} "${arg_SOURCE_DIR}")
set(propertyName "${prefix}_binaryDir")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} "${arg_BINARY_DIR}")
set(propertyName "${prefix}_populated")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} TRUE)
endfunction()
# Download and add a package from source
function(CPMAddPackage)
cpm_set_policies()
list(LENGTH ARGN argnLength)
if(argnLength EQUAL 1)
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
# The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;")
endif()
set(oneValueArgs
NAME
FORCE
VERSION
GIT_TAG
DOWNLOAD_ONLY
GITHUB_REPOSITORY
GITLAB_REPOSITORY
BITBUCKET_REPOSITORY
GIT_REPOSITORY
SOURCE_DIR
FIND_PACKAGE_ARGUMENTS
NO_CACHE
SYSTEM
GIT_SHALLOW
EXCLUDE_FROM_ALL
SOURCE_SUBDIR
CUSTOM_CACHE_KEY
)
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND PATCHES)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
# Set default values for arguments
if(NOT DEFINED CPM_ARGS_VERSION)
if(DEFINED CPM_ARGS_GIT_TAG)
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
endif()
endif()
if(CPM_ARGS_DOWNLOAD_ONLY)
set(DOWNLOAD_ONLY ${CPM_ARGS_DOWNLOAD_ONLY})
else()
set(DOWNLOAD_ONLY NO)
endif()
if(DEFINED CPM_ARGS_GITHUB_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://github.com/${CPM_ARGS_GITHUB_REPOSITORY}.git")
elseif(DEFINED CPM_ARGS_GITLAB_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://gitlab.com/${CPM_ARGS_GITLAB_REPOSITORY}.git")
elseif(DEFINED CPM_ARGS_BITBUCKET_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://bitbucket.org/${CPM_ARGS_BITBUCKET_REPOSITORY}.git")
endif()
if(DEFINED CPM_ARGS_GIT_REPOSITORY)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_REPOSITORY ${CPM_ARGS_GIT_REPOSITORY})
if(NOT DEFINED CPM_ARGS_GIT_TAG)
set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION})
endif()
# If a name wasn't provided, try to infer it from the git repo
if(NOT DEFINED CPM_ARGS_NAME)
cpm_package_name_from_git_uri(${CPM_ARGS_GIT_REPOSITORY} CPM_ARGS_NAME)
endif()
endif()
set(CPM_SKIP_FETCH FALSE)
if(DEFINED CPM_ARGS_GIT_TAG)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_TAG ${CPM_ARGS_GIT_TAG})
# If GIT_SHALLOW is explicitly specified, honor the value.
if(DEFINED CPM_ARGS_GIT_SHALLOW)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW ${CPM_ARGS_GIT_SHALLOW})
endif()
endif()
if(DEFINED CPM_ARGS_URL)
# If a name or version aren't provided, try to infer them from the URL
list(GET CPM_ARGS_URL 0 firstUrl)
cpm_package_name_and_ver_from_url(${firstUrl} nameFromUrl verFromUrl)
# If we fail to obtain name and version from the first URL, we could try other URLs if any.
# However multiple URLs are expected to be quite rare, so for now we won't bother.
# If the caller provided their own name and version, they trump the inferred ones.
if(NOT DEFINED CPM_ARGS_NAME)
set(CPM_ARGS_NAME ${nameFromUrl})
endif()
if(NOT DEFINED CPM_ARGS_VERSION)
set(CPM_ARGS_VERSION ${verFromUrl})
endif()
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS URL "${CPM_ARGS_URL}")
endif()
# Check for required arguments
if(NOT DEFINED CPM_ARGS_NAME)
message(
FATAL_ERROR
"${CPM_INDENT} 'NAME' was not provided and couldn't be automatically inferred for package added with arguments: '${ARGN}'"
)
endif()
# Check if package has been added before
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}")
if(CPM_PACKAGE_ALREADY_ADDED)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
# Check for manual overrides
if(NOT CPM_ARGS_FORCE AND NOT "${CPM_${CPM_ARGS_NAME}_SOURCE}" STREQUAL "")
set(PACKAGE_SOURCE ${CPM_${CPM_ARGS_NAME}_SOURCE})
set(CPM_${CPM_ARGS_NAME}_SOURCE "")
CPMAddPackage(
NAME "${CPM_ARGS_NAME}"
SOURCE_DIR "${PACKAGE_SOURCE}"
EXCLUDE_FROM_ALL "${CPM_ARGS_EXCLUDE_FROM_ALL}"
SYSTEM "${CPM_ARGS_SYSTEM}"
PATCHES "${CPM_ARGS_PATCHES}"
OPTIONS "${CPM_ARGS_OPTIONS}"
SOURCE_SUBDIR "${CPM_ARGS_SOURCE_SUBDIR}"
DOWNLOAD_ONLY "${DOWNLOAD_ONLY}"
FORCE True
)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
# Check for available declaration
if(NOT CPM_ARGS_FORCE AND NOT "${CPM_DECLARATION_${CPM_ARGS_NAME}}" STREQUAL "")
set(declaration ${CPM_DECLARATION_${CPM_ARGS_NAME}})
set(CPM_DECLARATION_${CPM_ARGS_NAME} "")
CPMAddPackage(${declaration})
cpm_export_variables(${CPM_ARGS_NAME})
# checking again to ensure version and option compatibility
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}")
return()
endif()
if(NOT CPM_ARGS_FORCE)
if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
if(CPM_PACKAGE_FOUND)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
if(CPM_LOCAL_PACKAGES_ONLY)
message(
SEND_ERROR
"${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION})"
)
endif()
endif()
endif()
CPMRegisterPackage("${CPM_ARGS_NAME}" "${CPM_ARGS_VERSION}")
if(DEFINED CPM_ARGS_GIT_TAG)
set(PACKAGE_INFO "${CPM_ARGS_GIT_TAG}")
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
set(PACKAGE_INFO "${CPM_ARGS_SOURCE_DIR}")
else()
set(PACKAGE_INFO "${CPM_ARGS_VERSION}")
endif()
if(DEFINED FETCHCONTENT_BASE_DIR)
# respect user's FETCHCONTENT_BASE_DIR if set
set(CPM_FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR})
else()
set(CPM_FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/_deps)
endif()
cpm_add_patches(${CPM_ARGS_PATCHES})
if(DEFINED CPM_ARGS_DOWNLOAD_COMMAND)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
if(NOT IS_ABSOLUTE ${CPM_ARGS_SOURCE_DIR})
# Expand `CPM_ARGS_SOURCE_DIR` relative path. This is important because EXISTS doesn't work
# for relative paths.
get_filename_component(
source_directory ${CPM_ARGS_SOURCE_DIR} REALPATH BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
else()
set(source_directory ${CPM_ARGS_SOURCE_DIR})
endif()
if(NOT EXISTS ${source_directory})
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
# remove timestamps so CMake will re-download the dependency
file(REMOVE_RECURSE "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild")
endif()
elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE)
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
list(SORT origin_parameters)
if(CPM_ARGS_CUSTOM_CACHE_KEY)
# Application set a custom unique directory name
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${CPM_ARGS_CUSTOM_CACHE_KEY})
elseif(CPM_USE_NAMED_CACHE_DIRECTORIES)
string(SHA1 origin_hash "${origin_parameters};NEW_CACHE_STRUCTURE_TAG")
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash}/${CPM_ARGS_NAME})
else()
string(SHA1 origin_hash "${origin_parameters}")
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash})
endif()
# Expand `download_directory` relative path. This is important because EXISTS doesn't work for
# relative paths.
get_filename_component(download_directory ${download_directory} ABSOLUTE)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${download_directory})
if(CPM_SOURCE_CACHE)
file(LOCK ${download_directory}/../cmake.lock)
endif()
if(EXISTS ${download_directory})
if(CPM_SOURCE_CACHE)
file(LOCK ${download_directory}/../cmake.lock RELEASE)
endif()
cpm_store_fetch_properties(
${CPM_ARGS_NAME} "${download_directory}"
"${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build"
)
cpm_get_fetch_properties("${CPM_ARGS_NAME}")
if(DEFINED CPM_ARGS_GIT_TAG AND NOT (PATCH_COMMAND IN_LIST CPM_ARGS_UNPARSED_ARGUMENTS))
# warn if cache has been changed since checkout
cpm_check_git_working_dir_is_clean(${download_directory} ${CPM_ARGS_GIT_TAG} IS_CLEAN)
if(NOT ${IS_CLEAN})
message(
WARNING "${CPM_INDENT} Cache for ${CPM_ARGS_NAME} (${download_directory}) is dirty"
)
endif()
endif()
cpm_add_subdirectory(
"${CPM_ARGS_NAME}"
"${DOWNLOAD_ONLY}"
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
"${${CPM_ARGS_NAME}_BINARY_DIR}"
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
"${CPM_ARGS_SYSTEM}"
"${CPM_ARGS_OPTIONS}"
)
set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}")
# As the source dir is already cached/populated, we override the call to FetchContent.
set(CPM_SKIP_FETCH TRUE)
cpm_override_fetchcontent(
"${lower_case_name}" SOURCE_DIR "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
BINARY_DIR "${${CPM_ARGS_NAME}_BINARY_DIR}"
)
else()
# Enable shallow clone when GIT_TAG is not a commit hash. Our guess may not be accurate, but
# it should guarantee no commit hash get mis-detected.
if(NOT DEFINED CPM_ARGS_GIT_SHALLOW)
cpm_is_git_tag_commit_hash("${CPM_ARGS_GIT_TAG}" IS_HASH)
if(NOT ${IS_HASH})
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW TRUE)
endif()
endif()
# remove timestamps so CMake will re-download the dependency
file(REMOVE_RECURSE ${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild)
set(PACKAGE_INFO "${PACKAGE_INFO} to ${download_directory}")
endif()
endif()
cpm_create_module_file(${CPM_ARGS_NAME} "CPMAddPackage(\"${ARGN}\")")
if(CPM_PACKAGE_LOCK_ENABLED)
if((CPM_ARGS_VERSION AND NOT CPM_ARGS_SOURCE_DIR) OR CPM_INCLUDE_ALL_IN_PACKAGE_LOCK)
cpm_add_to_package_lock(${CPM_ARGS_NAME} "${ARGN}")
elseif(CPM_ARGS_SOURCE_DIR)
cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "local directory")
else()
cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "${ARGN}")
endif()
endif()
cpm_message(
STATUS "${CPM_INDENT} Adding package ${CPM_ARGS_NAME}@${CPM_ARGS_VERSION} (${PACKAGE_INFO})"
)
if(NOT CPM_SKIP_FETCH)
# CMake 3.28 added EXCLUDE, SYSTEM (3.25), and SOURCE_SUBDIR (3.18) to FetchContent_Declare.
# Calling FetchContent_MakeAvailable will then internally forward these options to
# add_subdirectory. Up until these changes, we had to call FetchContent_Populate and
# add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30.
set(fetchContentDeclareExtraArgs "")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
if(${CPM_ARGS_EXCLUDE_FROM_ALL})
list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL)
endif()
if(${CPM_ARGS_SYSTEM})
list(APPEND fetchContentDeclareExtraArgs SYSTEM)
endif()
if(DEFINED CPM_ARGS_SOURCE_SUBDIR)
list(APPEND fetchContentDeclareExtraArgs SOURCE_SUBDIR ${CPM_ARGS_SOURCE_SUBDIR})
endif()
# For CMake version <3.28 OPTIONS are parsed in cpm_add_subdirectory
if(CPM_ARGS_OPTIONS AND NOT DOWNLOAD_ONLY)
foreach(OPTION ${CPM_ARGS_OPTIONS})
cpm_parse_option("${OPTION}")
set(${OPTION_KEY} "${OPTION_VALUE}")
endforeach()
endif()
endif()
cpm_declare_fetch(
"${CPM_ARGS_NAME}" ${fetchContentDeclareExtraArgs} "${CPM_ARGS_UNPARSED_ARGUMENTS}"
)
cpm_fetch_package("${CPM_ARGS_NAME}" ${DOWNLOAD_ONLY} populated ${CPM_ARGS_UNPARSED_ARGUMENTS})
if(CPM_SOURCE_CACHE AND download_directory)
file(LOCK ${download_directory}/../cmake.lock RELEASE)
endif()
if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.28.0")
cpm_add_subdirectory(
"${CPM_ARGS_NAME}"
"${DOWNLOAD_ONLY}"
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
"${${CPM_ARGS_NAME}_BINARY_DIR}"
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
"${CPM_ARGS_SYSTEM}"
"${CPM_ARGS_OPTIONS}"
)
endif()
cpm_get_fetch_properties("${CPM_ARGS_NAME}")
endif()
set(${CPM_ARGS_NAME}_ADDED YES)
cpm_export_variables("${CPM_ARGS_NAME}")
endfunction()
# Fetch a previously declared package
macro(CPMGetPackage Name)
if(DEFINED "CPM_DECLARATION_${Name}")
CPMAddPackage(NAME ${Name})
else()
message(SEND_ERROR "${CPM_INDENT} Cannot retrieve package ${Name}: no declaration available")
endif()
endmacro()
# export variables available to the caller to the parent scope expects ${CPM_ARGS_NAME} to be set
macro(cpm_export_variables name)
set(${name}_SOURCE_DIR
"${${name}_SOURCE_DIR}"
PARENT_SCOPE
)
set(${name}_BINARY_DIR
"${${name}_BINARY_DIR}"
PARENT_SCOPE
)
set(${name}_ADDED
"${${name}_ADDED}"
PARENT_SCOPE
)
set(CPM_LAST_PACKAGE_NAME
"${name}"
PARENT_SCOPE
)
endmacro()
# declares a package, so that any call to CPMAddPackage for the package name will use these
# arguments instead. Previous declarations will not be overridden.
macro(CPMDeclarePackage Name)
if(NOT DEFINED "CPM_DECLARATION_${Name}")
set("CPM_DECLARATION_${Name}" "${ARGN}")
endif()
endmacro()
function(cpm_add_to_package_lock Name)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
cpm_prettify_package_arguments(PRETTY_ARGN false ${ARGN})
file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name}\n${PRETTY_ARGN})\n")
endif()
endfunction()
function(cpm_add_comment_to_package_lock Name)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
cpm_prettify_package_arguments(PRETTY_ARGN true ${ARGN})
file(APPEND ${CPM_PACKAGE_LOCK_FILE}
"# ${Name} (unversioned)\n# CPMDeclarePackage(${Name}\n${PRETTY_ARGN}#)\n"
)
endif()
endfunction()
# includes the package lock file if it exists and creates a target `cpm-update-package-lock` to
# update it
macro(CPMUsePackageLock file)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
get_filename_component(CPM_ABSOLUTE_PACKAGE_LOCK_PATH ${file} ABSOLUTE)
if(EXISTS ${CPM_ABSOLUTE_PACKAGE_LOCK_PATH})
include(${CPM_ABSOLUTE_PACKAGE_LOCK_PATH})
endif()
if(NOT TARGET cpm-update-package-lock)
add_custom_target(
cpm-update-package-lock COMMAND ${CMAKE_COMMAND} -E copy ${CPM_PACKAGE_LOCK_FILE}
${CPM_ABSOLUTE_PACKAGE_LOCK_PATH}
)
endif()
set(CPM_PACKAGE_LOCK_ENABLED true)
endif()
endmacro()
# registers a package that has been added to CPM
function(CPMRegisterPackage PACKAGE VERSION)
list(APPEND CPM_PACKAGES ${PACKAGE})
set(CPM_PACKAGES
${CPM_PACKAGES}
CACHE INTERNAL ""
)
set("CPM_PACKAGE_${PACKAGE}_VERSION"
${VERSION}
CACHE INTERNAL ""
)
endfunction()
# retrieve the current version of the package to ${OUTPUT}
function(CPMGetPackageVersion PACKAGE OUTPUT)
set(${OUTPUT}
"${CPM_PACKAGE_${PACKAGE}_VERSION}"
PARENT_SCOPE
)
endfunction()
# declares a package in FetchContent_Declare
function(cpm_declare_fetch PACKAGE)
if(${CPM_DRY_RUN})
cpm_message(STATUS "${CPM_INDENT} Package not declared (dry run)")
return()
endif()
FetchContent_Declare(${PACKAGE} ${ARGN})
endfunction()
# returns properties for a package previously defined by cpm_declare_fetch
function(cpm_get_fetch_properties PACKAGE)
if(${CPM_DRY_RUN})
return()
endif()
set(${PACKAGE}_SOURCE_DIR
"${CPM_PACKAGE_${PACKAGE}_SOURCE_DIR}"
PARENT_SCOPE
)
set(${PACKAGE}_BINARY_DIR
"${CPM_PACKAGE_${PACKAGE}_BINARY_DIR}"
PARENT_SCOPE
)
endfunction()
function(cpm_store_fetch_properties PACKAGE source_dir binary_dir)
if(${CPM_DRY_RUN})
return()
endif()
set(CPM_PACKAGE_${PACKAGE}_SOURCE_DIR
"${source_dir}"
CACHE INTERNAL ""
)
set(CPM_PACKAGE_${PACKAGE}_BINARY_DIR
"${binary_dir}"
CACHE INTERNAL ""
)
endfunction()
# adds a package as a subdirectory if viable, according to provided options
function(
cpm_add_subdirectory
PACKAGE
DOWNLOAD_ONLY
SOURCE_DIR
BINARY_DIR
EXCLUDE
SYSTEM
OPTIONS
)
if(NOT DOWNLOAD_ONLY AND EXISTS ${SOURCE_DIR}/CMakeLists.txt)
set(addSubdirectoryExtraArgs "")
if(EXCLUDE)
list(APPEND addSubdirectoryExtraArgs EXCLUDE_FROM_ALL)
endif()
if("${SYSTEM}" AND "${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.25")
# https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html#prop_dir:SYSTEM
list(APPEND addSubdirectoryExtraArgs SYSTEM)
endif()
if(OPTIONS)
foreach(OPTION ${OPTIONS})
cpm_parse_option("${OPTION}")
set(${OPTION_KEY} "${OPTION_VALUE}")
endforeach()
endif()
set(CPM_OLD_INDENT "${CPM_INDENT}")
set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:")
add_subdirectory(${SOURCE_DIR} ${BINARY_DIR} ${addSubdirectoryExtraArgs})
set(CPM_INDENT "${CPM_OLD_INDENT}")
endif()
endfunction()
# downloads a previously declared package via FetchContent and exports the variables
# `${PACKAGE}_SOURCE_DIR` and `${PACKAGE}_BINARY_DIR` to the parent scope
function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY populated)
set(${populated}
FALSE
PARENT_SCOPE
)
if(${CPM_DRY_RUN})
cpm_message(STATUS "${CPM_INDENT} Package ${PACKAGE} not fetched (dry run)")
return()
endif()
FetchContent_GetProperties(${PACKAGE})
string(TOLOWER "${PACKAGE}" lower_case_name)
if(NOT ${lower_case_name}_POPULATED)
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
if(DOWNLOAD_ONLY)
# MakeAvailable will call add_subdirectory internally which is not what we want when
# DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the
# build
FetchContent_Populate(
${PACKAGE}
SOURCE_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-src"
BINARY_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build"
SUBBUILD_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild"
${ARGN}
)
else()
FetchContent_MakeAvailable(${PACKAGE})
endif()
else()
FetchContent_Populate(${PACKAGE})
endif()
set(${populated}
TRUE
PARENT_SCOPE
)
endif()
cpm_store_fetch_properties(
${CPM_ARGS_NAME} ${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR}
)
set(${PACKAGE}_SOURCE_DIR
${${lower_case_name}_SOURCE_DIR}
PARENT_SCOPE
)
set(${PACKAGE}_BINARY_DIR
${${lower_case_name}_BINARY_DIR}
PARENT_SCOPE
)
endfunction()
# splits a package option
function(cpm_parse_option OPTION)
string(REGEX MATCH "^[^ ]+" OPTION_KEY "${OPTION}")
string(LENGTH "${OPTION}" OPTION_LENGTH)
string(LENGTH "${OPTION_KEY}" OPTION_KEY_LENGTH)
if(OPTION_KEY_LENGTH STREQUAL OPTION_LENGTH)
# no value for key provided, assume user wants to set option to "ON"
set(OPTION_VALUE "ON")
else()
math(EXPR OPTION_KEY_LENGTH "${OPTION_KEY_LENGTH}+1")
string(SUBSTRING "${OPTION}" "${OPTION_KEY_LENGTH}" "-1" OPTION_VALUE)
endif()
set(OPTION_KEY
"${OPTION_KEY}"
PARENT_SCOPE
)
set(OPTION_VALUE
"${OPTION_VALUE}"
PARENT_SCOPE
)
endfunction()
# guesses the package version from a git tag
function(cpm_get_version_from_git_tag GIT_TAG RESULT)
string(LENGTH ${GIT_TAG} length)
if(length EQUAL 40)
# GIT_TAG is probably a git hash
set(${RESULT}
0
PARENT_SCOPE
)
else()
string(REGEX MATCH "v?([0123456789.]*).*" _ ${GIT_TAG})
set(${RESULT}
${CMAKE_MATCH_1}
PARENT_SCOPE
)
endif()
endfunction()
# guesses if the git tag is a commit hash or an actual tag or a branch name.
function(cpm_is_git_tag_commit_hash GIT_TAG RESULT)
string(LENGTH "${GIT_TAG}" length)
# full hash has 40 characters, and short hash has at least 7 characters.
if(length LESS 7 OR length GREATER 40)
set(${RESULT}
0
PARENT_SCOPE
)
else()
if(${GIT_TAG} MATCHES "^[a-fA-F0-9]+$")
set(${RESULT}
1
PARENT_SCOPE
)
else()
set(${RESULT}
0
PARENT_SCOPE
)
endif()
endif()
endfunction()
function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
set(oneValueArgs
NAME
FORCE
VERSION
GIT_TAG
DOWNLOAD_ONLY
GITHUB_REPOSITORY
GITLAB_REPOSITORY
BITBUCKET_REPOSITORY
GIT_REPOSITORY
SOURCE_DIR
FIND_PACKAGE_ARGUMENTS
NO_CACHE
SYSTEM
GIT_SHALLOW
EXCLUDE_FROM_ALL
SOURCE_SUBDIR
)
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(oneArgName ${oneValueArgs})
if(DEFINED CPM_ARGS_${oneArgName})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
if(${oneArgName} STREQUAL "SOURCE_DIR")
string(REPLACE ${CMAKE_SOURCE_DIR} "\${CMAKE_SOURCE_DIR}" CPM_ARGS_${oneArgName}
${CPM_ARGS_${oneArgName}}
)
endif()
string(APPEND PRETTY_OUT_VAR " ${oneArgName} ${CPM_ARGS_${oneArgName}}\n")
endif()
endforeach()
foreach(multiArgName ${multiValueArgs})
if(DEFINED CPM_ARGS_${multiArgName})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " ${multiArgName}\n")
foreach(singleOption ${CPM_ARGS_${multiArgName}})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " \"${singleOption}\"\n")
endforeach()
endif()
endforeach()
if(NOT "${CPM_ARGS_UNPARSED_ARGUMENTS}" STREQUAL "")
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " ")
foreach(CPM_ARGS_UNPARSED_ARGUMENT ${CPM_ARGS_UNPARSED_ARGUMENTS})
string(APPEND PRETTY_OUT_VAR " ${CPM_ARGS_UNPARSED_ARGUMENT}")
endforeach()
string(APPEND PRETTY_OUT_VAR "\n")
endif()
set(${OUT_VAR}
${PRETTY_OUT_VAR}
PARENT_SCOPE
)
endfunction()
================================================
FILE: cmake/ECMFindModuleHelpers.cmake
================================================
#.rst:
# ECMFindModuleHelpers
# --------------------
#
# Helper macros for find modules: ecm_find_package_version_check(),
# ecm_find_package_parse_components() and
# ecm_find_package_handle_library_components().
#
# ::
#
# ecm_find_package_version_check(<name>)
#
# Prints warnings if the CMake version or the project's required CMake version
# is older than that required by extra-cmake-modules.
#
# ::
#
# ecm_find_package_parse_components(<name>
# RESULT_VAR <variable>
# KNOWN_COMPONENTS <component1> [<component2> [...]]
# [SKIP_DEPENDENCY_HANDLING])
#
# This macro will populate <variable> with a list of components found in
# <name>_FIND_COMPONENTS, after checking that all those components are in the
# list of KNOWN_COMPONENTS; if there are any unknown components, it will print
# an error or warning (depending on the value of <name>_FIND_REQUIRED) and call
# return().
#
# The order of components in <variable> is guaranteed to match the order they
# are listed in the KNOWN_COMPONENTS argument.
#
# If SKIP_DEPENDENCY_HANDLING is not set, for each component the variable
# <name>_<component>_component_deps will be checked for dependent components.
# If <component> is listed in <name>_FIND_COMPONENTS, then all its (transitive)
# dependencies will also be added to <variable>.
#
# ::
#
# ecm_find_package_handle_library_components(<name>
# COMPONENTS <component> [<component> [...]]
# [SKIP_DEPENDENCY_HANDLING])
# [SKIP_PKG_CONFIG])
#
# Creates an imported library target for each component. The operation of this
# macro depends on the presence of a number of CMake variables.
#
# The <name>_<component>_lib variable should contain the name of this library,
# and <name>_<component>_header variable should contain the name of a header
# file associated with it (whatever relative path is normally passed to
# '#include'). <name>_<component>_header_subdir variable can be used to specify
# which subdirectory of the include path the headers will be found in.
# ecm_find_package_components() will then search for the library
# and include directory (creating appropriate cache variables) and create an
# imported library target named <name>::<component>.
#
# Additional variables can be used to provide additional information:
#
# If SKIP_PKG_CONFIG, the <name>_<component>_pkg_config variable is set, and
# pkg-config is found, the pkg-config module given by
# <name>_<component>_pkg_config will be searched for and used to help locate the
# library and header file. It will also be used to set
# <name>_<component>_VERSION.
#
# Note that if version information is found via pkg-config,
# <name>_<component>_FIND_VERSION can be set to require a particular version
# for each component.
#
# If SKIP_DEPENDENCY_HANDLING is not set, the INTERFACE_LINK_LIBRARIES property
# of the imported target for <component> will be set to contain the imported
# targets for the components listed in <name>_<component>_component_deps.
# <component>_FOUND will also be set to false if any of the components in
# <name>_<component>_component_deps are not found. This requires the components
# in <name>_<component>_component_deps to be listed before <component> in the
# COMPONENTS argument.
#
# The following variables will be set:
#
# ``<name>_TARGETS``
# the imported targets
# ``<name>_LIBRARIES``
# the found libraries
# ``<name>_INCLUDE_DIRS``
# the combined required include directories for the components
# ``<name>_DEFINITIONS``
# the "other" CFLAGS provided by pkg-config, if any
# ``<name>_VERSION``
# the value of ``<name>_<component>_VERSION`` for the first component that
# has this variable set (note that components are searched for in the order
# they are passed to the macro), although if it is already set, it will not
# be altered
#
# Note that these variables are never cleared, so if
# ecm_find_package_handle_library_components() is called multiple times with
# different components (typically because of multiple find_package() calls) then
# ``<name>_TARGETS``, for example, will contain all the targets found in any
# call (although no duplicates).
#
# Since pre-1.0.0.
#=============================================================================
# Copyright 2014 Alex Merry <alex.merry@kde.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
macro(ecm_find_package_version_check module_name)
if(CMAKE_VERSION VERSION_LESS 2.8.12)
message(FATAL_ERROR "CMake 2.8.12 is required by Find${module_name}.cmake")
endif()
if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Find${module_name}.cmake")
endif()
endmacro()
macro(ecm_find_package_parse_components module_name)
set(ecm_fppc_options SKIP_DEPENDENCY_HANDLING)
set(ecm_fppc_oneValueArgs RESULT_VAR)
set(ecm_fppc_multiValueArgs KNOWN_COMPONENTS DEFAULT_COMPONENTS)
cmake_parse_arguments(ECM_FPPC "${ecm_fppc_options}" "${ecm_fppc_oneValueArgs}" "${ecm_fppc_multiValueArgs}" ${ARGN})
if(ECM_FPPC_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_find_package_parse_components: ${ECM_FPPC_UNPARSED_ARGUMENTS}")
endif()
if(NOT ECM_FPPC_RESULT_VAR)
message(FATAL_ERROR "Missing RESULT_VAR argument to ecm_find_package_parse_components")
endif()
if(NOT ECM_FPPC_KNOWN_COMPONENTS)
message(FATAL_ERROR "Missing KNOWN_COMPONENTS argument to ecm_find_package_parse_components")
endif()
if(NOT ECM_FPPC_DEFAULT_COMPONENTS)
set(ECM_FPPC_DEFAULT_COMPONENTS ${ECM_FPPC_KNOWN_COMPONENTS})
endif()
if(${module_name}_FIND_COMPONENTS)
set(ecm_fppc_requestedComps ${${module_name}_FIND_COMPONENTS})
if(NOT ECM_FPPC_SKIP_DEPENDENCY_HANDLING)
# Make sure deps are included
foreach(ecm_fppc_comp ${ecm_fppc_requestedComps})
foreach(ecm_fppc_dep_comp ${${module_name}_${ecm_fppc_comp}_component_deps})
list(FIND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}" ecm_fppc_index)
if("${ecm_fppc_index}" STREQUAL "-1")
if(NOT ${module_name}_FIND_QUIETLY)
message(STATUS "${module_name}: ${ecm_fppc_comp} requires ${${module_name}_${ecm_fppc_comp}_component_deps}")
endif()
list(APPEND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}")
endif()
endforeach()
endforeach()
else()
message(STATUS "Skipping dependency handling for ${module_name}")
endif()
list(REMOVE_DUPLICATES ecm_fppc_requestedComps)
# This makes sure components are listed in the same order as
# KNOWN_COMPONENTS (potentially important for inter-dependencies)
set(${ECM_FPPC_RESULT_VAR})
foreach(ecm_fppc_comp ${ECM_FPPC_KNOWN_COMPONENTS})
list(FIND ecm_fppc_requestedComps "${ecm_fppc_comp}" ecm_fppc_index)
if(NOT "${ecm_fppc_index}" STREQUAL "-1")
list(APPEND ${ECM_FPPC_RESULT_VAR} "${ecm_fppc_comp}")
list(REMOVE_AT ecm_fppc_requestedComps ${ecm_fppc_index})
endif()
endforeach()
# if there are any left, they are unknown components
if(ecm_fppc_requestedComps)
set(ecm_fppc_msgType STATUS)
if(${module_name}_FIND_REQUIRED)
set(ecm_fppc_msgType FATAL_ERROR)
endif()
if(NOT ${module_name}_FIND_QUIETLY)
message(${ecm_fppc_msgType} "${module_name}: requested unknown components ${ecm_fppc_requestedComps}")
endif()
return()
endif()
else()
set(${ECM_FPPC_RESULT_VAR} ${ECM_FPPC_DEFAULT_COMPONENTS})
endif()
endmacro()
macro(ecm_find_package_handle_library_components module_name)
set(ecm_fpwc_options SKIP_PKG_CONFIG SKIP_DEPENDENCY_HANDLING)
set(ecm_fpwc_oneValueArgs)
set(ecm_fpwc_multiValueArgs COMPONENTS)
cmake_parse_arguments(ECM_FPWC "${ecm_fpwc_options}" "${ecm_fpwc_oneValueArgs}" "${ecm_fpwc_multiValueArgs}" ${ARGN})
if(ECM_FPWC_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_find_package_handle_components: ${ECM_FPWC_UNPARSED_ARGUMENTS}")
endif()
if(NOT ECM_FPWC_COMPONENTS)
message(FATAL_ERROR "Missing COMPONENTS argument to ecm_find_package_handle_components")
endif()
include(FindPackageHandleStandardArgs)
find_package(PkgConfig QUIET)
foreach(ecm_fpwc_comp ${ECM_FPWC_COMPONENTS})
set(ecm_fpwc_dep_vars)
set(ecm_fpwc_dep_targets)
if(NOT SKIP_DEPENDENCY_HANDLING)
foreach(ecm_fpwc_dep ${${module_name}_${ecm_fpwc_comp}_component_deps})
list(APPEND ecm_fpwc_dep_vars "${module_name}_${ecm_fpwc_dep}_FOUND")
list(APPEND ecm_fpwc_dep_targets "${module_name}::${ecm_fpwc_dep}")
endforeach()
endif()
if(NOT ECM_FPWC_SKIP_PKG_CONFIG AND ${module_name}_${ecm_fpwc_comp}_pkg_config)
pkg_check_modules(PKG_${module_name}_${ecm_fpwc_comp} QUIET
${${module_name}_${ecm_fpwc_comp}_pkg_config})
endif()
find_path(${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
NAMES ${${module_name}_${ecm_fpwc_comp}_header}
HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_INCLUDE_DIRS}
PATH_SUFFIXES ${${module_name}_${ecm_fpwc_comp}_header_subdir}
)
find_library(${module_name}_${ecm_fpwc_comp}_LIBRARY
NAMES ${${module_name}_${ecm_fpwc_comp}_lib}
HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_LIBRARY_DIRS}
)
set(${module_name}_${ecm_fpwc_comp}_VERSION "${PKG_${module_name}_${ecm_fpwc_comp}_VERSION}")
if(NOT ${module_name}_VERSION)
set(${module_name}_VERSION ${${module_name}_${ecm_fpwc_comp}_VERSION})
endif()
set(_name_mismatched_arg)
if(NOT CMAKE_VERSION VERSION_LESS 3.17)
set(_name_mismatched_arg NAME_MISMATCHED)
endif()
find_package_handle_standard_args(${module_name}_${ecm_fpwc_comp}
FOUND_VAR
${module_name}_${ecm_fpwc_comp}_FOUND
REQUIRED_VARS
${module_name}_${ecm_fpwc_comp}_LIBRARY
${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
${ecm_fpwc_dep_vars}
VERSION_VAR
${module_name}_${ecm_fpwc_comp}_VERSION
${_name_mismatched_arg}
)
mark_as_advanced(
${module_name}_${ecm_fpwc_comp}_LIBRARY
${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR
)
if(${module_name}_${ecm_fpwc_comp}_FOUND)
list(APPEND ${module_name}_LIBRARIES
"${${module_name}_${ecm_fpwc_comp}_LIBRARY}")
list(APPEND ${module_name}_INCLUDE_DIRS
"${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}")
set(${module_name}_DEFINITIONS
${${module_name}_DEFINITIONS}
${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS})
if(NOT TARGET ${module_name}::${ecm_fpwc_comp})
add_library(${module_name}::${ecm_fpwc_comp} UNKNOWN IMPORTED)
set_target_properties(${module_name}::${ecm_fpwc_comp} PROPERTIES
IMPORTED_LOCATION "${${module_name}_${ecm_fpwc_comp}_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${ecm_fpwc_dep_targets}"
)
endif()
list(APPEND ${module_name}_TARGETS
"${module_name}::${ecm_fpwc_comp}")
endif()
endforeach()
if(${module_name}_LIBRARIES)
list(REMOVE_DUPLICATES ${module_name}_LIBRARIES)
endif()
if(${module_name}_INCLUDE_DIRS)
list(REMOVE_DUPLICATES ${module_name}_INCLUDE_DIRS)
endif()
if(${module_name}_DEFINITIONS)
list(REMOVE_DUPLICATES ${module_name}_DEFINITIONS)
endif()
if(${module_name}_TARGETS)
list(REMOVE_DUPLICATES ${module_name}_TARGETS)
endif()
endmacro()
================================================
FILE: cmake/FindWaylandScanner.cmake
================================================
#.rst:
# FindWaylandScanner
# ------------------
#
# Try to find wayland-scanner.
#
# If the wayland-scanner executable is not in your PATH, you can provide
# an alternative name or full path location with the ``WaylandScanner_EXECUTABLE``
# variable.
#
# This will define the following variables:
#
# ``WaylandScanner_FOUND``
# True if wayland-scanner is available.
#
# ``WaylandScanner_EXECUTABLE``
# The wayland-scanner executable.
#
# If ``WaylandScanner_FOUND`` is TRUE, it will also define the following imported
# target:
#
# ``Wayland::Scanner``
# The wayland-scanner executable.
#
# This module provides the following functions to generate C protocol
# implementations:
#
# - ``ecm_add_wayland_client_protocol``
# - ``ecm_add_wayland_server_protocol``
#
# ::
#
# ecm_add_wayland_client_protocol(<source_files_var>
# PROTOCOL <xmlfile>
# BASENAME <basename>)
#
# Generate Wayland client protocol files from ``<xmlfile>`` XML
# definition for the ``<basename>`` interface and append those files
# to ``<source_files_var>``.
#
# ::
#
# ecm_add_wayland_server_protocol(<source_files_var>
# PROTOCOL <xmlfile>
# BASENAME <basename>)
#
# Generate Wayland server protocol files from ``<xmlfile>`` XML
# definition for the ``<basename>`` interface and append those files
# to ``<source_files_var>``.
#
# Since 1.4.0.
#=============================================================================
# Copyright 2012-2014 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpers.cmake)
ecm_find_package_version_check(WaylandScanner)
# Find wayland-scanner
find_program(WaylandScanner_EXECUTABLE NAMES wayland-scanner)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(WaylandScanner
FOUND_VAR
WaylandScanner_FOUND
REQUIRED_VARS
WaylandScanner_EXECUTABLE
)
mark_as_advanced(WaylandScanner_EXECUTABLE)
if(NOT TARGET Wayland::Scanner AND WaylandScanner_FOUND)
add_executable(Wayland::Scanner IMPORTED)
set_target_properties(Wayland::Scanner PROPERTIES
IMPORTED_LOCATION "${WaylandScanner_EXECUTABLE}"
)
endif()
include(FeatureSummary)
set_package_properties(WaylandScanner PROPERTIES
URL "https://wayland.freedesktop.org/"
DESCRIPTION "Executable that converts XML protocol files to C code"
)
function(ecm_add_wayland_client_protocol out_var)
# Parse arguments
set(oneValueArgs PROTOCOL BASENAME)
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN})
if(ARGS_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown keywords given to ecm_add_wayland_client_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"")
endif()
get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE)
set(_client_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-client-protocol.h")
set(_code "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-protocol.c")
set_source_files_properties(${_client_header} GENERATED)
set_source_files_properties(${_code} GENERATED)
set_property(SOURCE ${_client_header} PROPERTY SKIP_AUTOMOC ON)
add_custom_command(OUTPUT "${_client_header}"
COMMAND ${WaylandScanner_EXECUTABLE} client-header ${_infile} ${_client_header}
DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile}
VERBATIM
)
add_custom_command(OUTPUT "${_code}"
COMMAND ${WaylandScanner_EXECUTABLE} private-code ${_infile} ${_code}
DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile} ${_client_header}
VERBATIM
)
list(APPEND ${out_var} "${_client_header}" "${_code}")
set(${out_var} ${${out_var}} PARENT_SCOPE)
endfunction()
function(ecm_add_wayland_server_protocol out_var)
# Parse arguments
set(oneValueArgs PROTOCOL BASENAME)
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN})
if(ARGS_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown keywords given to ecm_add_wayland_server_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"")
endif()
ecm_add_wayland_client_protocol(${out_var}
PROTOCOL ${ARGS_PROTOCOL}
BASENAME ${ARGS_BASENAME})
get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE)
set(_server_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-server-protocol.h")
set_property(SOURCE ${_server_header} PROPERTY SKIP_AUTOMOC ON)
set_source_files_properties(${_server_header} GENERATED)
add_custom_command(OUTPUT "${_server_header}"
COMMAND ${WaylandScanner_EXECUTABLE} server-header ${_infile} ${_server_header}
DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile}
VERBATIM
)
list(APPEND ${out_var} "${_server_header}")
set(${out_var} ${${out_var}} PARENT_SCOPE)
endfunction()
================================================
FILE: cmake/config.cmake
================================================
if (NOT NO_ISA_EXTENSIONS)
include(CheckCXXCompilerFlag)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
CHECK_CXX_COMPILER_FLAG("-mcpu=native" COMPILER_SUPPORTS_MCPU_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
add_compile_options(-mcpu=native)
endif()
else()
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
add_compile_options(-march=native)
endif()
endif()
if(WIN32)
add_compile_options(/arch:AVX2)
endif()
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT LEGACY)
set(USE_WAYLAND ON)
else()
set(USE_WAYLAND OFF)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "15")
me
gitextract_20zgvja4/
├── .clang-format
├── .clang-tidy
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ ├── emscripten.yml
│ ├── latex.yml
│ ├── linux.yml
│ ├── macos.yml
│ ├── release.yml
│ └── windows.yml
├── .gitignore
├── .mailmap
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── CMakeLists.txt
├── Config.cmake.in
├── LICENSE
├── NEWS
├── README.md
├── capture/
│ ├── CMakeLists.txt
│ └── src/
│ ├── CaptureOutput.cpp
│ ├── CaptureOutput.hpp
│ ├── capture.cpp
│ └── capturedaemon.cpp
├── cmake/
│ ├── CPM.cmake
│ ├── ECMFindModuleHelpers.cmake
│ ├── FindWaylandScanner.cmake
│ ├── config.cmake
│ ├── gl3w-extra-symbols.patch
│ ├── imgui-emscripten.patch
│ ├── imgui-loader.patch
│ ├── ppqsort-nodebug.patch
│ ├── server.cmake
│ ├── tidy-cmake.patch
│ ├── vendor.cmake
│ └── version.cmake
├── csvexport/
│ ├── CMakeLists.txt
│ └── src/
│ └── csvexport.cpp
├── dtl/
│ ├── Diff.hpp
│ ├── Diff3.hpp
│ ├── Lcs.hpp
│ ├── Sequence.hpp
│ ├── Ses.hpp
│ ├── dtl.hpp
│ ├── functors.hpp
│ └── variables.hpp
├── examples/
│ ├── OpenCLVectorAdd/
│ │ ├── CMakeLists.txt
│ │ └── OpenCLVectorAdd.cpp
│ ├── ToyPathTracer/
│ │ ├── .gitignore
│ │ ├── README
│ │ ├── Source/
│ │ │ ├── Config.h
│ │ │ ├── MathSimd.h
│ │ │ ├── Maths.cpp
│ │ │ ├── Maths.h
│ │ │ ├── Test.cpp
│ │ │ ├── Test.h
│ │ │ └── enkiTS/
│ │ │ ├── Atomics.h
│ │ │ ├── LockLessMultiReadPipe.h
│ │ │ ├── TaskScheduler.cpp
│ │ │ ├── TaskScheduler.h
│ │ │ ├── TaskScheduler_c.cpp
│ │ │ ├── TaskScheduler_c.h
│ │ │ └── Threads.h
│ │ ├── Windows/
│ │ │ ├── ComputeShader.hlsl
│ │ │ ├── PixelShader.hlsl
│ │ │ ├── TestCpu.sln
│ │ │ ├── TestCpu.vcxproj
│ │ │ ├── TestCpu.vcxproj.filters
│ │ │ ├── TestWin.cpp
│ │ │ └── VertexShader.hlsl
│ │ └── license.md
│ └── fibers.cpp
├── extra/
│ ├── color-hot.cpp
│ ├── color.cpp
│ ├── desktop/
│ │ ├── application-tracy.xml
│ │ └── tracy.desktop
│ ├── dxt1divtable.c
│ ├── dxt1table.c
│ ├── identify.cpp
│ ├── make-build.sh
│ ├── natvis.py
│ ├── rdotbl.c
│ ├── uarch/
│ │ ├── TracyMicroArchitecture.hpp
│ │ └── uarch.cpp
│ ├── update-meson-version.sh
│ ├── version.cpp
│ └── x11_colors.c
├── getopt/
│ ├── getopt.c
│ └── getopt.h
├── icon/
│ └── application-tracy.copying
├── import/
│ ├── CMakeLists.txt
│ └── src/
│ ├── import-chrome.cpp
│ └── import-fuchsia.cpp
├── manual/
│ ├── filter.lua
│ ├── latex2md.sh
│ ├── techdoc.tex
│ ├── tracy.bib
│ ├── tracy.md
│ └── tracy.tex
├── merge/
│ ├── CMakeLists.txt
│ └── src/
│ └── merge.cpp
├── meson.build
├── meson.options
├── profiler/
│ ├── CMakeLists.txt
│ ├── helpers/
│ │ ├── CMakeLists.txt
│ │ └── embed.cpp
│ ├── src/
│ │ ├── Backend.hpp
│ │ ├── BackendEmscripten.cpp
│ │ ├── BackendGlfw.cpp
│ │ ├── BackendWayland.cpp
│ │ ├── ConnectionHistory.cpp
│ │ ├── ConnectionHistory.hpp
│ │ ├── EmscriptenShim.hpp
│ │ ├── Filters.cpp
│ │ ├── Filters.hpp
│ │ ├── Fonts.cpp
│ │ ├── Fonts.hpp
│ │ ├── HttpRequest.cpp
│ │ ├── HttpRequest.hpp
│ │ ├── ImGuiContext.cpp
│ │ ├── ImGuiContext.hpp
│ │ ├── IsElevated.cpp
│ │ ├── IsElevated.hpp
│ │ ├── ResolvService.cpp
│ │ ├── ResolvService.hpp
│ │ ├── RunQueue.cpp
│ │ ├── RunQueue.hpp
│ │ ├── WindowPosition.cpp
│ │ ├── WindowPosition.hpp
│ │ ├── font/
│ │ │ └── Font Awesome 6 Free-Solid-900.otf
│ │ ├── icon.hpp
│ │ ├── ini.c
│ │ ├── ini.h
│ │ ├── llm/
│ │ │ ├── system.prompt.md
│ │ │ └── tools.json
│ │ ├── main.cpp
│ │ ├── profiler/
│ │ │ ├── IconsFontAwesome6.h
│ │ │ ├── TracyAchievementData.cpp
│ │ │ ├── TracyAchievements.cpp
│ │ │ ├── TracyAchievements.hpp
│ │ │ ├── TracyBadVersion.cpp
│ │ │ ├── TracyBadVersion.hpp
│ │ │ ├── TracyBuzzAnim.hpp
│ │ │ ├── TracyColor.cpp
│ │ │ ├── TracyColor.hpp
│ │ │ ├── TracyConfig.cpp
│ │ │ ├── TracyConfig.hpp
│ │ │ ├── TracyDecayValue.hpp
│ │ │ ├── TracyEmbed.cpp
│ │ │ ├── TracyEmbed.hpp
│ │ │ ├── TracyEventDebug.cpp
│ │ │ ├── TracyEventDebug.hpp
│ │ │ ├── TracyFileselector.cpp
│ │ │ ├── TracyFileselector.hpp
│ │ │ ├── TracyFilesystem.cpp
│ │ │ ├── TracyFilesystem.hpp
│ │ │ ├── TracyImGui.cpp
│ │ │ ├── TracyImGui.hpp
│ │ │ ├── TracyLlm.cpp
│ │ │ ├── TracyLlm.hpp
│ │ │ ├── TracyLlmApi.cpp
│ │ │ ├── TracyLlmApi.hpp
│ │ │ ├── TracyLlmChat.cpp
│ │ │ ├── TracyLlmChat.hpp
│ │ │ ├── TracyLlmEmbeddings.cpp
│ │ │ ├── TracyLlmEmbeddings.hpp
│ │ │ ├── TracyLlmTools.cpp
│ │ │ ├── TracyLlmTools.hpp
│ │ │ ├── TracyLockHelpers.hpp
│ │ │ ├── TracyManualData.cpp
│ │ │ ├── TracyManualData.hpp
│ │ │ ├── TracyMarkdown.cpp
│ │ │ ├── TracyMarkdown.hpp
│ │ │ ├── TracyMicroArchitecture.cpp
│ │ │ ├── TracyMicroArchitecture.hpp
│ │ │ ├── TracyMouse.cpp
│ │ │ ├── TracyMouse.hpp
│ │ │ ├── TracyProtoHistory.cpp
│ │ │ ├── TracyProtoHistory.hpp
│ │ │ ├── TracySourceContents.cpp
│ │ │ ├── TracySourceContents.hpp
│ │ │ ├── TracySourceTokenizer.cpp
│ │ │ ├── TracySourceTokenizer.hpp
│ │ │ ├── TracySourceView.cpp
│ │ │ ├── TracySourceView.hpp
│ │ │ ├── TracyStorage.cpp
│ │ │ ├── TracyStorage.hpp
│ │ │ ├── TracyTexture.cpp
│ │ │ ├── TracyTexture.hpp
│ │ │ ├── TracyTimelineContext.hpp
│ │ │ ├── TracyTimelineController.cpp
│ │ │ ├── TracyTimelineController.hpp
│ │ │ ├── TracyTimelineDraw.hpp
│ │ │ ├── TracyTimelineItem.cpp
│ │ │ ├── TracyTimelineItem.hpp
│ │ │ ├── TracyTimelineItemCpuData.cpp
│ │ │ ├── TracyTimelineItemCpuData.hpp
│ │ │ ├── TracyTimelineItemGpu.cpp
│ │ │ ├── TracyTimelineItemGpu.hpp
│ │ │ ├── TracyTimelineItemPlot.cpp
│ │ │ ├── TracyTimelineItemPlot.hpp
│ │ │ ├── TracyTimelineItemThread.cpp
│ │ │ ├── TracyTimelineItemThread.hpp
│ │ │ ├── TracyUserData.cpp
│ │ │ ├── TracyUserData.hpp
│ │ │ ├── TracyUtility.cpp
│ │ │ ├── TracyUtility.hpp
│ │ │ ├── TracyView.cpp
│ │ │ ├── TracyView.hpp
│ │ │ ├── TracyViewData.hpp
│ │ │ ├── TracyView_Annotations.cpp
│ │ │ ├── TracyView_Callstack.cpp
│ │ │ ├── TracyView_Compare.cpp
│ │ │ ├── TracyView_ConnectionState.cpp
│ │ │ ├── TracyView_ContextSwitch.cpp
│ │ │ ├── TracyView_CpuData.cpp
│ │ │ ├── TracyView_FindZone.cpp
│ │ │ ├── TracyView_FlameGraph.cpp
│ │ │ ├── TracyView_FrameOverview.cpp
│ │ │ ├── TracyView_FrameTimeline.cpp
│ │ │ ├── TracyView_FrameTree.cpp
│ │ │ ├── TracyView_GpuTimeline.cpp
│ │ │ ├── TracyView_Locks.cpp
│ │ │ ├── TracyView_Manual.cpp
│ │ │ ├── TracyView_Memory.cpp
│ │ │ ├── TracyView_Messages.cpp
│ │ │ ├── TracyView_Navigation.cpp
│ │ │ ├── TracyView_NotificationArea.cpp
│ │ │ ├── TracyView_Options.cpp
│ │ │ ├── TracyView_Playback.cpp
│ │ │ ├── TracyView_Plots.cpp
│ │ │ ├── TracyView_Ranges.cpp
│ │ │ ├── TracyView_Samples.cpp
│ │ │ ├── TracyView_Statistics.cpp
│ │ │ ├── TracyView_Timeline.cpp
│ │ │ ├── TracyView_TraceInfo.cpp
│ │ │ ├── TracyView_Utility.cpp
│ │ │ ├── TracyView_ZoneInfo.cpp
│ │ │ ├── TracyView_ZoneTimeline.cpp
│ │ │ ├── TracyWeb.cpp
│ │ │ └── TracyWeb.hpp
│ │ ├── stb_image.h
│ │ ├── stb_image_resize.h
│ │ ├── winmain.cpp
│ │ ├── winmainArchDiscovery.cpp
│ │ ├── zigzag01.hpp
│ │ ├── zigzag02.hpp
│ │ ├── zigzag04.hpp
│ │ ├── zigzag08.hpp
│ │ ├── zigzag16.hpp
│ │ └── zigzag32.hpp
│ ├── wasm/
│ │ ├── httpd.py
│ │ └── index.html
│ └── win32/
│ ├── Tracy.manifest
│ └── Tracy.rc
├── public/
│ ├── TracyClient.F90
│ ├── TracyClient.cpp
│ ├── client/
│ │ ├── TracyAlloc.cpp
│ │ ├── TracyArmCpuTable.hpp
│ │ ├── TracyCallstack.cpp
│ │ ├── TracyCallstack.h
│ │ ├── TracyCallstack.hpp
│ │ ├── TracyCpuid.hpp
│ │ ├── TracyDebug.hpp
│ │ ├── TracyDxt1.cpp
│ │ ├── TracyDxt1.hpp
│ │ ├── TracyFastVector.hpp
│ │ ├── TracyKCore.cpp
│ │ ├── TracyKCore.hpp
│ │ ├── TracyLock.hpp
│ │ ├── TracyOverride.cpp
│ │ ├── TracyProfiler.cpp
│ │ ├── TracyProfiler.hpp
│ │ ├── TracyRingBuffer.hpp
│ │ ├── TracyRocprof.cpp
│ │ ├── TracyScoped.hpp
│ │ ├── TracyStringHelpers.hpp
│ │ ├── TracySysPower.cpp
│ │ ├── TracySysPower.hpp
│ │ ├── TracySysTime.cpp
│ │ ├── TracySysTime.hpp
│ │ ├── TracySysTrace.cpp
│ │ ├── TracySysTrace.hpp
│ │ ├── TracyThread.hpp
│ │ ├── tracy_SPSCQueue.h
│ │ ├── tracy_concurrentqueue.h
│ │ ├── tracy_rpmalloc.cpp
│ │ ├── tracy_rpmalloc.hpp
│ │ └── windows/
│ │ └── TracyETW.cpp
│ ├── common/
│ │ ├── TracyAlign.hpp
│ │ ├── TracyAlloc.hpp
│ │ ├── TracyApi.h
│ │ ├── TracyColor.hpp
│ │ ├── TracyForceInline.hpp
│ │ ├── TracyMutex.hpp
│ │ ├── TracyProtocol.hpp
│ │ ├── TracyQueue.hpp
│ │ ├── TracySocket.cpp
│ │ ├── TracySocket.hpp
│ │ ├── TracyStackFrames.cpp
│ │ ├── TracyStackFrames.hpp
│ │ ├── TracySystem.cpp
│ │ ├── TracySystem.hpp
│ │ ├── TracyTaggedUserlandAddress.hpp
│ │ ├── TracyVersion.hpp
│ │ ├── TracyWinFamily.hpp
│ │ ├── TracyYield.hpp
│ │ ├── tracy_lz4.cpp
│ │ ├── tracy_lz4.hpp
│ │ ├── tracy_lz4hc.cpp
│ │ └── tracy_lz4hc.hpp
│ ├── libbacktrace/
│ │ ├── LICENSE
│ │ ├── alloc.cpp
│ │ ├── backtrace.hpp
│ │ ├── config.h
│ │ ├── dwarf.cpp
│ │ ├── elf.cpp
│ │ ├── fileline.cpp
│ │ ├── filenames.hpp
│ │ ├── internal.hpp
│ │ ├── macho.cpp
│ │ ├── mmapio.cpp
│ │ ├── posix.cpp
│ │ ├── sort.cpp
│ │ └── state.cpp
│ └── tracy/
│ ├── Tracy.hpp
│ ├── TracyC.h
│ ├── TracyCUDA.hpp
│ ├── TracyD3D11.hpp
│ ├── TracyD3D12.hpp
│ ├── TracyLua.hpp
│ ├── TracyMetal.hmm
│ ├── TracyOpenCL.hpp
│ ├── TracyOpenGL.hpp
│ └── TracyVulkan.hpp
├── python/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── bindings/
│ │ ├── Memory.hpp
│ │ ├── Module.cpp
│ │ ├── NameBuffer.hpp
│ │ └── ScopedZone.hpp
│ ├── pyproject.toml
│ └── tracy_client/
│ ├── TracyClientBindings.pyi
│ ├── __init__.py
│ ├── py.typed
│ ├── scoped.py
│ └── tracy.py
├── server/
│ ├── TracyBroadcast.cpp
│ ├── TracyBroadcast.hpp
│ ├── TracyCharUtil.hpp
│ ├── TracyEvent.hpp
│ ├── TracyFileHeader.hpp
│ ├── TracyFileMeta.hpp
│ ├── TracyFileRead.hpp
│ ├── TracyFileWrite.hpp
│ ├── TracyMemory.cpp
│ ├── TracyMemory.hpp
│ ├── TracyMmap.cpp
│ ├── TracyMmap.hpp
│ ├── TracyPopcnt.hpp
│ ├── TracyPrint.cpp
│ ├── TracyPrint.hpp
│ ├── TracyShortPtr.hpp
│ ├── TracySlab.hpp
│ ├── TracySort.hpp
│ ├── TracySortedVector.hpp
│ ├── TracyStringDiscovery.hpp
│ ├── TracySysUtil.cpp
│ ├── TracySysUtil.hpp
│ ├── TracyTaskDispatch.cpp
│ ├── TracyTaskDispatch.hpp
│ ├── TracyTextureCompression.cpp
│ ├── TracyTextureCompression.hpp
│ ├── TracyThreadCompress.cpp
│ ├── TracyThreadCompress.hpp
│ ├── TracyVarArray.hpp
│ ├── TracyVector.hpp
│ ├── TracyWorker.cpp
│ ├── TracyWorker.hpp
│ ├── tracy_pdqsort.h
│ ├── tracy_robin_hood.h
│ └── tracy_xxhash.h
├── test/
│ ├── CMakeLists.txt
│ ├── stb_image.h
│ └── test.cpp
└── update/
├── CMakeLists.txt
└── src/
├── OfflineSymbolResolver.cpp
├── OfflineSymbolResolver.h
├── OfflineSymbolResolverAddr2Line.cpp
├── OfflineSymbolResolverDbgHelper.cpp
└── update.cpp
Showing preview only (287K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3017 symbols across 247 files)
FILE: capture/src/CaptureOutput.cpp
function InitTerminalDetection (line 25) | void InitTerminalDetection()
function IsTerminal (line 34) | bool IsTerminal()
function AnsiPrintf (line 39) | void AnsiPrintf( const char* ansiEscape, const char* format, ... )
function WaitForConnection (line 59) | int WaitForConnection( tracy::Worker& worker )
function PrintWorkerFailure (line 84) | void PrintWorkerFailure( tracy::Worker& worker )
function PrintCaptureProgress (line 163) | void PrintCaptureProgress( tracy::Worker& worker, int64_t firstTime, int...
FILE: capture/src/CaptureOutput.hpp
type tracy (line 17) | namespace tracy { class Worker; }
class Worker (line 17) | class Worker
FILE: capture/src/capture.cpp
function SigInt (line 35) | void SigInt( int )
function Usage (line 40) | [[noreturn]] void Usage()
function main (line 46) | int main( int argc, char** argv )
FILE: capture/src/capturedaemon.cpp
function SigInt (line 38) | void SigInt( int )
type ClientStats (line 43) | struct ClientStats
type ClientSession (line 51) | struct ClientSession
function Usage (line 68) | [[noreturn]] void Usage()
function SanitizeName (line 81) | std::string SanitizeName( const std::string& name )
function GenerateOutputFilename (line 99) | std::string GenerateOutputFilename( const std::string& outputDir, const ...
function MatchesFilters (line 117) | bool MatchesFilters( const tracy::BroadcastMessage& msg )
function CaptureThread (line 133) | void CaptureThread( ClientSession* session, const std::string& address, ...
function RefreshDisplay (line 189) | void RefreshDisplay( const std::string& listenAddr )
function PrintSummary (line 246) | void PrintSummary()
function main (line 264) | int main( int argc, char** argv )
FILE: csvexport/src/csvexport.cpp
function print_usage_exit (line 20) | void print_usage_exit(int e)
type Args (line 40) | struct Args {
function Args (line 53) | Args parse_args(int argc, char** argv)
function is_substring (line 127) | bool is_substring(
function join (line 161) | std::string join(const T& v, const char* sep) {
function percentile_and_truncated_mean (line 173) | std::pair<int64_t, int64_t> percentile_and_truncated_mean(std::vector<in...
function GetZoneChildTimeFast (line 220) | int64_t GetZoneChildTimeFast(
function main (line 249) | int main(int argc, char** argv)
FILE: dtl/Diff.hpp
type dtl (line 41) | namespace dtl {
class Diff (line 48) | class Diff
method Diff (line 73) | Diff () {}
method Diff (line 75) | Diff (const sequence& a,
method Diff (line 80) | Diff (const sequence& a,
method Diff (line 86) | Diff (const sequence& a,
method Diff (line 92) | Diff (const sequence& a,
method getEditDistance (line 101) | long long getEditDistance () const {
method getLcs (line 105) | Lcs< elem > getLcs () const {
method elemVec (line 109) | elemVec getLcsVec () const {
method getSes (line 113) | Ses< elem > getSes () const {
method uniHunkVec (line 117) | uniHunkVec getUniHunks () const {
method isHuge (line 122) | bool isHuge () const {
method onHuge (line 126) | void onHuge () {
method offHuge (line 130) | void offHuge () {
method isUnserious (line 134) | bool isUnserious () const {
method onUnserious (line 138) | void onUnserious () {
method offUnserious (line 142) | void offUnserious () {
method onOnlyEditDistance (line 146) | void onOnlyEditDistance () {
method hugeEnabled (line 151) | bool hugeEnabled () const {
method enableHuge (line 155) | void enableHuge () {
method disableHuge (line 159) | void disableHuge () {
method trivialEnabled (line 163) | bool trivialEnabled () const {
method enableTrivial (line 167) | void enableTrivial () {
method disableTrivial (line 171) | void disableTrivial () {
method editDistanceOnlyEnabled (line 175) | void editDistanceOnlyEnabled () {
method sequence (line 182) | sequence uniPatch (const sequence& seq) {
method sequence (line 231) | sequence patch (const sequence& seq) const {
method compose (line 260) | void compose() {
method printSES (line 316) | void printSES (stream& out) const {
method printSES (line 321) | void printSES (ostream& out = cout) const {
method printSES (line 329) | static void printSES (const Ses< elem >& s, stream& out) {
method printSES (line 334) | static void printSES (const Ses< elem >& s, ostream& out = cout) {
method printSES (line 342) | void printSES (stream& out) const {
method storeSES (line 351) | void storeSES(storedData& sd) const {
method printUnifiedFormat (line 360) | void printUnifiedFormat (stream& out) const {
method printUnifiedFormat (line 364) | void printUnifiedFormat (ostream& out = cout) const {
method printUnifiedFormat (line 372) | static void printUnifiedFormat (const uniHunkVec& hunks, stream& out) {
method printUnifiedFormat (line 376) | static void printUnifiedFormat (const uniHunkVec& hunks, ostream& ou...
method composeUnifiedHunks (line 383) | void composeUnifiedHunks () {
method composeSesFromStream (line 519) | static Ses< elem > composeSesFromStream (stream& st)
method init (line 547) | void init () {
method snake (line 569) | long long snake(const long long& k, const long long& above, const lo...
method recordSequence (line 589) | bool recordSequence (const editPathCordinates& v) {
method recordOddSequence (line 674) | void inline recordOddSequence (long long idx, long long length, sequ...
method joinSesVec (line 688) | void inline joinSesVec (sesElemVec& s1, sesElemVec& s2) const {
method wasSwapped (line 699) | bool inline wasSwapped () const {
FILE: dtl/Diff3.hpp
type dtl (line 41) | namespace dtl {
class Diff3 (line 48) | class Diff3
method Diff3 (line 63) | Diff3 () {}
method Diff3 (line 64) | Diff3 (const sequence& a,
method isConflict (line 72) | bool isConflict () const {
method sequence (line 76) | sequence getMergedSequence () const {
method merge (line 83) | bool merge () {
method compose (line 108) | void compose () {
method sequence (line 117) | sequence merge_ () {
method joinElemVec (line 208) | void inline joinElemVec (elemVec& s1, elemVec& s2) const {
method isEnd (line 220) | bool inline isEnd (const T_iter& end, const T_iter& it) const {
method forwardUntilEnd (line 228) | void inline forwardUntilEnd (const T_iter& end, T_iter& it) const {
method addDecentSequence (line 235) | void inline addDecentSequence (const sesElemVec_iter& end, sesElemVe...
FILE: dtl/Lcs.hpp
type dtl (line 41) | namespace dtl {
class Lcs (line 47) | class Lcs : public Sequence< elem >
method Lcs (line 50) | Lcs () {}
FILE: dtl/Sequence.hpp
type dtl (line 41) | namespace dtl {
class Sequence (line 47) | class Sequence
method Sequence (line 51) | Sequence () {}
method elemVec (line 54) | elemVec getSequence () const {
method addSequence (line 57) | void addSequence (elem e) {
FILE: dtl/Ses.hpp
type dtl (line 41) | namespace dtl {
class Ses (line 47) | class Ses : public Sequence< elem >
method Ses (line 54) | Ses () : onlyAdd(true), onlyDelete(true), onlyCopy(true), deletesFir...
method Ses (line 57) | Ses (bool moveDel) : onlyAdd(true), onlyDelete(true), onlyCopy(true)...
method isOnlyAdd (line 62) | bool isOnlyAdd () const {
method isOnlyDelete (line 66) | bool isOnlyDelete () const {
method isOnlyCopy (line 70) | bool isOnlyCopy () const {
method isOnlyOneOperation (line 74) | bool isOnlyOneOperation () const {
method isChange (line 78) | bool isChange () const {
method addSequence (line 83) | void addSequence (elem e, long long beforeIdx, long long afterIdx, c...
method sesElemVec (line 119) | sesElemVec getSequence () const {
FILE: dtl/functors.hpp
type dtl (line 41) | namespace dtl {
class Printer (line 47) | class Printer
method Printer (line 50) | Printer () : out_(cout) {}
method Printer (line 51) | Printer (stream& out) : out_(out) {}
class CommonPrinter (line 62) | class CommonPrinter : public Printer < sesElem, stream >
method CommonPrinter (line 65) | CommonPrinter () : Printer < sesElem, stream > () {}
method CommonPrinter (line 66) | CommonPrinter (stream& out) : Printer < sesElem, stream > (out) {}
class ChangePrinter (line 77) | class ChangePrinter : public Printer < sesElem, stream >
method ChangePrinter (line 80) | ChangePrinter () : Printer < sesElem, stream > () {}
method ChangePrinter (line 81) | ChangePrinter (stream& out) : Printer < sesElem, stream > (out) {}
class UniHunkPrinter (line 102) | class UniHunkPrinter
method UniHunkPrinter (line 105) | UniHunkPrinter () : out_(cout) {}
method UniHunkPrinter (line 106) | UniHunkPrinter (stream& out) : out_(out) {}
class Storage (line 126) | class Storage
method Storage (line 129) | Storage(storedData& sd) : storedData_(sd) {}
class Compare (line 140) | class Compare
method Compare (line 143) | Compare () {}
method impl (line 145) | virtual inline bool impl (const elem& e1, const elem& e2) const {
FILE: dtl/variables.hpp
type dtl (line 47) | namespace dtl {
type eleminfo (line 86) | struct eleminfo {
type Point (line 101) | struct Point {
type uniHunk (line 119) | struct uniHunk {
FILE: examples/OpenCLVectorAdd/OpenCLVectorAdd.cpp
function main (line 29) | int main()
FILE: examples/ToyPathTracer/Source/MathSimd.h
type float4 (line 21) | struct float4
function explicit (line 25) | explicit float4(float x, float y, float z, float w) { m = _mm_set_ps(w, ...
function VM_INLINE (line 26) | VM_INLINE explicit float4(float v) { m = _mm_set_ps1(v); }
function VM_INLINE (line 27) | VM_INLINE explicit float4(__m128 v) { m = v; }
function VM_INLINE (line 30) | VM_INLINE float getY() const { return _mm_cvtss_f32(_mm_shuffle_ps(m, m,...
type float4 (line 37) | typedef float4 bool4;
function VM_INLINE (line 51) | VM_INLINE float4 min(float4 a, float4 b) { a.m = _mm_min_ps(a.m, b.m); r...
function VM_INLINE (line 52) | VM_INLINE float4 max(float4 a, float4 b) { a.m = _mm_max_ps(a.m, b.m); r...
function VM_INLINE (line 54) | VM_INLINE float hmin(float4 v)
function mask (line 62) | VM_INLINE unsigned mask(float4 v) { return _mm_movemask_ps(v.m); }
function VM_INLINE (line 64) | VM_INLINE bool any(bool4 v) { return mask(v) != 0; }
function VM_INLINE (line 65) | VM_INLINE bool all(bool4 v) { return mask(v) == 15; }
function VM_INLINE (line 72) | VM_INLINE float4 select(float4 a, float4 b, bool4 cond)
function VM_INLINE (line 82) | VM_INLINE __m128i select(__m128i a, __m128i b, bool4 cond)
function VM_INLINE (line 92) | VM_INLINE float4 sqrtf(float4 v) { return float4(_mm_sqrt_ps(v.m)); }
type float4 (line 101) | struct float4
function explicit (line 105) | explicit float4(float x, float y, float z, float w) { float v[4] = {x, y...
function VM_INLINE (line 106) | VM_INLINE explicit float4(float v) { m = vdupq_n_f32(v); }
function VM_INLINE (line 107) | VM_INLINE explicit float4(float32x4_t v) { m = v; }
type float4 (line 117) | typedef float4 bool4;
function VM_INLINE (line 131) | VM_INLINE float4 min(float4 a, float4 b) { a.m = vminq_f32(a.m, b.m); re...
function VM_INLINE (line 132) | VM_INLINE float4 max(float4 a, float4 b) { a.m = vmaxq_f32(a.m, b.m); re...
function VM_INLINE (line 134) | VM_INLINE float hmin(float4 v)
function mask (line 142) | VM_INLINE unsigned mask(float4 v)
function VM_INLINE (line 159) | VM_INLINE bool any(bool4 v) { return mask(v) != 0; }
function VM_INLINE (line 160) | VM_INLINE bool all(bool4 v) { return mask(v) == 15; }
function VM_INLINE (line 167) | VM_INLINE float4 select(float4 a, float4 b, bool4 cond)
function VM_INLINE (line 172) | VM_INLINE int32x4_t select(int32x4_t a, int32x4_t b, bool4 cond)
function VM_INLINE (line 177) | VM_INLINE float4 sqrtf(float4 v)
function VM_INLINE (line 193) | VM_INLINE float4 splatX(float32x4_t v) { return float4(vdupq_lane_f32(vg...
function VM_INLINE (line 194) | VM_INLINE float4 splatY(float32x4_t v) { return float4(vdupq_lane_f32(vg...
function VM_INLINE (line 195) | VM_INLINE float4 splatZ(float32x4_t v) { return float4(vdupq_lane_f32(vg...
function VM_INLINE (line 196) | VM_INLINE float4 splatW(float32x4_t v) { return float4(vdupq_lane_f32(vg...
FILE: examples/ToyPathTracer/Source/Maths.cpp
function XorShift32 (line 5) | static uint32_t XorShift32(uint32_t& state)
function RandomFloat01 (line 15) | float RandomFloat01(uint32_t& state)
function float3 (line 20) | float3 RandomInUnitDisk(uint32_t& state)
function float3 (line 30) | float3 RandomInUnitSphere(uint32_t& state)
function float3 (line 39) | float3 RandomUnitVector(uint32_t& state)
function HitSpheres (line 50) | int HitSpheres(const Ray& r, const SpheresSoA& spheres, float tMin, floa...
FILE: examples/ToyPathTracer/Source/Maths.h
type float3 (line 23) | struct float3
function explicit (line 27) | explicit float3(float x, float y, float z) { m = _mm_set_ps(z, z, y, x); }
function VM_INLINE (line 28) | VM_INLINE explicit float3(float v) { m = _mm_set1_ps(v); }
function VM_INLINE (line 29) | VM_INLINE explicit float3(__m128 v) { m = v; }
function VM_INLINE (line 32) | VM_INLINE float getY() const { return _mm_cvtss_f32(_mm_shuffle_ps(m, m,...
function VM_INLINE (line 38) | VM_INLINE void store(float *p) const { p[0] = getX(); p[1] = getY(); p[2...
function setX (line 40) | void setX(float x)
function setY (line 44) | void setY(float y)
function setZ (line 50) | void setZ(float z)
type float3 (line 60) | typedef float3 bool3;
function VM_INLINE (line 82) | VM_INLINE float3 min(float3 a, float3 b) { a.m = _mm_min_ps(a.m, b.m); r...
function VM_INLINE (line 83) | VM_INLINE float3 max(float3 a, float3 b) { a.m = _mm_max_ps(a.m, b.m); r...
function hmin (line 87) | float hmin(float3 v)
function VM_INLINE (line 92) | VM_INLINE float hmax(float3 v)
function VM_INLINE (line 98) | VM_INLINE float3 cross(float3 a, float3 b)
function mask (line 108) | VM_INLINE unsigned mask(float3 v) { return _mm_movemask_ps(v.m) & 7; }
function VM_INLINE (line 110) | VM_INLINE bool any(bool3 v) { return mask(v) != 0; }
function VM_INLINE (line 111) | VM_INLINE bool all(bool3 v) { return mask(v) == 7; }
function VM_INLINE (line 113) | VM_INLINE float3 clamp(float3 t, float3 a, float3 b) { return min(max(t,...
function VM_INLINE (line 114) | VM_INLINE float sum(float3 v) { return v.getX() + v.getY() + v.getZ(); }
function VM_INLINE (line 115) | VM_INLINE float dot(float3 a, float3 b) { return sum(a*b); }
type float3 (line 123) | struct float3
function explicit (line 127) | explicit float3(float x, float y, float z) { float v[4] = {x, y, z, 0}; ...
function VM_INLINE (line 128) | VM_INLINE explicit float3(float v) { m = vdupq_n_f32(v); }
function VM_INLINE (line 129) | VM_INLINE explicit float3(float32x4_t v) { m = v; }
function VM_INLINE (line 135) | VM_INLINE float3 yzx() const
function VM_INLINE (line 148) | VM_INLINE void store(float *p) const { p[0] = getX(); p[1] = getY(); p[2...
function setX (line 150) | void setX(float x)
function setY (line 154) | void setY(float y)
function setZ (line 158) | void setZ(float z)
type float3 (line 166) | typedef float3 bool3;
function VM_INLINE (line 168) | VM_INLINE float32x4_t rcp_2(float32x4_t v)
function VM_INLINE (line 196) | VM_INLINE float3 min(float3 a, float3 b) { a.m = vminq_f32(a.m, b.m); re...
function VM_INLINE (line 197) | VM_INLINE float3 max(float3 a, float3 b) { a.m = vmaxq_f32(a.m, b.m); re...
function VM_INLINE (line 201) | VM_INLINE float hmin(float3 v)
function VM_INLINE (line 207) | VM_INLINE float hmax(float3 v)
function VM_INLINE (line 214) | VM_INLINE float3 cross(float3 a, float3 b)
function mask (line 224) | VM_INLINE unsigned mask(float3 v)
function VM_INLINE (line 241) | VM_INLINE bool any(bool3 v) { return mask(v) != 0; }
function VM_INLINE (line 242) | VM_INLINE bool all(bool3 v) { return mask(v) == 7; }
function VM_INLINE (line 244) | VM_INLINE float3 clamp(float3 t, float3 a, float3 b) { return min(max(t,...
function VM_INLINE (line 245) | VM_INLINE float sum(float3 v) { return v.getX() + v.getY() + v.getZ(); }
function VM_INLINE (line 246) | VM_INLINE float dot(float3 a, float3 b) { return sum(a*b); }
type float3 (line 256) | struct float3
function VM_INLINE (line 270) | VM_INLINE void setX(float x_) { x = x_; }
function VM_INLINE (line 271) | VM_INLINE void setY(float y_) { y = y_; }
function VM_INLINE (line 272) | VM_INLINE void setZ(float z_) { z = z_; }
function VM_INLINE (line 273) | VM_INLINE void store(float *p) const { p[0] = getX(); p[1] = getY(); p[2...
function VM_INLINE (line 283) | VM_INLINE float dot(const float3& a, const float3& b) { return a.x*b.x+a...
function VM_INLINE (line 284) | VM_INLINE float3 cross(const float3& a, const float3& b)
function VM_INLINE (line 294) | VM_INLINE float length(float3 v) { return sqrtf(dot(v, v)); }
function VM_INLINE (line 295) | VM_INLINE float sqLength(float3 v) { return dot(v, v); }
function VM_INLINE (line 296) | VM_INLINE float3 normalize(float3 v) { return v * (1.0f / length(v)); }
function VM_INLINE (line 297) | VM_INLINE float3 lerp(float3 a, float3 b, float t) { return a + (b-a)*t; }
function AssertUnit (line 300) | inline void AssertUnit(float3 v)
function float3 (line 305) | inline float3 reflect(float3 v, float3 n)
function refract (line 310) | inline bool refract(float3 v, float3 n, float nint, float3& outRefracted)
function schlick (line 322) | inline float schlick(float cosine, float ri)
function pointAt (line 329) | struct Ray
type Hit (line 341) | struct Hit
type Sphere (line 349) | struct Sphere
FILE: examples/ToyPathTracer/Source/Test.cpp
type Material (line 39) | struct Material
type Type (line 41) | enum Type { Lambert, Metal, Dielectric }
function HitWorld (line 79) | bool HitWorld(const Ray& r, float tMin, float tMax, Hit& outHit, int& ou...
function Scatter (line 86) | static bool Scatter(const Material& mat, const Ray& r_in, const Hit& rec...
function float3 (line 195) | static float3 Trace(const Ray& r, int depth, int& inoutRayCount, uint32_...
function InitializeTest (line 241) | void InitializeTest()
function ShutdownTest (line 250) | void ShutdownTest()
type JobData (line 258) | struct JobData
function TraceRowJob (line 269) | static void TraceRowJob(uint32_t start, uint32_t end, uint32_t threadnum...
function UpdateTest (line 306) | void UpdateTest(float time, int frameCount, int screenWidth, int screenH...
function DrawTest (line 349) | void DrawTest(float time, int frameCount, int screenWidth, int screenHei...
function GetObjectCount (line 375) | void GetObjectCount(int& outCount, int& outObjectSize, int& outMaterialS...
function GetSceneDesc (line 384) | void GetSceneDesc(void* outObjects, void* outMaterials, void* outCam, vo...
FILE: examples/ToyPathTracer/Source/Test.h
type TestFlags (line 4) | enum TestFlags
FILE: examples/ToyPathTracer/Source/enkiTS/Atomics.h
function namespace (line 45) | namespace enki
FILE: examples/ToyPathTracer/Source/enkiTS/LockLessMultiReadPipe.h
function namespace (line 28) | namespace enki
FILE: examples/ToyPathTracer/Source/enkiTS/TaskScheduler.cpp
type enki (line 37) | namespace enki
type SubTaskSet (line 39) | struct SubTaskSet
class TaskPipe (line 46) | class TaskPipe : public LockLessMultiReadPipe<PIPESIZE_LOG2,enki::SubT...
type ThreadArgs (line 48) | struct ThreadArgs
function SubTaskSet (line 57) | SubTaskSet SplitTask( SubTaskSet& subTask_, uint32_t rangeToSplit_ )
function Pause (line 74) | inline void Pause() { _mm_pause(); }
function Pause (line 76) | inline void Pause() { __yield(); }
function Pause (line 78) | inline void Pause() { /* No ops*/ }
function Pause (line 81) | inline void Pause() { __asm__ __volatile__("pause;"); }
function Pause (line 83) | inline void Pause() { ;}
function SafeCallback (line 88) | static void SafeCallback(ProfilerCallbackFunc func_, uint32_t threadnum_)
function ProfilerCallbacks (line 96) | ProfilerCallbacks* TaskScheduler::GetProfilerCallbacks()
function THREADFUNC_DECL (line 101) | THREADFUNC_DECL TaskScheduler::TaskingThreadFunction( void* pArgs )
FILE: examples/ToyPathTracer/Source/enkiTS/TaskScheduler.h
function namespace (line 24) | namespace enki
FILE: examples/ToyPathTracer/Source/enkiTS/TaskScheduler_c.cpp
type enkiTaskScheduler (line 26) | struct enkiTaskScheduler : TaskScheduler
type enkiTaskSet (line 30) | struct enkiTaskSet : ITaskSet
method enkiTaskSet (line 32) | enkiTaskSet( enkiTaskExecuteRange taskFun_ ) : taskFun(taskFun_), pArg...
method ExecuteRange (line 34) | virtual void ExecuteRange( TaskSetPartition range, uint32_t threadnum )
function enkiTaskScheduler (line 43) | enkiTaskScheduler* enkiNewTaskScheduler()
function enkiInitTaskScheduler (line 49) | void enkiInitTaskScheduler( enkiTaskScheduler* pETS_ )
function enkiInitTaskSchedulerNumThreads (line 54) | void enkiInitTaskSchedulerNumThreads( enkiTaskScheduler* pE...
function enkiDeleteTaskScheduler (line 59) | void enkiDeleteTaskScheduler( enkiTaskScheduler* pETS_ )
function enkiTaskSet (line 64) | enkiTaskSet* enkiCreateTaskSet( enkiTaskScheduler* pETS_, enkiTaskExecu...
method enkiTaskSet (line 32) | enkiTaskSet( enkiTaskExecuteRange taskFun_ ) : taskFun(taskFun_), pArg...
method ExecuteRange (line 34) | virtual void ExecuteRange( TaskSetPartition range, uint32_t threadnum )
function enkiDeleteTaskSet (line 69) | void enkiDeleteTaskSet( enkiTaskSet* pTaskSet_ )
function enkiAddTaskSetToPipe (line 74) | void enkiAddTaskSetToPipe( enkiTaskScheduler* pETS_, enkiTaskSet* pTa...
function enkiAddTaskSetToPipeMinRange (line 84) | void enkiAddTaskSetToPipeMinRange(enkiTaskScheduler * pETS_, enkiTaskSet...
function enkiIsTaskSetComplete (line 95) | int enkiIsTaskSetComplete( enkiTaskScheduler* pETS_, enkiTaskSet* pTa...
function enkiWaitForTaskSet (line 101) | void enkiWaitForTaskSet( enkiTaskScheduler* pETS_, enkiTaskSet* pTask...
function enkiWaitForAll (line 106) | void enkiWaitForAll( enkiTaskScheduler* pETS_ )
function enkiGetNumTaskThreads (line 112) | uint32_t enkiGetNumTaskThreads( enkiTaskScheduler* pETS_ )
function enkiProfilerCallbacks (line 117) | enkiProfilerCallbacks* enkiGetProfilerCallbacks( enkiTaskScheduler* pETS_ )
FILE: examples/ToyPathTracer/Source/enkiTS/TaskScheduler_c.h
type enkiTaskScheduler (line 27) | typedef struct enkiTaskScheduler enkiTaskScheduler;
type enkiTaskSet (line 28) | typedef struct enkiTaskSet enkiTaskSet;
type enkiProfilerCallbacks (line 91) | struct enkiProfilerCallbacks
type enkiProfilerCallbacks (line 100) | struct enkiProfilerCallbacks
FILE: examples/ToyPathTracer/Source/enkiTS/Threads.h
function namespace (line 34) | namespace enki
function namespace (line 69) | namespace enki
function namespace (line 101) | namespace enki
function namespace (line 139) | namespace enki
function namespace (line 175) | namespace enki
FILE: examples/ToyPathTracer/Windows/TestWin.cpp
type ComputeParams (line 53) | struct ComputeParams
function wWinMain (line 75) | int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE, _In_...
function ATOM (line 232) | ATOM MyRegisterClass(HINSTANCE hInstance)
function BOOL (line 250) | BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
function RenderFrame (line 274) | static void RenderFrame()
function LRESULT (line 428) | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM ...
function HRESULT (line 458) | static HRESULT InitD3DDevice()
function ShutdownD3DDevice (line 555) | static void ShutdownD3DDevice()
FILE: examples/fibers.cpp
function main (line 12) | int main()
FILE: extra/color-hot.cpp
function linear2sRGB (line 7) | inline float linear2sRGB( float v )
function lerp (line 15) | float lerp( float v0, float v1, float t )
function sRGB2linear (line 20) | inline float sRGB2linear( float v )
function main (line 25) | int main()
FILE: extra/color.cpp
function sqrtfast (line 7) | inline float sqrtfast( float v )
function linear2sRGB (line 22) | inline float linear2sRGB( float v )
function lerp (line 30) | int lerp( int v0, int v1, float t )
function sRGB2linear (line 35) | inline float sRGB2linear( float v )
function main (line 40) | int main()
FILE: extra/dxt1divtable.c
function main (line 4) | int main()
FILE: extra/dxt1table.c
function convert (line 6) | int convert( int v )
function main (line 21) | int main()
FILE: extra/identify.cpp
function main (line 13) | int main( int argc, char** argv )
FILE: extra/natvis.py
function VectorSummary (line 3) | def VectorSummary(value, dict):
function ShortPtrSummary (line 11) | def ShortPtrSummary(value, dict):
class ShortPtrPrinter (line 24) | class ShortPtrPrinter:
method __init__ (line 25) | def __init__(self, val, dict):
method update (line 29) | def update(self):
method num_children (line 39) | def num_children(self):
method get_child_index (line 42) | def get_child_index(self, name):
method get_child_at_index (line 45) | def get_child_at_index(self, index):
class VectorPrinter (line 48) | class VectorPrinter:
method __init__ (line 49) | def __init__(self, val, dict):
method update (line 58) | def update(self):
method num_children (line 69) | def num_children(self):
method get_child_index (line 72) | def get_child_index(self, name):
method get_child_at_index (line 75) | def get_child_at_index(self, index):
function Int24Summary (line 78) | def Int24Summary(value, dict):
function Int48Summary (line 85) | def Int48Summary(value, dict):
class ZoneEventPrinter (line 95) | class ZoneEventPrinter:
method __init__ (line 96) | def __init__(self, val, dict):
method update (line 99) | def update(self):
method num_children (line 109) | def num_children(self):
method get_child_index (line 112) | def get_child_index(self, name):
method get_child_at_index (line 125) | def get_child_at_index(self, index):
function RobinHoodSummary (line 137) | def RobinHoodSummary(value, dict):
function __lldb_init_module (line 143) | def __lldb_init_module(debugger, dict):
FILE: extra/rdotbl.c
function main (line 3) | int main()
FILE: extra/uarch/TracyMicroArchitecture.hpp
type tracy (line 3) | namespace tracy
type AsmDesc (line 6) | struct AsmDesc
type AsmVar (line 12) | struct AsmVar
type AsmOp (line 22) | struct AsmOp
type MicroArchitecture (line 30) | struct MicroArchitecture
FILE: extra/uarch/uarch.cpp
type Dictionary (line 13) | struct Dictionary
method Get (line 15) | int Get( const std::string& str )
method Get (line 25) | int Get( const char* str ) { return Get( std::string( str ) ); }
method Size (line 32) | size_t Size() const { return strlist.size(); }
type ParamDesc (line 38) | struct ParamDesc
type Variant (line 44) | struct Variant
type Op (line 53) | struct Op
type UArch (line 59) | struct UArch
function main (line 78) | int main()
FILE: extra/version.cpp
function main (line 7) | int main()
FILE: extra/x11_colors.c
function main (line 4) | int main()
FILE: getopt/getopt.c
function getopt (line 50) | int getopt(int argc, char* const argv[], const char* optstring) {
function getopt_long (line 156) | int getopt_long(int argc, char* const argv[], const char* optstring,
FILE: getopt/getopt.h
type option (line 43) | struct option {
type option (line 53) | struct option
FILE: import/src/import-chrome.cpp
function Usage (line 28) | void Usage()
function main (line 41) | int main( int argc, char** argv )
FILE: import/src/import-fuchsia.cpp
function Usage (line 34) | void Usage() {
type ThreadRef (line 43) | struct ThreadRef {
type Unit (line 52) | struct Unit {}
type Argument (line 58) | struct Argument {
type PidTidEncoder (line 65) | struct PidTidEncoder {
type Record (line 71) | struct Record {
type DecodeState (line 77) | struct DecodeState {
function appendArgumentValue (line 87) | void appendArgumentValue(std::string &res, ArgumentValue &val) {
function read_input (line 107) | std::vector<uint8_t> read_input(const char *input) {
function read_next_record (line 175) | std::pair<bool, Record> read_next_record(std::vector<uint8_t> const &inp...
function getPseudoTid (line 203) | uint64_t getPseudoTid(DecodeState &dec, ThreadRef th) {
function ThreadRef (line 219) | ThreadRef readThread(DecodeState &dec, Record const &r, size_t &offset,
function readString (line 233) | void readString(DecodeState &dec, std::string &res, Record const &r,
function skipString (line 250) | void skipString(size_t &offset, uint16_t ref) {
function readArgument (line 258) | void readArgument(std::vector<Argument> &args, DecodeState &dec,
function readArguments (line 325) | void readArguments(std::vector<Argument> &args, DecodeState &dec, Record r,
function argumentIsNumber (line 332) | bool argumentIsNumber(Argument const &arg) {
function argumentToNumber (line 338) | double argumentToNumber(Argument const &arg) {
function printArgumentsToString (line 351) | void printArgumentsToString(std::string &res, std::vector<Argument> &arg...
function readLoc (line 361) | void readLoc(std::string &locFile, uint32_t &locLine,
type TraceNotInitialized (line 379) | struct TraceNotInitialized : std::exception {}
function main (line 381) | int main(int argc, char **argv) {
FILE: merge/src/merge.cpp
type PairHash (line 21) | struct PairHash
type ExportedTrace (line 33) | struct ExportedTrace
method orderTimeline (line 43) | static bool orderTimeline( tracy::Worker::ImportEventTimeline const& a...
method orderMessages (line 48) | static bool orderMessages( tracy::Worker::ImportEventMessages const& a...
method fromFile (line 53) | static std::optional<ExportedTrace> fromFile( std::string const& filep...
type MergedTrace (line 157) | struct MergedTrace
method MergedTrace (line 166) | static MergedTrace merge( std::vector<ExportedTrace> const& traces )
function Usage (line 275) | [[noreturn]] void Usage()
function main (line 285) | int main( int argc, char** argv )
FILE: profiler/helpers/embed.cpp
function Usage (line 7) | static void Usage()
function main (line 13) | int main( int argc, char** argv )
FILE: profiler/src/Backend.hpp
class RunQueue (line 9) | class RunQueue
class Backend (line 11) | class Backend
FILE: profiler/src/BackendEmscripten.cpp
function tracy_paste_clipboard (line 29) | void tracy_paste_clipboard( const char* text )
function SetClipboard (line 35) | static void SetClipboard( ImGuiContext*, const char* text )
function ImGuiKey (line 52) | static ImGuiKey TranslateKeyCode( const char* code )
FILE: profiler/src/BackendGlfw.cpp
function EnsureMacAppRegistration (line 40) | static void EnsureMacAppRegistration()
function SetMacAppIcon (line 56) | static void SetMacAppIcon()
function glfw_error_callback (line 78) | static void glfw_error_callback( int error, const char* description )
function glfw_window_pos_callback (line 83) | static void glfw_window_pos_callback( GLFWwindow* window, int x, int y )
function glfw_window_size_callback (line 92) | static void glfw_window_size_callback( GLFWwindow* window, int w, int h )
function glfw_window_maximize_callback (line 102) | static void glfw_window_maximize_callback( GLFWwindow*, int maximized )
function glfw_window_iconify_callback (line 107) | static void glfw_window_iconify_callback( GLFWwindow*, int iconified )
FILE: profiler/src/BackendWayland.cpp
type wl_display (line 173) | struct wl_display
type wl_compositor (line 174) | struct wl_compositor
type wl_surface (line 176) | struct wl_surface
type wl_egl_window (line 177) | struct wl_egl_window
type wl_shm (line 178) | struct wl_shm
type xdg_wm_base (line 179) | struct xdg_wm_base
type xdg_surface (line 183) | struct xdg_surface
type xdg_toplevel (line 184) | struct xdg_toplevel
type wl_seat (line 185) | struct wl_seat
type wl_pointer (line 186) | struct wl_pointer
type wl_cursor_theme (line 187) | struct wl_cursor_theme
type wl_surface (line 188) | struct wl_surface
type xdg_activation_v1 (line 190) | struct xdg_activation_v1
type xdg_activation_token_v1 (line 191) | struct xdg_activation_token_v1
type zxdg_decoration_manager_v1 (line 192) | struct zxdg_decoration_manager_v1
type zxdg_toplevel_decoration_v1 (line 193) | struct zxdg_toplevel_decoration_v1
type wp_fractional_scale_manager_v1 (line 194) | struct wp_fractional_scale_manager_v1
type wp_fractional_scale_v1 (line 195) | struct wp_fractional_scale_v1
type wp_viewporter (line 196) | struct wp_viewporter
type wp_viewport (line 197) | struct wp_viewport
type wp_cursor_shape_manager_v1 (line 198) | struct wp_cursor_shape_manager_v1
type wp_cursor_shape_device_v1 (line 199) | struct wp_cursor_shape_device_v1
type wl_keyboard (line 200) | struct wl_keyboard
type xkb_context (line 201) | struct xkb_context
type xkb_keymap (line 202) | struct xkb_keymap
type xkb_state (line 203) | struct xkb_state
type xkb_compose_table (line 204) | struct xkb_compose_table
type xkb_compose_state (line 205) | struct xkb_compose_state
type wl_data_device_manager (line 210) | struct wl_data_device_manager
type wl_data_device (line 211) | struct wl_data_device
type wl_data_source (line 212) | struct wl_data_source
type wl_data_offer (line 215) | struct wl_data_offer
type wl_data_offer (line 216) | struct wl_data_offer
type xdg_toplevel_icon_manager_v1 (line 218) | struct xdg_toplevel_icon_manager_v1
type Output (line 223) | struct Output
type KeyRepeat (line 242) | struct KeyRepeat
function RecomputeScale (line 253) | static void RecomputeScale()
function PointerEnter (line 269) | static void PointerEnter( void*, struct wl_pointer* pointer, uint32_t se...
function PointerLeave (line 285) | static void PointerLeave( void*, struct wl_pointer* pointer, uint32_t se...
function PointerMotion (line 291) | static void PointerMotion( void*, struct wl_pointer* pointer, uint32_t t...
function PointerButton (line 297) | static void PointerButton( void*, struct wl_pointer* pointer, uint32_t s...
function PointerAxis (line 311) | static void PointerAxis( void*, struct wl_pointer* pointer, uint32_t tim...
function PointerAxisSource (line 324) | static void PointerAxisSource( void*, struct wl_pointer* pointer, uint32...
function PointerAxisStop (line 328) | static void PointerAxisStop( void*, struct wl_pointer* pointer, uint32_t...
function PointerAxisDiscrete (line 332) | static void PointerAxisDiscrete( void*, struct wl_pointer* pointer, uint...
function PointerFrame (line 336) | static void PointerFrame( void*, struct wl_pointer* pointer )
type wl_pointer_listener (line 349) | struct wl_pointer_listener
function KeyboardKeymap (line 362) | static void KeyboardKeymap( void*, struct wl_keyboard* kbd, uint32_t for...
function KeyboardEnter (line 408) | static void KeyboardEnter( void*, struct wl_keyboard* kbd, uint32_t seri...
function KeyboardLeave (line 414) | static void KeyboardLeave( void*, struct wl_keyboard* kbd, uint32_t seri...
function xkb_keysym_t (line 426) | static xkb_keysym_t Compose( const xkb_keysym_t sym )
function KeyboardKey (line 443) | static void KeyboardKey( void*, struct wl_keyboard* kbd, uint32_t serial...
function KeyboardModifiers (line 482) | static void KeyboardModifiers( void*, struct wl_keyboard* kbd, uint32_t ...
function KeyboardRepeatInfo (line 494) | static void KeyboardRepeatInfo( void*, struct wl_keyboard* kbd, int32_t ...
type wl_keyboard_listener (line 500) | struct wl_keyboard_listener
function SeatCapabilities (line 510) | static void SeatCapabilities( void*, struct wl_seat* seat, uint32_t caps )
function SeatName (line 544) | static void SeatName( void*, struct wl_seat* seat, const char* name )
type wl_seat_listener (line 548) | struct wl_seat_listener
function WmPing (line 554) | static void WmPing( void*, struct xdg_wm_base* shell, uint32_t serial )
type xdg_wm_base_listener (line 559) | struct xdg_wm_base_listener
function OutputGeometry (line 564) | static void OutputGeometry( void*, struct wl_output* output, int32_t x, ...
function OutputMode (line 568) | static void OutputMode( void*, struct wl_output* output, uint32_t flags,...
function OutputDone (line 572) | static void OutputDone( void*, struct wl_output* output )
function OutputScale (line 577) | static void OutputScale( void* data, struct wl_output* output, int32_t s...
type wl_output_listener (line 583) | struct wl_output_listener
function DecorationConfigure (line 591) | static void DecorationConfigure( void*, struct zxdg_toplevel_decoration_...
type zxdg_toplevel_decoration_v1_listener (line 595) | struct zxdg_toplevel_decoration_v1_listener
function IconMgrSize (line 600) | static void IconMgrSize( void*, struct xdg_toplevel_icon_manager_v1*, in...
function IconMgrDone (line 605) | static void IconMgrDone( void*, struct xdg_toplevel_icon_manager_v1* )
type xdg_toplevel_icon_manager_v1_listener (line 609) | struct xdg_toplevel_icon_manager_v1_listener
function RegistryGlobal (line 615) | static void RegistryGlobal( void*, struct wl_registry* reg, uint32_t nam...
function RegistryGlobalRemove (line 675) | static void RegistryGlobalRemove( void*, struct wl_registry* reg, uint32...
type wl_registry_listener (line 684) | struct wl_registry_listener
function XdgSurfaceConfigure (line 692) | static void XdgSurfaceConfigure( void*, struct xdg_surface* surf, uint32...
type xdg_surface_listener (line 699) | struct xdg_surface_listener
function XdgToplevelConfigure (line 704) | static void XdgToplevelConfigure( void*, struct xdg_toplevel* toplevel, ...
function XdgToplevelClose (line 724) | static void XdgToplevelClose( void*, struct xdg_toplevel* toplevel )
type xdg_toplevel_listener (line 729) | struct xdg_toplevel_listener
function SurfaceEnter (line 734) | static void SurfaceEnter( void*, struct wl_surface* surface, struct wl_o...
function SurfaceLeave (line 747) | static void SurfaceLeave( void*, struct wl_surface* surface, struct wl_o...
function SurfacePreferredBufferScale (line 760) | static void SurfacePreferredBufferScale( void*, struct wl_surface* surfa...
function SurfacePreferredBufferTransform (line 767) | static void SurfacePreferredBufferTransform( void*, struct wl_surface* s...
type wl_surface_listener (line 771) | struct wl_surface_listener
function FractionalPreferredScale (line 780) | static void FractionalPreferredScale( void*, struct wp_fractional_scale_...
type wp_fractional_scale_v1_listener (line 786) | struct wp_fractional_scale_v1_listener
function DataOfferOffer (line 791) | static void DataOfferOffer( void*, struct wl_data_offer* offer, const ch...
function DataOfferSourceActions (line 806) | static void DataOfferSourceActions( void*, struct wl_data_offer* offer, ...
function DataOfferAction (line 810) | static void DataOfferAction( void*, struct wl_data_offer* offer, uint32_...
type wl_data_offer_listener (line 814) | struct wl_data_offer_listener
function DataDeviceDataOffer (line 821) | static void DataDeviceDataOffer( void*, struct wl_data_device* dataDevic...
function DataDeviceEnter (line 828) | static void DataDeviceEnter( void*, struct wl_data_device* dataDevice, u...
function DataDeviceLeave (line 837) | static void DataDeviceLeave( void*, struct wl_data_device* dataDevice )
function DataDeviceMotion (line 841) | static void DataDeviceMotion( void*, struct wl_data_device* dataDevice, ...
function DataDeviceSelection (line 845) | static void DataDeviceSelection( void*, struct wl_data_device* dataDevic...
type wl_data_device_listener (line 867) | struct wl_data_device_listener
function DataSourceTarget (line 876) | void DataSourceTarget( void*, struct wl_data_source* dataSource, const c...
function DataSourceSend (line 880) | void DataSourceSend( void*, struct wl_data_source* dataSource, const cha...
function DataSourceCancelled (line 897) | void DataSourceCancelled( void*, struct wl_data_source* dataSource )
type wl_data_source_listener (line 904) | struct wl_data_source_listener
function SetupCursor (line 911) | static void SetupCursor()
function SetClipboard (line 934) | static void SetClipboard( ImGuiContext*, const char* text )
function TokenDone (line 1147) | static void TokenDone( void*, xdg_activation_token_v1* token, const char...
type xdg_activation_token_v1_listener (line 1154) | struct xdg_activation_token_v1_listener
FILE: profiler/src/ConnectionHistory.hpp
class ConnectionHistory (line 9) | class ConnectionHistory
method empty (line 20) | bool empty() const { return m_connHistVec.empty(); }
method size (line 21) | size_t size() const { return m_connHistVec.size(); }
FILE: profiler/src/EmscriptenShim.hpp
type std (line 6) | namespace std {
type atomic<shared_ptr<T>> (line 9) | struct atomic<shared_ptr<T>> {
method compare_exchange_weak (line 12) | bool compare_exchange_weak(shared_ptr<T>& expected, const shared_ptr...
method load (line 16) | shared_ptr<T> load(memory_order order = std::memory_order_seq_cst) c...
method store (line 20) | void store(shared_ptr<T> desired, memory_order order = std::memory_o...
FILE: profiler/src/Filters.hpp
class Filters (line 7) | class Filters
FILE: profiler/src/Fonts.cpp
function LoadFonts (line 22) | void LoadFonts( float scale )
FILE: profiler/src/Fonts.hpp
type ImFont (line 4) | struct ImFont
type FontData (line 6) | struct FontData
FILE: profiler/src/HttpRequest.cpp
type utsname (line 58) | struct utsname
function HttpRequest (line 89) | void HttpRequest( const char* server, const char* resource, int port, co...
FILE: profiler/src/ImGuiContext.hpp
class ImGuiTracyContext (line 6) | class ImGuiTracyContext
FILE: profiler/src/IsElevated.cpp
function IsElevated (line 7) | bool IsElevated()
function IsElevated (line 27) | bool IsElevated()
function IsElevated (line 36) | bool IsElevated()
FILE: profiler/src/ResolvService.cpp
type sockaddr_in (line 43) | struct sockaddr_in
type sockaddr (line 59) | struct sockaddr
FILE: profiler/src/ResolvService.hpp
class ResolvService (line 13) | class ResolvService
type QueueItem (line 15) | struct QueueItem
FILE: profiler/src/RunQueue.hpp
class RunQueue (line 9) | class RunQueue
FILE: profiler/src/WindowPosition.hpp
class WindowPosition (line 6) | class WindowPosition
FILE: profiler/src/ini.c
type ini_t (line 30) | struct ini_t {
function strcmpci (line 37) | static int strcmpci(const char *a, const char *b) {
function trim_back (line 56) | static void trim_back(ini_t *ini, char *p) {
function split_data (line 102) | static void split_data(ini_t *ini) {
function ini_t (line 176) | ini_t* ini_load(const char *filename) {
function ini_free (line 222) | void ini_free(ini_t *ini) {
function ini_sget (line 260) | int ini_sget(
FILE: profiler/src/ini.h
type ini_t (line 17) | typedef struct ini_t ini_t;
FILE: profiler/src/main.cpp
type ClientData (line 74) | struct ClientData
type ViewShutdown (line 85) | enum class ViewShutdown { False, True, Join }
function smoothstep (line 127) | static float smoothstep( float x )
function SetWindowTitleCallback (line 132) | static void SetWindowTitleCallback( const char* title )
function AttentionCallback (line 140) | static void AttentionCallback()
function RunOnMainThread (line 147) | static void RunOnMainThread( const std::function<void()>& cb, bool force...
function ScaleWindow (line 152) | static void ScaleWindow(ImGuiWindow* window, float scale)
function SetupDPIScale (line 161) | static void SetupDPIScale()
function IsBusy (line 201) | static int IsBusy()
function SetupScaleCallback (line 209) | static void SetupScaleCallback( float scale )
function ScaleChanged (line 216) | static void ScaleChanged( float scale )
function main (line 225) | int main( int argc, char** argv )
function UpdateBroadcastClients (line 382) | static void UpdateBroadcastClients()
function TextComment (line 468) | static void TextComment( const char* str )
function DrawAchievements (line 477) | static void DrawAchievements( tracy::data::AchievementItem** items )
function DrawContents (line 516) | static void DrawContents()
FILE: profiler/src/profiler/TracyAchievementData.cpp
type tracy::data (line 8) | namespace tracy::data
FILE: profiler/src/profiler/TracyAchievements.cpp
type tracy (line 10) | namespace tracy
type data (line 13) | namespace data { extern AchievementCategory* AchievementCategories[]; }
FILE: profiler/src/profiler/TracyAchievements.hpp
type tracy (line 13) | namespace tracy
type data (line 16) | namespace data
type AchievementItem (line 19) | struct AchievementItem
type AchievementCategory (line 33) | struct AchievementCategory
class AchievementsMgr (line 43) | class AchievementsMgr
type AchievementPair (line 45) | struct AchievementPair
FILE: profiler/src/profiler/TracyBadVersion.cpp
type tracy (line 11) | namespace tracy
type detail (line 14) | namespace detail
function BadVersionImpl (line 17) | void BadVersionImpl( BadVersionState& badVer )
FILE: profiler/src/profiler/TracyBadVersion.hpp
type tracy (line 8) | namespace tracy
type BadVersionState (line 11) | struct BadVersionState
type State (line 13) | enum State
type detail (line 28) | namespace detail
function tracy_force_inline (line 33) | tracy_force_inline void BadVersion( BadVersionState& badVer ) { if( ba...
FILE: profiler/src/profiler/TracyBuzzAnim.hpp
type tracy (line 6) | namespace tracy
class BuzzAnim (line 10) | class BuzzAnim
method Match (line 13) | bool Match( const T& comp ) const
method Time (line 18) | float Time() const
method Enable (line 24) | void Enable( const T& val, float len )
method Update (line 31) | bool Update( float dt )
FILE: profiler/src/profiler/TracyColor.cpp
type tracy (line 5) | namespace tracy
function GetHsvColor (line 8) | uint32_t GetHsvColor( uint64_t hue, int value )
FILE: profiler/src/profiler/TracyColor.hpp
type tracy (line 9) | namespace tracy
function tracy_force_inline (line 15) | static tracy_force_inline uint32_t HighlightColor( uint32_t color )
function tracy_force_inline (line 23) | static tracy_force_inline uint32_t DarkenColorSlightly( uint32_t color )
function tracy_force_inline (line 31) | static tracy_force_inline uint32_t DarkenColor( uint32_t color )
function tracy_force_inline (line 39) | static tracy_force_inline uint32_t DarkenColorHalf( uint32_t color )
function tracy_force_inline (line 47) | static tracy_force_inline uint32_t DarkenColorMore( uint32_t color )
FILE: profiler/src/profiler/TracyConfig.cpp
type tracy (line 8) | namespace tracy
function LoadConfig (line 13) | void LoadConfig()
function SaveConfig (line 59) | bool SaveConfig()
FILE: profiler/src/profiler/TracyConfig.hpp
type tracy (line 8) | namespace tracy
type Config (line 11) | struct Config
FILE: profiler/src/profiler/TracyDecayValue.hpp
type tracy (line 6) | namespace tracy
class DecayValue (line 10) | class DecayValue
method DecayValue (line 13) | DecayValue( const T& init, bool active = false )
method tracy_force_inline (line 19) | tracy_force_inline operator const T& () const { return m_value; }
method tracy_force_inline (line 20) | tracy_force_inline T operator->() const { return m_value; }
method tracy_force_inline (line 22) | tracy_force_inline DecayValue& operator=( const T& value )
method tracy_force_inline (line 29) | tracy_force_inline void Decay( const T& value )
FILE: profiler/src/profiler/TracyEmbed.hpp
class EmbedData (line 9) | class EmbedData
method size (line 16) | [[nodiscard]] size_t size() const { return m_size; }
FILE: profiler/src/profiler/TracyEventDebug.cpp
type tracy (line 8) | namespace tracy
function EventDebug (line 11) | void EventDebug( const QueueItem& ev )
FILE: profiler/src/profiler/TracyEventDebug.hpp
type tracy (line 4) | namespace tracy
type QueueItem (line 6) | struct QueueItem
FILE: profiler/src/profiler/TracyFileselector.cpp
type tracy::Fileselector (line 11) | namespace tracy::Fileselector
function Init (line 16) | void Init()
function Shutdown (line 23) | void Shutdown()
function HasFailed (line 30) | bool HasFailed()
function nativeOpenFile (line 46) | int nativeOpenFile()
function OpenFileImpl (line 53) | static bool OpenFileImpl( const char* ext, const char* desc, const std...
function SaveFileImpl (line 96) | static bool SaveFileImpl( const char* ext, const char* desc, const std...
function OpenFile (line 116) | void OpenFile( const char* ext, const char* desc, const std::function<...
function SaveFile (line 121) | void SaveFile( const char* ext, const char* desc, const std::function<...
FILE: profiler/src/profiler/TracyFileselector.hpp
type tracy::Fileselector (line 6) | namespace tracy::Fileselector
FILE: profiler/src/profiler/TracyFilesystem.cpp
type tracy (line 4) | namespace tracy
function SourceFileValid (line 7) | bool SourceFileValid( const char* fn, uint64_t olderThan, const View& ...
FILE: profiler/src/profiler/TracyFilesystem.hpp
type tracy (line 7) | namespace tracy
class View (line 10) | class View
class Worker (line 11) | class Worker
function FileExists (line 13) | static inline bool FileExists( const char* fn )
FILE: profiler/src/profiler/TracyImGui.cpp
type tracy (line 10) | namespace tracy
function WasActive (line 15) | bool WasActive()
function DrawZigZag (line 26) | void DrawZigZag( ImDrawList* draw, const ImVec2& wpos, double start, d...
function DrawStripedRect (line 32) | void DrawStripedRect( ImDrawList* draw, const ImVec2& wpos, double x0,...
function DrawHistogramMinMaxLabel (line 83) | void DrawHistogramMinMaxLabel( ImDrawList* draw, int64_t tmin, int64_t...
function PrintSource (line 102) | void PrintSource( const std::vector<Tokenizer::Line>& lines )
function PrintTextWrapped (line 131) | bool PrintTextWrapped( const char* text, const char* end, bool striket...
FILE: profiler/src/profiler/TracyImGui.hpp
function ImVec2 (line 20) | static inline ImVec2 operator+( const ImVec2& l, const ImVec2& r ) { ret...
function ImVec2 (line 21) | static inline ImVec2 operator-( const ImVec2& l, const ImVec2& r ) { ret...
type tracy (line 24) | namespace tracy
function GetScale (line 69) | [[maybe_unused]] static inline float GetScale()
function ImageCentered (line 74) | [[maybe_unused]] static inline void ImageCentered( ImTextureID user_te...
function TextCentered (line 80) | [[maybe_unused]] static inline void TextCentered( const char* text )
function ButtonCentered (line 87) | [[maybe_unused]] static inline bool ButtonCentered( const char* text )
function TextColoredUnformatted (line 94) | [[maybe_unused]] static inline void TextColoredUnformatted( uint32_t c...
function TextColoredUnformatted (line 101) | [[maybe_unused]] static inline void TextColoredUnformatted( const ImVe...
function TextDisabledUnformatted (line 108) | [[maybe_unused]] static inline void TextDisabledUnformatted( const cha...
function TextFocused (line 115) | [[maybe_unused]] static inline void TextFocused( const char* label, co...
function DrawWaitingDotsCentered (line 122) | [[maybe_unused]] static inline void DrawWaitingDotsCentered( double ti...
function DrawWaitingDots (line 136) | [[maybe_unused]] static inline void DrawWaitingDots( double time, bool...
function SmallCheckbox (line 149) | [[maybe_unused]] static inline bool SmallCheckbox( const char* label, ...
function SmallColorBox (line 157) | [[maybe_unused]] static inline void SmallColorBox( uint32_t color )
function ButtonDisablable (line 164) | [[maybe_unused]] static inline bool ButtonDisablable( const char* labe...
function SmallButtonDisablable (line 179) | [[maybe_unused]] static inline bool SmallButtonDisablable( const char*...
function DrawTextContrast (line 194) | [[maybe_unused]] static inline void DrawTextContrast( ImDrawList* draw...
function DrawTextSuperContrast (line 201) | [[maybe_unused]] static inline void DrawTextSuperContrast( ImDrawList*...
function SetButtonHighlightColor (line 217) | [[maybe_unused]] static void SetButtonHighlightColor()
function ToggleButton (line 224) | [[maybe_unused]] static void ToggleButton( const char* label, bool& to...
function SmallToggleButton (line 232) | [[maybe_unused]] static void SmallToggleButton( const char* label, boo...
function ClipboardButton (line 242) | [[maybe_unused]] static bool ClipboardButton( int id = 0 )
function TextFocusedClipboard (line 256) | [[maybe_unused]] static inline void TextFocusedClipboard( const char* ...
function tracy_force_inline (line 276) | [[maybe_unused]] static tracy_force_inline void DrawLine( ImDrawList* ...
function tracy_force_inline (line 282) | [[maybe_unused]] static tracy_force_inline void DrawLine( ImDrawList* ...
function tracy_force_inline (line 288) | [[maybe_unused]] static tracy_force_inline void TooltipIfHovered( cons...
FILE: profiler/src/profiler/TracyLlm.cpp
type tracy (line 22) | namespace tracy
type Preset (line 181) | struct Preset
function Replace (line 826) | static void Replace( std::string& str, std::string_view from, std::str...
FILE: profiler/src/profiler/TracyLlm.hpp
type tracy (line 16) | namespace tracy
class TracyLlmApi (line 19) | class TracyLlmApi
class TracyLlmChat (line 20) | class TracyLlmChat
class TracyLlmTools (line 21) | class TracyLlmTools
class TracyManualData (line 22) | class TracyManualData
class View (line 23) | class View
class Worker (line 24) | class Worker
class TracyLlm (line 26) | class TracyLlm
type Task (line 28) | enum class Task
type WorkItem (line 36) | struct WorkItem
method IsBusy (line 50) | [[nodiscard]] bool IsBusy() const { std::lock_guard lock( m_jobsLock...
FILE: profiler/src/profiler/TracyLlmApi.cpp
type tracy (line 8) | namespace tracy
function WriteFn (line 11) | static size_t WriteFn( void* _data, size_t size, size_t num, void* ptr )
type StreamData (line 96) | struct StreamData
function StreamFn (line 102) | static size_t StreamFn( void* _data, size_t size, size_t num, void* ptr )
FILE: profiler/src/profiler/TracyLlmApi.hpp
type tracy (line 10) | namespace tracy
type LlmModel (line 13) | struct LlmModel
class TracyLlmApi (line 21) | class TracyLlmApi
type Type (line 23) | enum class Type
method IsConnected (line 40) | [[nodiscard]] bool IsConnected() const { return m_curl != nullptr; }
FILE: profiler/src/profiler/TracyLlmChat.cpp
type tracy (line 13) | namespace tracy
type RoleData (line 18) | struct RoleData
function tracy_force_inline (line 38) | static tracy_force_inline int codepointlen( char c )
function utflen (line 47) | static size_t utflen( const char* str )
function ToolCallDescription (line 70) | static std::string ToolCallDescription( const nlohmann::json& json )
FILE: profiler/src/profiler/TracyLlmChat.hpp
type tracy (line 8) | namespace tracy
class View (line 11) | class View
class Worker (line 12) | class Worker
class TracyLlmChat (line 14) | class TracyLlmChat
type TurnRole (line 19) | enum class TurnRole
type Think (line 31) | enum class Think
FILE: profiler/src/profiler/TracyLlmEmbeddings.cpp
type tracy (line 10) | namespace tracy
FILE: profiler/src/profiler/TracyLlmEmbeddings.hpp
type tracy (line 8) | namespace tracy
class TracyLlmEmbeddings (line 11) | class TracyLlmEmbeddings
type Result (line 14) | struct Result
method Get (line 25) | [[nodiscard]] uint32_t Get( size_t idx ) const { return m_data[idx]; }
FILE: profiler/src/profiler/TracyLlmTools.cpp
type tracy (line 24) | namespace tracy
function UrlEncode (line 27) | static std::string UrlEncode( const std::string& str )
function ParseHtml (line 53) | static std::unique_ptr<pugi::xml_document> ParseHtml( const std::strin...
function T (line 113) | static T GetParam( const nlohmann::json& json, const char* name )
function T (line 127) | static T GetParamOpt( const nlohmann::json& json, const char* name, T ...
function WriteFn (line 377) | static size_t WriteFn( void* _data, size_t size, size_t num, void* ptr )
type curl_slist (line 405) | struct curl_slist
function RemoveNewline (line 504) | [[nodiscard]] static std::string RemoveNewline( std::string str )
function ReplaceAll (line 511) | static void ReplaceAll( std::string& str, std::string_view from, std::...
function RemoveTag (line 644) | static void RemoveTag( pugi::xml_node node, const char* tag )
function RemoveAttributes (line 654) | static void RemoveAttributes( pugi::xml_node node, const char* tag, st...
function RemoveEmptyTags (line 682) | static void RemoveEmptyTags( pugi::xml_node node )
type xml_writer (line 698) | struct xml_writer : public pugi::xml_writer
method xml_writer (line 700) | explicit xml_writer( std::string& str ) : str( str ) {}
method write (line 701) | void write( const void* data, size_t size ) override { str.append( (...
FILE: profiler/src/profiler/TracyLlmTools.hpp
class EmbedData (line 14) | class EmbedData
type tracy (line 16) | namespace tracy
class TracyLlmApi (line 19) | class TracyLlmApi
class TracyManualData (line 20) | class TracyManualData
class Worker (line 21) | class Worker
class TracyLlmTools (line 23) | class TracyLlmTools
type EmbeddingState (line 26) | struct EmbeddingState
FILE: profiler/src/profiler/TracyLockHelpers.hpp
type tracy (line 8) | namespace tracy
function tracy_force_inline (line 11) | static tracy_force_inline uint64_t GetThreadBit( uint8_t thread )
function tracy_force_inline (line 16) | static tracy_force_inline bool IsThreadWaiting( uint64_t bitlist, uint...
function tracy_force_inline (line 21) | static tracy_force_inline bool AreOtherWaiting( uint64_t bitlist, uint...
FILE: profiler/src/profiler/TracyManualData.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyManualData.hpp
type tracy (line 9) | namespace tracy
class TracyManualData (line 12) | class TracyManualData
type ManualChunk (line 15) | struct ManualChunk
method GetHash (line 28) | [[nodiscard]] uint64_t GetHash() const { return m_hash; }
FILE: profiler/src/profiler/TracyMarkdown.cpp
type tracy (line 32) | namespace tracy
class MarkdownContext (line 35) | class MarkdownContext
type List (line 37) | struct List
method MarkdownContext (line 44) | MarkdownContext( View* view, Worker* worker ) : m_view( view ), m_wo...
method EnterBlock (line 46) | int EnterBlock( MD_BLOCKTYPE type, void* detail )
method LeaveBlock (line 149) | int LeaveBlock( MD_BLOCKTYPE type, void* detail )
method EnterSpan (line 203) | int EnterSpan( MD_SPANTYPE type, void* detail )
method LeaveSpan (line 225) | int LeaveSpan( MD_SPANTYPE type, void* detail )
method Text (line 247) | int Text( MD_TEXTTYPE type, const MD_CHAR* text, MD_SIZE size )
method Glue (line 321) | void Glue()
method Separate (line 327) | void Separate()
method PrintText (line 334) | bool PrintText( const char* text, const char* end = nullptr )
method PrintTextExt (line 355) | void PrintTextExt( const char* text, const char* end = nullptr, bool...
method LinkHover (line 367) | void LinkHover()
FILE: profiler/src/profiler/TracyMarkdown.hpp
type MD_PARSER (line 6) | struct MD_PARSER
type tracy (line 8) | namespace tracy
class View (line 11) | class View
class Worker (line 12) | class Worker
class Markdown (line 14) | class Markdown
FILE: profiler/src/profiler/TracyMicroArchitecture.cpp
type tracy (line 3) | namespace tracy
FILE: profiler/src/profiler/TracyMicroArchitecture.hpp
type tracy (line 3) | namespace tracy
type AsmDesc (line 6) | struct AsmDesc
type AsmVar (line 12) | struct AsmVar
type AsmOp (line 22) | struct AsmOp
type MicroArchitecture (line 30) | struct MicroArchitecture
FILE: profiler/src/profiler/TracyMouse.cpp
type tracy (line 7) | namespace tracy
type Mouse (line 13) | struct Mouse
function MouseFrame (line 25) | void MouseFrame()
function IsMouseDown (line 56) | bool IsMouseDown( ImGuiMouseButton button )
function IsMouseClicked (line 61) | bool IsMouseClicked( ImGuiMouseButton button )
function IsMouseDragging (line 66) | bool IsMouseDragging( ImGuiMouseButton button )
function ImVec2 (line 71) | ImVec2 GetMouseDragDelta( ImGuiMouseButton button )
function ConsumeMouseEvents (line 76) | void ConsumeMouseEvents( ImGuiMouseButton button )
function IsMouseClickReleased (line 83) | bool IsMouseClickReleased( ImGuiMouseButton button )
FILE: profiler/src/profiler/TracyMouse.hpp
type tracy (line 6) | namespace tracy
FILE: profiler/src/profiler/TracyProtoHistory.cpp
type tracy (line 4) | namespace tracy
FILE: profiler/src/profiler/TracyProtoHistory.hpp
type tracy (line 6) | namespace tracy
type ProtocolHistory_t (line 9) | struct ProtocolHistory_t
FILE: profiler/src/profiler/TracySourceContents.cpp
type tracy (line 5) | namespace tracy
FILE: profiler/src/profiler/TracySourceContents.hpp
type tracy (line 10) | namespace tracy
class View (line 13) | class View
class Worker (line 14) | class Worker
class SourceContents (line 16) | class SourceContents
method empty (line 27) | bool empty() const { return m_lines.empty(); }
method idx (line 30) | uint32_t idx() const { return m_fileStringIdx; }
method is_cached (line 31) | bool is_cached() const { return m_data != m_dataBuf; }
method data_size (line 33) | size_t data_size() const { return m_dataSize; }
FILE: profiler/src/profiler/TracySourceTokenizer.cpp
type tracy (line 5) | namespace tracy
function GetKeywords (line 9) | static unordered_flat_set<const char*, charutil::Hasher, charutil::Com...
function GetTypes (line 28) | static unordered_flat_set<const char*, charutil::Hasher, charutil::Com...
function GetSpecial (line 67) | static unordered_flat_set<const char*, charutil::Hasher, charutil::Com...
function GetAsmRegs (line 76) | static unordered_flat_set<const char*, charutil::Hasher, charutil::Com...
function GetAsmSizeDirectives (line 121) | static unordered_flat_set<const char*, charutil::Hasher, charutil::Com...
function TokenizeNumber (line 196) | static bool TokenizeNumber( const char*& begin, const char* end )
FILE: profiler/src/profiler/TracySourceTokenizer.hpp
type tracy (line 7) | namespace tracy
class Tokenizer (line 10) | class Tokenizer
type TokenColor (line 13) | enum class TokenColor : uint8_t
type Token (line 27) | struct Token
type Line (line 34) | struct Line
type AsmTokenColor (line 41) | enum class AsmTokenColor : uint8_t
type AsmToken (line 50) | struct AsmToken
FILE: profiler/src/profiler/TracySourceView.cpp
type tracy (line 27) | namespace tracy
type MicroArchUx (line 30) | struct MicroArchUx
type ChildStat (line 96) | struct ChildStat
function tracy_force_inline (line 103) | static tracy_force_inline uint64_t PackFileLine( uint32_t fileIdx, uin...
function CountHwSamples (line 108) | static size_t CountHwSamples( const SortedVector<Int48, Int48Sort>& ve...
function PrintHwSampleTooltip (line 117) | static void PrintHwSampleTooltip( size_t cycles, size_t retired, size_...
function PrintSourceFragment (line 181) | static void PrintSourceFragment( const SourceContents& src, uint32_t s...
function PackCpuInfo (line 471) | static constexpr uint32_t PackCpuInfo( uint32_t cpuid )
type CpuIdMap (line 476) | struct CpuIdMap
function IsJumpConditionalX86 (line 673) | static bool IsJumpConditionalX86( const char* op )
type JumpRange (line 986) | struct JumpRange
function GetHotnessColor (line 1780) | static uint32_t GetHotnessColor( uint32_t count, uint32_t maxCount )
function GetHotnessGlow (line 1804) | static uint32_t GetHotnessGlow( uint32_t count, uint32_t maxCount )
function GetGoodnessColor (line 1862) | static uint32_t GetGoodnessColor( float inRatio )
function FormatHexBytesRaw (line 2372) | static int FormatHexBytesRaw( char* buf, const uint8_t* bytes, size_t ...
function PrintHexBytesRaw (line 2386) | static int PrintHexBytesRaw( const uint8_t* bytes, size_t len )
function PrintHexBytesArm (line 2402) | static int PrintHexBytesArm( const uint8_t* bytes )
function PrintHexBytes (line 2418) | static int PrintHexBytes( const uint8_t* bytes, size_t len, CpuArchite...
function PrintPercentage (line 3414) | static bool PrintPercentage( float val, uint32_t col = 0xFFFFFFFF )
function tracy_force_inline (line 3758) | static tracy_force_inline uint32_t AsmColor( uint32_t base, bool inCon...
FILE: profiler/src/profiler/TracySourceView.hpp
type ImFont (line 17) | struct ImFont
type ImVec2 (line 18) | struct ImVec2
type tracy (line 20) | namespace tracy
class View (line 23) | class View
class Worker (line 24) | class Worker
type CallstackFrameData (line 25) | struct CallstackFrameData
class SourceView (line 27) | class SourceView
type RegsX86 (line 30) | enum class RegsX86 : uint8_t
type CostType (line 42) | enum class CostType
type AsmOpParams (line 56) | struct AsmOpParams
type LeaData (line 62) | enum class LeaData : uint8_t
type OpType (line 82) | enum class OpType : uint8_t
type AsmLine (line 92) | struct AsmLine
type JumpData (line 115) | struct JumpData
type AddrStat (line 130) | struct AddrStat
method AddrStat (line 135) | AddrStat& operator+=( const AddrStat& other )
type AddrStatData (line 143) | struct AddrStatData
type History (line 155) | struct History
method CalcInlineStats (line 172) | void CalcInlineStats( bool val ) { m_calcInlineStats = val; }
method IsSymbolView (line 173) | bool IsSymbolView() const { return !m_asm.empty(); }
FILE: profiler/src/profiler/TracyStorage.cpp
type tracy (line 22) | namespace tracy
function CreateDirStruct (line 25) | static bool CreateDirStruct( const std::string& path )
function GetConfigDirectory (line 57) | static void GetConfigDirectory( char* buf, size_t& sz )
function GetCacheDirectory (line 91) | static void GetCacheDirectory( char* buf, size_t& sz )
FILE: profiler/src/profiler/TracyStorage.hpp
type tracy (line 6) | namespace tracy
FILE: profiler/src/profiler/TracyTexture.cpp
type tracy (line 17) | namespace tracy
function InitTexture (line 22) | void InitTexture()
function ImTextureID (line 42) | ImTextureID MakeTexture( bool zigzag )
function FreeTexture (line 54) | void FreeTexture( ImTextureID _tex, void(*runOnMainThread)(const std::...
function tracy_force_inline (line 60) | static tracy_force_inline void DecodeDxt1Part( uint64_t d, uint32_t* d...
function UpdateTexture (line 142) | void UpdateTexture( ImTextureID _tex, const char* data, int w, int h )
function UpdateTextureRGBA (line 170) | void UpdateTextureRGBA( ImTextureID _tex, void* data, int w, int h )
function UpdateTextureRGBAMips (line 177) | void UpdateTextureRGBAMips( ImTextureID _tex, void** data, int* w, int...
FILE: profiler/src/profiler/TracyTexture.hpp
type tracy (line 7) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineContext.hpp
type tracy (line 8) | namespace tracy
type TimelineContext (line 11) | struct TimelineContext
FILE: profiler/src/profiler/TracyTimelineController.cpp
type tracy (line 11) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineController.hpp
type tracy (line 13) | namespace tracy
class TimelineItem (line 16) | class TimelineItem
class View (line 17) | class View
class Worker (line 18) | class Worker
class TimelineController (line 20) | class TimelineController
method AddItem (line 31) | void AddItem( U* data )
method GetHeight (line 38) | float GetHeight() const { return m_height; }
method tracy_force_inline (line 41) | tracy_force_inline TimelineItem& GetItem( const void* data )
FILE: profiler/src/profiler/TracyTimelineDraw.hpp
type tracy (line 9) | namespace tracy
type TimelineDrawType (line 12) | enum class TimelineDrawType : uint8_t
type TimelineDraw (line 20) | struct TimelineDraw
type ContextSwitchDrawType (line 31) | enum class ContextSwitchDrawType : uint8_t
type ContextSwitchDraw (line 38) | struct ContextSwitchDraw
type SamplesDraw (line 46) | struct SamplesDraw
type MessagesDraw (line 53) | struct MessagesDraw
type CpuUsageDraw (line 61) | struct CpuUsageDraw
type CpuCtxDraw (line 68) | struct CpuCtxDraw
type LockState (line 76) | struct LockState
type Type (line 78) | enum Type : uint8_t
type LockDrawItem (line 87) | struct LockDrawItem
type LockDraw (line 95) | struct LockDraw
FILE: profiler/src/profiler/TracyTimelineItem.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineItem.hpp
type tracy (line 9) | namespace tracy
type TimelineContext (line 12) | struct TimelineContext
class TaskDispatch (line 13) | class TaskDispatch
class View (line 14) | class View
class Worker (line 15) | class Worker
class TimelineItem (line 17) | class TimelineItem
method WantPreprocess (line 26) | bool WantPreprocess() const { return m_wantPreprocess; }
method Preprocess (line 27) | virtual void Preprocess( const TimelineContext& ctx, TaskDispatch& t...
method SetVisible (line 30) | virtual void SetVisible( bool visible ) { m_visible = visible; }
method IsVisible (line 31) | virtual bool IsVisible() const { return m_visible; }
method SetShowFull (line 33) | void SetShowFull( bool showFull ) { m_showFull = showFull; }
method GetHeight (line 36) | int GetHeight() const { return m_height; }
method DrawOverlay (line 53) | virtual void DrawOverlay( const ImVec2& ul, const ImVec2& dr ) {}
method DrawExtraPopupItems (line 54) | virtual void DrawExtraPopupItems() {}
method DrawFinished (line 55) | virtual void DrawFinished() {}
method IsEmpty (line 57) | virtual bool IsEmpty() const { return false; }
FILE: profiler/src/profiler/TracyTimelineItemCpuData.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineItemCpuData.hpp
type tracy (line 8) | namespace tracy
class TimelineItemCpuData (line 11) | class TimelineItemCpuData final : public TimelineItem
method HeaderColor (line 20) | uint32_t HeaderColor() const override { return 0xFFDD88DD; }
method HeaderColorInactive (line 21) | uint32_t HeaderColorInactive() const override { return 0xFF6E446E; }
method HeaderLineColor (line 22) | uint32_t HeaderLineColor() const override { return 0x66DD88DD; }
FILE: profiler/src/profiler/TracyTimelineItemGpu.cpp
type tracy (line 10) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineItemGpu.hpp
type tracy (line 7) | namespace tracy
class TimelineItemGpu (line 10) | class TimelineItemGpu final : public TimelineItem
method GetIdx (line 15) | int GetIdx() const { return m_idx; }
method HeaderColor (line 18) | uint32_t HeaderColor() const override { return 0xFFFFAAAA; }
method HeaderColorInactive (line 19) | uint32_t HeaderColorInactive() const override { return 0xFF886666; }
method HeaderLineColor (line 20) | uint32_t HeaderLineColor() const override { return 0x33FFFFFF; }
FILE: profiler/src/profiler/TracyTimelineItemPlot.cpp
type tracy (line 10) | namespace tracy
FILE: profiler/src/profiler/TracyTimelineItemPlot.hpp
type tracy (line 8) | namespace tracy
class TimelineItemPlot (line 11) | class TimelineItemPlot final : public TimelineItem
method HeaderColor (line 17) | uint32_t HeaderColor() const override { return 0xFF44DDDD; }
method HeaderColorInactive (line 18) | uint32_t HeaderColorInactive() const override { return 0xFF226E6E; }
method HeaderLineColor (line 19) | uint32_t HeaderLineColor() const override { return 0x8844DDDD; }
FILE: profiler/src/profiler/TracyTimelineItemThread.cpp
type tracy (line 14) | namespace tracy
function GetNextLockEvent (line 681) | static Vector<LockEventPtr>::const_iterator GetNextLockEvent( const Ve...
function CombineLockState (line 772) | static LockState::Type CombineLockState( LockState::Type state, LockSt...
function GetNextLockEventShared (line 777) | static Vector<LockEventPtr>::const_iterator GetNextLockEventShared( co...
FILE: profiler/src/profiler/TracyTimelineItemThread.hpp
type tracy (line 8) | namespace tracy
class TimelineItemThread (line 11) | class TimelineItemThread final : public TimelineItem
FILE: profiler/src/profiler/TracyUserData.cpp
type tracy (line 16) | namespace tracy
function FILE (line 368) | FILE* UserData::OpenFile( const char* filename, bool write )
FILE: profiler/src/profiler/TracyUserData.hpp
type tracy (line 10) | namespace tracy
type Annotation (line 13) | struct Annotation
type SourceRegex (line 14) | struct SourceRegex
type ViewData (line 15) | struct ViewData
class UserData (line 17) | class UserData
method Valid (line 23) | bool Valid() const { return !m_program.empty(); }
FILE: profiler/src/profiler/TracyUtility.cpp
type tracy (line 8) | namespace tracy
function TooltipNormalizedName (line 121) | void TooltipNormalizedName( const char* name, const char* normalized )
function GetThreadColor (line 141) | uint32_t GetThreadColor( uint64_t thread, int depth, bool dynamic )
function GetPlotColor (line 147) | uint32_t GetPlotColor( const PlotData& plot, const Worker& worker )
function SplitLines (line 190) | std::vector<std::string> SplitLines( const char* data, size_t sz )
function IsFrameExternal (line 216) | bool IsFrameExternal( const char* filename, const char* image )
FILE: profiler/src/profiler/TracyUtility.hpp
type tracy (line 11) | namespace tracy
class Worker (line 14) | class Worker
type ShortenName (line 16) | enum class ShortenName : uint8_t
FILE: profiler/src/profiler/TracyView.cpp
type tracy (line 36) | namespace tracy
FILE: profiler/src/profiler/TracyView.hpp
type tracy (line 38) | namespace tracy
type MemoryPage (line 54) | struct MemoryPage
class FileRead (line 55) | class FileRead
class SourceView (line 56) | class SourceView
type TimelineContext (line 57) | struct TimelineContext
type TimelineDraw (line 58) | struct TimelineDraw
type ContextSwitchDraw (line 59) | struct ContextSwitchDraw
type SamplesDraw (line 60) | struct SamplesDraw
type MessagesDraw (line 61) | struct MessagesDraw
type CpuUsageDraw (line 62) | struct CpuUsageDraw
type CpuCtxDraw (line 63) | struct CpuCtxDraw
type LockDraw (line 64) | struct LockDraw
type PlotDraw (line 65) | struct PlotDraw
type FlameGraphContext (line 66) | struct FlameGraphContext
class TracyManualData (line 67) | class TracyManualData
class View (line 70) | class View
type Animation (line 72) | struct Animation
type Region (line 80) | struct Region
type ZoneTimeData (line 87) | struct ZoneTimeData
type AccumulationMode (line 93) | enum class AccumulationMode
type StatisticsCache (line 100) | struct StatisticsCache
type FrameImageCache (line 110) | struct FrameImageCache
type PlotView (line 117) | struct PlotView
method NotifyRootWindowSize (line 134) | void NotifyRootWindowSize( float w, float h ) { m_rootWidth = w; m_r...
method ReconnectRequested (line 141) | bool ReconnectRequested() const { return m_reconnectRequested; }
method GetAddress (line 142) | std::string GetAddress() const { return m_worker.GetAddr(); }
method GetPort (line 143) | uint16_t GetPort() const { return m_worker.GetPort(); }
method ValidateSourceAge (line 146) | bool ValidateSourceAge() const { return m_validateSourceAge; }
method ShowSampleParents (line 148) | void ShowSampleParents( uint64_t symAddr, bool withInlines ) { m_sam...
method ViewData (line 150) | ViewData& GetViewData() { return m_vd; }
method ViewData (line 151) | const ViewData& GetViewData() const { return m_vd; }
method ShortenName (line 153) | ShortenName GetShortenName() const { return m_vd.shortenName; }
method GetNextGpuIdx (line 154) | int GetNextGpuIdx() { return m_gpuIdx++; }
method MessageData (line 156) | const MessageData* GetMessageHighlight() const { return m_msgHighlig...
method GetLockInfoWindow (line 157) | uint32_t GetLockInfoWindow() const { return m_lockInfoWindow; }
method tracy_force_inline (line 159) | tracy_force_inline bool& Vis( const void* ptr )
method GetSelectThread (line 168) | uint64_t GetSelectThread() { return m_selectedThread; }
method IsBackgroundDone (line 179) | bool IsBackgroundDone() const { return m_worker.IsBackgroundDone(); }
type ShortcutAction (line 190) | enum class ShortcutAction : uint8_t
type MemPathData (line 198) | struct MemPathData
type ViewMode (line 204) | enum class ViewMode
type MemRange (line 211) | enum class MemRange
type KeyboardNavigation (line 218) | struct KeyboardNavigation
type Direction (line 220) | enum Direction
type ZoneColorData (line 237) | struct ZoneColorData
type SymList (line 245) | struct SymList
method tracy_force_inline (line 426) | tracy_force_inline bool& VisibleMsgThread( uint64_t thread )
method tracy_force_inline (line 436) | tracy_force_inline bool& WaitStackThread( uint64_t thread )
method tracy_force_inline (line 446) | tracy_force_inline bool& FlameGraphThread( uint64_t thread )
method tracy_force_inline (line 456) | tracy_force_inline int& GpuDrift( const void* ptr )
type MessageFilter (line 509) | struct MessageFilter
method MessageFilter (line 515) | MessageFilter() { Clear(); }
method Clear (line 517) | void Clear()
method PassFilter (line 524) | bool PassFilter( const MessageData& msg, const Worker& worker ) const
type SaveThreadState (line 636) | enum class SaveThreadState
type FindZone (line 683) | struct FindZone {
type GroupBy (line 685) | enum class GroupBy : int { Thread, UserText, ZoneName, Callstack, ...
type SortBy (line 686) | enum class SortBy : int { Order, Count, Time, Mtpc }
type Group (line 688) | struct Group
method Reset (line 747) | void Reset()
method ResetMatch (line 758) | void ResetMatch()
method ResetGroups (line 774) | void ResetGroups()
method ResetSelection (line 784) | void ResetSelection()
method ShowZone (line 797) | void ShowZone( int16_t srcloc, const char* name )
method ShowZone (line 806) | void ShowZone( int16_t srcloc, const char* name, int64_t limitMin,...
type CompVal (line 821) | struct CompVal
method ResetSelection (line 857) | void ResetSelection()
method Reset (line 869) | void Reset()
type TimeDistribution (line 929) | struct TimeDistribution {
method Reset (line 978) | void Reset()
FILE: profiler/src/profiler/TracyViewData.hpp
type tracy (line 9) | namespace tracy
type Range (line 12) | struct Range
method StartFrame (line 14) | void StartFrame() { hiMin = hiMax = false; }
type RangeSlim (line 25) | struct RangeSlim
type ViewData (line 36) | struct ViewData
type Annotation (line 66) | struct Annotation
type SourceRegex (line 73) | struct SourceRegex
FILE: profiler/src/profiler/TracyView_Annotations.cpp
type tracy (line 7) | namespace tracy
FILE: profiler/src/profiler/TracyView_Callstack.cpp
type tracy (line 14) | namespace tracy
FILE: profiler/src/profiler/TracyView_Compare.cpp
type tracy (line 14) | namespace tracy
function PrintFile (line 139) | static void PrintFile( const char* data, size_t sz, uint32_t color )
function PrintDiff (line 148) | static void PrintDiff( const std::string& diff )
function PrintSpeedupOrSlowdown (line 164) | static void PrintSpeedupOrSlowdown( double time_this, double time_exte...
FILE: profiler/src/profiler/TracyView_ConnectionState.cpp
type tracy (line 8) | namespace tracy
FILE: profiler/src/profiler/TracyView_ContextSwitch.cpp
type tracy (line 12) | namespace tracy
FILE: profiler/src/profiler/TracyView_CpuData.cpp
type tracy (line 16) | namespace tracy
type PidData (line 580) | struct PidData
FILE: profiler/src/profiler/TracyView_FindZone.cpp
type tracy (line 15) | namespace tracy
type GroupRange (line 2016) | struct GroupRange {
FILE: profiler/src/profiler/TracyView_FlameGraph.cpp
type tracy (line 14) | namespace tracy
type FrameCache (line 250) | struct FrameCache
function SortFlameGraph (line 372) | static void SortFlameGraph( std::vector<FlameGraphItem>& data )
type FlameGraphContext (line 378) | struct FlameGraphContext
function MergeFlameGraph (line 703) | static void MergeFlameGraph( std::vector<FlameGraphItem>& dst, std::ve...
function FixupTime (line 720) | static void FixupTime( std::vector<FlameGraphItem>& data, uint64_t t =...
FILE: profiler/src/profiler/TracyView_FrameOverview.cpp
type tracy (line 7) | namespace tracy
function GetFrameColor (line 10) | static uint32_t GetFrameColor( uint64_t time, uint64_t target )
function GetFrameWidth (line 17) | static int GetFrameWidth( int frameScale )
function GetFrameGroup (line 22) | static int GetFrameGroup( int frameScale )
function T (line 28) | constexpr const T& clamp( const T& v, const T& lo, const T& hi )
FILE: profiler/src/profiler/TracyView_FrameTimeline.cpp
type tracy (line 10) | namespace tracy
function tracy_force_inline (line 16) | static tracy_force_inline uint32_t GetColorMuted( uint32_t color, bool...
FILE: profiler/src/profiler/TracyView_FrameTree.cpp
type tracy (line 6) | namespace tracy
function tracy_force_inline (line 10) | static tracy_force_inline T* GetFrameTreeItemNoGroup( unordered_flat_m...
function tracy_force_inline (line 21) | static tracy_force_inline T* GetFrameTreeItemGroup( unordered_flat_map...
function tracy_force_inline (line 39) | static tracy_force_inline T* GetParentFrameTreeItemGroup( unordered_fl...
FILE: profiler/src/profiler/TracyView_GpuTimeline.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyView_Locks.cpp
type tracy (line 14) | namespace tracy
FILE: profiler/src/profiler/TracyView_Manual.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyView_Memory.cpp
type tracy (line 10) | namespace tracy
type MemoryPage (line 54) | struct MemoryPage
function tracy_force_inline (line 60) | static tracy_force_inline MemoryPage& GetPage( unordered_flat_map<uint...
function tracy_force_inline (line 70) | static tracy_force_inline void FillPages( unordered_flat_map<uint64_t,...
FILE: profiler/src/profiler/TracyView_Messages.cpp
type tracy (line 7) | namespace tracy
FILE: profiler/src/profiler/TracyView_Navigation.cpp
type tracy (line 3) | namespace tracy
FILE: profiler/src/profiler/TracyView_NotificationArea.cpp
type tracy (line 8) | namespace tracy
FILE: profiler/src/profiler/TracyView_Options.cpp
type tracy (line 15) | namespace tracy
function DefaultMarker (line 18) | static void DefaultMarker( bool active, bool tooltip = true )
FILE: profiler/src/profiler/TracyView_Playback.cpp
type tracy (line 6) | namespace tracy
FILE: profiler/src/profiler/TracyView_Plots.cpp
type tracy (line 11) | namespace tracy
FILE: profiler/src/profiler/TracyView_Ranges.cpp
type tracy (line 6) | namespace tracy
FILE: profiler/src/profiler/TracyView_Samples.cpp
type tracy (line 15) | namespace tracy
FILE: profiler/src/profiler/TracyView_Statistics.cpp
type tracy (line 10) | namespace tracy
type SrcLocZonesSlim (line 15) | struct SrcLocZonesSlim
FILE: profiler/src/profiler/TracyView_Timeline.cpp
type tracy (line 14) | namespace tracy
FILE: profiler/src/profiler/TracyView_TraceInfo.cpp
type tracy (line 9) | namespace tracy
FILE: profiler/src/profiler/TracyView_Utility.cpp
type tracy (line 9) | namespace tracy
function ZoneEvent (line 159) | const ZoneEvent* View::FindZoneAtTime( uint64_t thread, int64_t time )...
function ZoneEvent (line 200) | const ZoneEvent* View::GetZoneChild( const ZoneEvent& zone, int64_t ti...
function ZoneEvent (line 221) | const ZoneEvent* View::GetZoneParent( const ZoneEvent& zone ) const
function ZoneEvent (line 271) | const ZoneEvent* View::GetZoneParent( const ZoneEvent& zone, uint64_t ...
function GpuEvent (line 391) | const GpuEvent* View::GetZoneParent( const GpuEvent& zone ) const
function ThreadData (line 429) | const ThreadData* View::GetZoneThreadData( const ZoneEvent& zone ) const
function GpuCtxData (line 522) | const GpuCtxData* View::GetZoneCtx( const GpuEvent& zone ) const
FILE: profiler/src/profiler/TracyView_ZoneInfo.cpp
type tracy (line 11) | namespace tracy
function DrawZoneTrace (line 130) | void DrawZoneTrace( const std::vector<T>& trace, const std::function<v...
type ChildGroup (line 1116) | struct ChildGroup
type ChildGroup (line 1589) | struct ChildGroup
FILE: profiler/src/profiler/TracyView_ZoneTimeline.cpp
type tracy (line 12) | namespace tracy
function tracy_force_inline (line 19) | static tracy_force_inline uint32_t MixGhostColor( uint32_t c0, uint32_...
FILE: profiler/src/profiler/TracyWeb.cpp
type tracy (line 13) | namespace tracy
function OpenWebpage (line 16) | void OpenWebpage( const char* url )
FILE: profiler/src/profiler/TracyWeb.hpp
type tracy (line 4) | namespace tracy
FILE: profiler/src/stb_image.h
type stbi_uc (line 386) | typedef unsigned char stbi_uc;
type stbi_us (line 387) | typedef unsigned short stbi_us;
type stbi_io_callbacks (line 410) | typedef struct
type stbi__uint16 (line 641) | typedef unsigned short stbi__uint16;
type stbi__int16 (line 642) | typedef signed short stbi__int16;
type stbi__uint32 (line 643) | typedef unsigned int stbi__uint32;
type stbi__int32 (line 644) | typedef signed int stbi__int32;
type stbi__uint16 (line 647) | typedef uint16_t stbi__uint16;
type stbi__int16 (line 648) | typedef int16_t stbi__int16;
type stbi__uint32 (line 649) | typedef uint32_t stbi__uint32;
type stbi__int32 (line 650) | typedef int32_t stbi__int32;
function stbi__cpuid3 (line 731) | static int stbi__cpuid3(void)
function stbi__sse2_available (line 753) | static int stbi__sse2_available(void)
function stbi__sse2_available (line 764) | static int stbi__sse2_available(void)
type stbi__context (line 804) | typedef struct
function stbi__start_mem (line 825) | static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int...
function stbi__start_callbacks (line 835) | static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c...
function stbi__stdio_read (line 849) | static int stbi__stdio_read(void *user, char *data, int size)
function stbi__stdio_skip (line 854) | static void stbi__stdio_skip(void *user, int n)
function stbi__stdio_eof (line 864) | static int stbi__stdio_eof(void *user)
function stbi__start_file (line 876) | static void stbi__start_file(stbi__context *s, FILE *f)
function stbi__rewind (line 885) | static void stbi__rewind(stbi__context *s)
type stbi__result_info (line 900) | typedef struct
function STBIDEF (line 971) | STBIDEF const char *stbi_failure_reason(void)
function stbi__err (line 977) | static int stbi__err(const char *str)
function stbi__addsizes_valid (line 1001) | static int stbi__addsizes_valid(int a, int b)
function stbi__mul2sizes_valid (line 1013) | static int stbi__mul2sizes_valid(int a, int b)
function stbi__mad2sizes_valid (line 1023) | static int stbi__mad2sizes_valid(int a, int b, int add)
function stbi__mad3sizes_valid (line 1030) | static int stbi__mad3sizes_valid(int a, int b, int c, int add)
function stbi__mad4sizes_valid (line 1038) | static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
function stbi__addints_valid (line 1069) | static int stbi__addints_valid(int a, int b)
function stbi__mul2shorts_valid (line 1077) | static int stbi__mul2shorts_valid(int a, int b)
function STBIDEF (line 1100) | STBIDEF void stbi_image_free(void *retval_from_stbi_load)
function STBIDEF (line 1115) | STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)
function STBIDEF (line 1125) | STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_sh...
function stbi_uc (line 1189) | static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, ...
function stbi__uint16 (line 1205) | static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, ...
function stbi__vertical_flip (line 1221) | static void stbi__vertical_flip(void *image, int w, int h, int bytes_per...
function stbi__vertical_flip_slices (line 1246) | static void stbi__vertical_flip_slices(void *image, int w, int h, int z,...
function stbi__uint16 (line 1285) | static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, ...
function stbi__float_postprocess (line 1313) | static void stbi__float_postprocess(float *result, int *x, int *y, int *...
function STBIDEF (line 1330) | STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, c...
function FILE (line 1336) | static FILE *stbi__fopen(char const *filename, char const *mode)
function STBIDEF (line 1365) | STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *co...
function STBIDEF (line 1375) | STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp,...
function STBIDEF (line 1388) | STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, in...
function STBIDEF (line 1401) | STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int ...
function STBIDEF (line 1414) | STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len...
function STBIDEF (line 1421) | STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *cl...
function STBIDEF (line 1428) | STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, i...
function STBIDEF (line 1435) | STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk,...
function STBIDEF (line 1443) | STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int le...
function STBIDEF (line 1477) | STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, in...
function STBIDEF (line 1484) | STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, ...
function STBIDEF (line 1492) | STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *com...
function STBIDEF (line 1502) | STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, ...
function STBIDEF (line 1516) | STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
function STBIDEF (line 1530) | STBIDEF int stbi_is_hdr (char const *filename)
function STBIDEF (line 1541) | STBIDEF int stbi_is_hdr_from_file(FILE *f)
function STBIDEF (line 1558) | STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clb...
function STBIDEF (line 1574) | STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = ga...
function STBIDEF (line 1575) | STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = sc...
function STBIDEF (line 1580) | STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = ...
function STBIDEF (line 1581) | STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = ...
function stbi__refill_buffer (line 1596) | static void stbi__refill_buffer(stbi__context *s)
function stbi_inline (line 1613) | stbi_inline static stbi_uc stbi__get8(stbi__context *s)
function stbi_inline (line 1627) | stbi_inline static int stbi__at_eof(stbi__context *s)
function stbi__skip (line 1643) | static void stbi__skip(stbi__context *s, int n)
function stbi__getn (line 1665) | static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
function stbi__get16be (line 1693) | static int stbi__get16be(stbi__context *s)
function stbi__uint32 (line 1703) | static stbi__uint32 stbi__get32be(stbi__context *s)
function stbi__get16le (line 1713) | static int stbi__get16le(stbi__context *s)
function stbi__uint32 (line 1721) | static stbi__uint32 stbi__get32le(stbi__context *s)
function stbi_uc (line 1745) | static stbi_uc stbi__compute_y(int r, int g, int b)
function stbi__uint16 (line 1802) | static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
function stbi__uint16 (line 1811) | static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_...
function stbi_uc (line 1883) | static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp)
type stbi__huffman (line 1937) | typedef struct
type stbi__jpeg (line 1948) | typedef struct
function stbi__build_huffman (line 2002) | static int stbi__build_huffman(stbi__huffman *h, int *count)
function stbi__build_fast_ac (line 2049) | static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
function stbi__grow_buffer_unsafe (line 2074) | static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
function stbi_inline (line 2096) | stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffm...
function stbi_inline (line 2152) | stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
function stbi_inline (line 2168) | stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)
function stbi_inline (line 2180) | stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)
function stbi__jpeg_decode_block (line 2209) | static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__...
function stbi__jpeg_decode_block_prog_dc (line 2264) | static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64]...
function stbi__jpeg_decode_block_prog_ac (line 2294) | static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64]...
function stbi_inline (line 2415) | stbi_inline static stbi_uc stbi__clamp(int x)
function stbi__idct_block (line 2466) | static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])
function stbi__idct_simd (line 2529) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
function stbi__idct_simd (line 2710) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
function stbi_uc (line 2918) | static stbi_uc stbi__get_marker(stbi__jpeg *j)
function stbi__jpeg_reset (line 2935) | static void stbi__jpeg_reset(stbi__jpeg *j)
function stbi__parse_entropy_coded_data (line 2948) | static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
function stbi__jpeg_dequantize (line 3072) | static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant)
function stbi__jpeg_finish (line 3079) | static void stbi__jpeg_finish(stbi__jpeg *z)
function stbi__process_marker (line 3098) | static int stbi__process_marker(stbi__jpeg *z, int m)
function stbi__process_scan_header (line 3202) | static int stbi__process_scan_header(stbi__jpeg *z)
function stbi__free_jpeg_components (line 3241) | static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)
function stbi__process_frame_header (line 3263) | static int stbi__process_frame_header(stbi__jpeg *z, int scan)
function stbi__decode_jpeg_header (line 3364) | static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
function stbi_uc (line 3388) | static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j)
function stbi__decode_jpeg_image (line 3411) | static int stbi__decode_jpeg_image(stbi__jpeg *j)
type stbi_uc (line 3450) | typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_u...
function stbi_uc (line 3455) | static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *...
function stbi_uc (line 3464) | static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, s...
function stbi_uc (line 3474) | static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, ...
function stbi_uc (line 3504) | static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, ...
function stbi_uc (line 3529) | static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_n...
function stbi_uc (line 3645) | static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_nea...
function stbi__YCbCr_to_RGB_row (line 3659) | static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const...
function stbi__YCbCr_to_RGB_simd (line 3685) | static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi...
function stbi__setup_jpeg (line 3820) | static void stbi__setup_jpeg(stbi__jpeg *j)
function stbi__cleanup_jpeg (line 3842) | static void stbi__cleanup_jpeg(stbi__jpeg *j)
type stbi__resample (line 3847) | typedef struct
function stbi_uc (line 3858) | static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y)
function stbi_uc (line 3864) | static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, i...
function stbi__jpeg_test (line 4041) | static int stbi__jpeg_test(stbi__context *s)
function stbi__jpeg_info_raw (line 4055) | static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
function stbi__jpeg_info (line 4067) | static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
type stbi__zhuffman (line 4096) | typedef struct
function stbi_inline (line 4106) | stbi_inline static int stbi__bitreverse16(int n)
function stbi_inline (line 4115) | stbi_inline static int stbi__bit_reverse(int v, int bits)
function stbi__zbuild_huffman (line 4123) | static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizeli...
type stbi__zbuf (line 4176) | typedef struct
function stbi_inline (line 4191) | stbi_inline static int stbi__zeof(stbi__zbuf *z)
function stbi_inline (line 4196) | stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
function stbi__fill_bits (line 4201) | static void stbi__fill_bits(stbi__zbuf *z)
function stbi__zreceive (line 4213) | int stbi__zreceive(stbi__zbuf *z, int n)
function stbi__zhuffman_decode_slowpath (line 4223) | static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)
function stbi_inline (line 4242) | stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffm...
function stbi__zexpand (line 4272) | static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to m...
function stbi__parse_huffman_block (line 4308) | static int stbi__parse_huffman_block(stbi__zbuf *a)
function stbi__compute_huffman_codes (line 4358) | static int stbi__compute_huffman_codes(stbi__zbuf *a)
function stbi__parse_uncompressed_block (line 4408) | static int stbi__parse_uncompressed_block(stbi__zbuf *a)
function stbi__parse_zlib_header (line 4437) | static int stbi__parse_zlib_header(stbi__zbuf *a)
function stbi__parse_zlib (line 4480) | static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
function stbi__do_zlib (line 4509) | static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, i...
function STBIDEF (line 4519) | STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int ...
function STBIDEF (line 4535) | STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *...
function STBIDEF (line 4540) | STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *b...
function STBIDEF (line 4556) | STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const ...
function STBIDEF (line 4567) | STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int l...
function STBIDEF (line 4583) | STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, co...
type stbi__pngchunk (line 4606) | typedef struct
function stbi__pngchunk (line 4612) | static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
function stbi__check_png_header (line 4620) | static int stbi__check_png_header(stbi__context *s)
type stbi__png (line 4629) | typedef struct
function stbi__paeth (line 4656) | static int stbi__paeth(int a, int b, int c)
function stbi__create_png_alpha_expand8 (line 4674) | static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, ...
function stbi__create_png_image_raw (line 4695) | static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__...
function stbi__create_png_image (line 4860) | static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stb...
function stbi__compute_transparency (line 4905) | static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int o...
function stbi__compute_transparency16 (line 4930) | static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3]...
function stbi__expand_png_palette (line 4955) | static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int ...
function STBIDEF (line 4995) | STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpr...
function STBIDEF (line 5000) | STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_conv...
function STBIDEF (line 5012) | STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_shou...
function STBIDEF (line 5018) | STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_shou...
function stbi__de_iphone (line 5032) | static void stbi__de_iphone(stbi__png *z)
function stbi__parse_png_file (line 5077) | static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
function stbi__png_test (line 5299) | static int stbi__png_test(stbi__context *s)
function stbi__png_info_raw (line 5307) | static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
function stbi__png_info (line 5319) | static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__png_is16 (line 5326) | static int stbi__png_is16(stbi__context *s)
function stbi__bmp_test_raw (line 5343) | static int stbi__bmp_test_raw(stbi__context *s)
function stbi__bmp_test (line 5358) | static int stbi__bmp_test(stbi__context *s)
function stbi__high_bit (line 5367) | static int stbi__high_bit(unsigned int z)
function stbi__bitcount (line 5379) | static int stbi__bitcount(unsigned int a)
function stbi__shiftsigned (line 5392) | static int stbi__shiftsigned(unsigned int v, int shift, int bits)
type stbi__bmp_data (line 5412) | typedef struct
function stbi__bmp_set_mask_defaults (line 5419) | static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress)
function stbi__tga_get_comp (line 5736) | static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_r...
function stbi__tga_info (line 5752) | static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__tga_test (line 5817) | static int stbi__tga_test(stbi__context *s)
function stbi__tga_read_rgb16 (line 5849) | static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
function stbi__psd_test (line 6078) | static int stbi__psd_test(stbi__context *s)
function stbi__psd_decode_rle (line 6085) | static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelC...
function stbi__pic_is4 (line 6333) | static int stbi__pic_is4(stbi__context *s,const char *str)
function stbi__pic_test_core (line 6343) | static int stbi__pic_test_core(stbi__context *s)
type stbi__pic_packet (line 6359) | typedef struct
function stbi_uc (line 6364) | static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
function stbi__copyval (line 6378) | static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
function stbi_uc (line 6387) | static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int heigh...
function stbi__pic_test (line 6538) | static int stbi__pic_test(stbi__context *s)
type stbi__gif_lzw (line 6550) | typedef struct
type stbi__gif (line 6557) | typedef struct
function stbi__gif_test_raw (line 6577) | static int stbi__gif_test_raw(stbi__context *s)
function stbi__gif_test (line 6587) | static int stbi__gif_test(stbi__context *s)
function stbi__gif_parse_colortable (line 6594) | static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256...
function stbi__gif_header (line 6605) | static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, i...
function stbi__gif_info_raw (line 6636) | static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
function stbi__out_gif_code (line 6651) | static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
function stbi_uc (line 6688) | static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
function stbi_uc (line 6775) | static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int ...
function stbi__gif_info (line 7074) | static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__hdr_test_core (line 7084) | static int stbi__hdr_test_core(stbi__context *s, const char *signature)
function stbi__hdr_test (line 7094) | static int stbi__hdr_test(stbi__context* s)
function stbi__hdr_convert (line 7128) | static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
function stbi__hdr_info (line 7286) | static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__bmp_info (line 7332) | static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__psd_info (line 7356) | static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__psd_is16 (line 7391) | static int stbi__psd_is16(stbi__context *s)
function stbi__pic_info (line 7420) | static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__pnm_test (line 7491) | static int stbi__pnm_test(stbi__context *s)
function stbi__pnm_isspace (line 7540) | static int stbi__pnm_isspace(char c)
function stbi__pnm_skip_whitespace (line 7545) | static void stbi__pnm_skip_whitespace(stbi__context *s, char *c)
function stbi__pnm_isdigit (line 7559) | static int stbi__pnm_isdigit(char c)
function stbi__pnm_getinteger (line 7564) | static int stbi__pnm_getinteger(stbi__context *s, char *c)
function stbi__pnm_info (line 7578) | static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__pnm_is16 (line 7621) | static int stbi__pnm_is16(stbi__context *s)
function stbi__info_main (line 7629) | static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
function stbi__is_16_main (line 7671) | static int stbi__is_16_main(stbi__context *s)
function STBIDEF (line 7688) | STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
function STBIDEF (line 7698) | STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
function STBIDEF (line 7709) | STBIDEF int stbi_is_16_bit(char const *filename)
function STBIDEF (line 7719) | STBIDEF int stbi_is_16_bit_from_file(FILE *f)
function STBIDEF (line 7731) | STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x...
function STBIDEF (line 7738) | STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *u...
function STBIDEF (line 7745) | STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len)
function STBIDEF (line 7752) | STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, vo...
FILE: profiler/src/stb_image_resize.h
type stbir_uint8 (line 188) | typedef unsigned char stbir_uint8;
type stbir_uint16 (line 189) | typedef unsigned short stbir_uint16;
type stbir_uint32 (line 190) | typedef unsigned int stbir_uint32;
type stbir_uint8 (line 193) | typedef uint8_t stbir_uint8;
type stbir_uint16 (line 194) | typedef uint16_t stbir_uint16;
type stbir_uint32 (line 195) | typedef uint32_t stbir_uint32;
type stbir_edge (line 258) | typedef enum
type stbir_filter (line 287) | typedef enum
type stbir_colorspace (line 297) | typedef enum
type stbir_datatype (line 340) | typedef enum
type stbir__filter_info (line 478) | typedef struct
type stbir__contributors (line 486) | typedef struct
type stbir__info (line 492) | typedef struct
function stbir__inline (line 567) | static stbir__inline int stbir__min(int a, int b)
function stbir__inline (line 572) | static stbir__inline float stbir__saturate(float x)
function stbir__inline (line 584) | static stbir__inline stbir_uint8 stbir__saturate8(int x)
function stbir__inline (line 595) | static stbir__inline stbir_uint16 stbir__saturate16(int x)
function stbir__srgb_to_linear (line 634) | static float stbir__srgb_to_linear(float f)
function stbir__linear_to_srgb (line 642) | static float stbir__linear_to_srgb(float f)
type stbir__FP32 (line 653) | typedef union
function stbir_uint8 (line 675) | static stbir_uint8 stbir__linear_to_srgb_uchar(float in)
function stbir_uint8 (line 739) | static stbir_uint8 stbir__linear_to_srgb_uchar(float f)
function stbir__filter_trapezoid (line 759) | static float stbir__filter_trapezoid(float x, float scale)
function stbir__support_trapezoid (line 779) | static float stbir__support_trapezoid(float scale)
function stbir__filter_triangle (line 785) | static float stbir__filter_triangle(float x, float s)
function stbir__filter_cubic (line 797) | static float stbir__filter_cubic(float x, float s)
function stbir__filter_catmullrom (line 811) | static float stbir__filter_catmullrom(float x, float s)
function stbir__filter_mitchell (line 825) | static float stbir__filter_mitchell(float x, float s)
function stbir__support_zero (line 839) | static float stbir__support_zero(float s)
function stbir__support_one (line 845) | static float stbir__support_one(float s)
function stbir__support_two (line 851) | static float stbir__support_two(float s)
function stbir__inline (line 866) | stbir__inline static int stbir__use_upsampling(float ratio)
function stbir__inline (line 871) | stbir__inline static int stbir__use_width_upsampling(stbir__info* stbir_...
function stbir__inline (line 876) | stbir__inline static int stbir__use_height_upsampling(stbir__info* stbir...
function stbir__get_filter_pixel_width (line 883) | static int stbir__get_filter_pixel_width(stbir_filter filter, float scale)
function stbir__get_filter_pixel_margin (line 896) | static int stbir__get_filter_pixel_margin(stbir_filter filter, float scale)
function stbir__get_coefficient_width (line 901) | static int stbir__get_coefficient_width(stbir_filter filter, float scale)
function stbir__get_contributors (line 909) | static int stbir__get_contributors(float scale, stbir_filter filter, int...
function stbir__get_total_horizontal_coefficients (line 917) | static int stbir__get_total_horizontal_coefficients(stbir__info* info)
function stbir__get_total_vertical_coefficients (line 923) | static int stbir__get_total_vertical_coefficients(stbir__info* info)
function stbir__contributors (line 929) | static stbir__contributors* stbir__get_contributor(stbir__contributors* ...
function stbir__edge_wrap_slow (line 942) | static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max)
function stbir__inline (line 1000) | stbir__inline static int stbir__edge_wrap(stbir_edge edge, int n, int max)
function stbir__calculate_sample_range_upsample (line 1009) | static void stbir__calculate_sample_range_upsample(int n, float out_filt...
function stbir__calculate_sample_range_downsample (line 1024) | static void stbir__calculate_sample_range_downsample(int n, float in_pix...
function stbir__calculate_coefficients_upsample (line 1038) | static void stbir__calculate_coefficients_upsample(stbir_filter filter, ...
function stbir__calculate_coefficients_downsample (line 1092) | static void stbir__calculate_coefficients_downsample(stbir_filter filter...
function stbir__normalize_downsample_coefficients (line 1126) | static void stbir__normalize_downsample_coefficients(stbir__contributors...
function stbir__calculate_filters (line 1203) | static void stbir__calculate_filters(stbir__contributors* contributors, ...
function stbir__decode_scanline (line 1252) | static void stbir__decode_scanline(stbir__info* stbir_info, int n)
function stbir__resample_horizontal_upsample (line 1450) | static void stbir__resample_horizontal_upsample(stbir__info* stbir_info,...
function stbir__resample_horizontal_downsample (line 1533) | static void stbir__resample_horizontal_downsample(stbir__info* stbir_inf...
function stbir__decode_and_resample_upsample (line 1658) | static void stbir__decode_and_resample_upsample(stbir__info* stbir_info,...
function stbir__decode_and_resample_downsample (line 1672) | static void stbir__decode_and_resample_downsample(stbir__info* stbir_inf...
function stbir__encode_scanline (line 1696) | static void stbir__encode_scanline(stbir__info* stbir_info, int num_pixe...
function stbir__resample_vertical_upsample (line 1870) | static void stbir__resample_vertical_upsample(stbir__info* stbir_info, i...
function stbir__resample_vertical_downsample (line 1987) | static void stbir__resample_vertical_downsample(stbir__info* stbir_info,...
function stbir__buffer_loop_upsample (line 2067) | static void stbir__buffer_loop_upsample(stbir__info* stbir_info)
function stbir__empty_ring_buffer (line 2120) | static void stbir__empty_ring_buffer(stbir__info* stbir_info, int first_...
function stbir__buffer_loop_downsample (line 2165) | static void stbir__buffer_loop_downsample(stbir__info* stbir_info)
function stbir__setup (line 2206) | static void stbir__setup(stbir__info *info, int input_w, int input_h, in...
function stbir__calculate_transform (line 2215) | static void stbir__calculate_transform(stbir__info *info, float s0, floa...
function stbir__choose_filter (line 2239) | static void stbir__choose_filter(stbir__info *info, stbir_filter h_filte...
function stbir_uint32 (line 2249) | static stbir_uint32 stbir__calculate_memory(stbir__info *info)
function stbir__resize_allocated (line 2290) | static int stbir__resize_allocated(stbir__info *info,
function stbir__resize_arbitrary (line 2428) | static int stbir__resize_arbitrary(
function STBIRDEF (line 2462) | STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels ,...
function STBIRDEF (line 2472) | STBIRDEF int stbir_resize_float( const float *input_pixels , int inp...
function STBIRDEF (line 2482) | STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels ,...
function STBIRDEF (line 2492) | STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input...
function STBIRDEF (line 2503) | STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixe...
function STBIRDEF (line 2515) | STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixel...
function STBIRDEF (line 2528) | STBIRDEF int stbir_resize_float_generic( const float *input_pixels ...
function STBIRDEF (line 2541) | STBIRDEF int stbir_resize( const void *input_pixels , int input_...
function STBIRDEF (line 2556) | STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_...
function STBIRDEF (line 2577) | STBIRDEF int stbir_resize_region( const void *input_pixels , int input_...
FILE: profiler/src/winmain.cpp
type tracy (line 7) | namespace tracy
function WinMain (line 15) | int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ...
FILE: profiler/src/winmainArchDiscovery.cpp
type tracy (line 2) | namespace tracy
function DiscoveryAVX (line 4) | bool DiscoveryAVX()
function DiscoveryAVX2 (line 13) | bool DiscoveryAVX2()
FILE: profiler/wasm/httpd.py
class MyHTTPRequestHandler (line 3) | class MyHTTPRequestHandler(server.SimpleHTTPRequestHandler):
method end_headers (line 4) | def end_headers(self):
method send_my_headers (line 8) | def send_my_headers(self):
FILE: public/client/TracyAlloc.cpp
type tracy (line 10) | namespace tracy
function tracy_no_inline (line 17) | tracy_no_inline static void InitRpmallocPlumbing()
function TRACY_API (line 36) | TRACY_API void InitRpmalloc()
FILE: public/client/TracyArmCpuTable.hpp
type tracy (line 1) | namespace tracy
FILE: public/client/TracyCallstack.cpp
function ___tracy_init_demangle_buffer (line 91) | void ___tracy_init_demangle_buffer()
function ___tracy_free_demangle_buffer (line 96) | void ___tracy_free_demangle_buffer()
type tracy (line 117) | namespace tracy
function IsKernelAddress (line 120) | static bool IsKernelAddress(uint64_t addr) {
function DestroyImageEntry (line 124) | void DestroyImageEntry( ImageEntry& entry )
class ImageCache (line 130) | class ImageCache
method ImageCache (line 134) | ImageCache( size_t imageCacheCapacity = 512 )
method ImageEntry (line 144) | ImageEntry* AddEntry( const ImageEntry& entry )
method ImageEntry (line 152) | const ImageEntry* GetImageForAddress( uint64_t address )
method Sort (line 166) | void Sort()
method Clear (line 175) | void Clear()
method ContainsImage (line 186) | bool ContainsImage( uint64_t startAddress ) const
class ImageCacheDlIteratePhdr (line 199) | class ImageCacheDlIteratePhdr : public ImageCache
method ImageCacheDlIteratePhdr (line 203) | ImageCacheDlIteratePhdr()
method ImageEntry (line 212) | const ImageEntry* GetImageForAddress( uint64_t address )
method Callback (line 227) | static int Callback( struct dl_phdr_info* info, size_t size, void* d...
method Refresh (line 253) | void Refresh()
method UpdateMainImageName (line 266) | void UpdateMainImageName()
method Clear (line 295) | void Clear()
function CreateImageCaches (line 309) | void CreateImageCaches()
function DestroyImageCaches (line 316) | void DestroyImageCaches()
function ShouldResolveSymbolsOffline (line 341) | bool ShouldResolveSymbolsOffline()
function ___tracy_RtlWalkFrameChain (line 370) | TRACY_API unsigned long ___tracy_RtlWalkFrameChain( void** callers, un...
function InitCallstackCritical (line 376) | void InitCallstackCritical()
function SymError (line 381) | static void SymError( const char* function, DWORD code ) {
function DbgHelpInit (line 397) | void DbgHelpInit()
function DWORD64 (line 444) | DWORD64 DbgHelpLoadSymbolsForModule( const char* imageName, uint64_t b...
function ImageEntry (line 473) | ImageEntry* CacheModuleInfo( const char* imagePath, uint32_t imageName...
function ImageEntry (line 484) | ImageEntry* LoadSymbolsForModuleAndCache( const char* imagePath, uint3...
function CacheProcessDrivers (line 490) | static void CacheProcessDrivers()
function CacheProcessModules (line 543) | static void CacheProcessModules()
function InitCallstack (line 569) | void InitCallstack()
function EndCallstack (line 608) | void EndCallstack()
type ModuleNameAndBaseAddress (line 652) | struct ModuleNameAndBaseAddress
function ModuleNameAndBaseAddress (line 658) | ModuleNameAndBaseAddress GetModuleNameAndPrepareSymbols( uint64_t addr )
function CallstackSymbolData (line 700) | CallstackSymbolData DecodeSymbolAddress( uint64_t ptr )
function CallstackEntryData (line 737) | CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
type backtrace_state (line 875) | struct backtrace_state
type DebugInfo (line 884) | struct DebugInfo
type KernelSymbol (line 896) | struct KernelSymbol
function InitKernelSymbols (line 907) | static void InitKernelSymbols()
function InitCallstackCritical (line 1066) | void InitCallstackCritical()
function InitCallstack (line 1070) | void InitCallstack()
function ClearDebugInfoVector (line 1106) | void ClearDebugInfoVector( FastVector<DebugInfo>& vec )
function DebugInfo (line 1117) | DebugInfo* FindDebugInfo( FastVector<DebugInfo>& vec, const uint8_t* b...
function GetDebugInfoDescriptor (line 1129) | int GetDebugInfoDescriptor( const char* buildid_data, size_t buildid_s...
function debuginfod_client (line 1162) | debuginfod_client* GetDebuginfodClient()
function EndCallstack (line 1168) | void EndCallstack()
function SymbolAddressDataCb (line 1206) | static int SymbolAddressDataCb( void* data, uintptr_t pc, uintptr_t lo...
function SymbolAddressErrorCb (line 1226) | static void SymbolAddressErrorCb( void* data, const char* /*msg*/, int...
function CallstackSymbolData (line 1234) | CallstackSymbolData DecodeSymbolAddress( uint64_t ptr )
function CallstackDataCb (line 1249) | static int CallstackDataCb( void* /*data*/, uintptr_t pc, uintptr_t lo...
function CallstackErrorCb (line 1321) | static void CallstackErrorCb( void* /*data*/, const char* /*msg*/, int...
function SymInfoCallback (line 1336) | void SymInfoCallback( void* /*data*/, uintptr_t pc, const char* symnam...
function SymInfoError (line 1342) | void SymInfoError( void* /*data*/, const char* /*msg*/, int /*errnum*/ )
function GetSymbolForOfflineResolve (line 1348) | void GetSymbolForOfflineResolve(void* address, uint64_t imageBaseAddre...
function CallstackEntryData (line 1359) | CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
function InitCallstackCritical (line 1425) | void InitCallstackCritical()
function InitCallstack (line 1429) | void InitCallstack()
function EndCallstack (line 1434) | void EndCallstack()
function CallstackSymbolData (line 1460) | CallstackSymbolData DecodeSymbolAddress( uint64_t ptr )
function CallstackEntryData (line 1469) | CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
FILE: public/client/TracyCallstack.hpp
type tracy (line 10) | namespace tracy
type ImageEntry (line 13) | struct ImageEntry
function has_callstack (line 27) | static constexpr bool has_callstack() { return false; }
function tracy_force_inline (line 28) | static tracy_force_inline void* Callstack( int32_t /*depth*/ ) { retur...
function has_callstack (line 57) | static constexpr bool has_callstack() { return true; }
type CallstackSymbolData (line 59) | struct CallstackSymbolData
type CallstackEntry (line 67) | struct CallstackEntry
type CallstackEntryData (line 76) | struct CallstackEntryData
function tracy_force_inline (line 103) | static tracy_force_inline void* Callstack( int32_t depth )
type BacktraceState (line 114) | struct BacktraceState
function _Unwind_Reason_Code (line 120) | static _Unwind_Reason_Code tracy_unwind_callback( struct _Unwind_Conte...
function tracy_force_inline (line 132) | static tracy_force_inline void* Callstack( int32_t depth )
function tracy_force_inline (line 147) | static tracy_force_inline void* Callstack( int32_t depth )
type tracy (line 25) | namespace tracy
type ImageEntry (line 13) | struct ImageEntry
function has_callstack (line 27) | static constexpr bool has_callstack() { return false; }
function tracy_force_inline (line 28) | static tracy_force_inline void* Callstack( int32_t /*depth*/ ) { retur...
function has_callstack (line 57) | static constexpr bool has_callstack() { return true; }
type CallstackSymbolData (line 59) | struct CallstackSymbolData
type CallstackEntry (line 67) | struct CallstackEntry
type CallstackEntryData (line 76) | struct CallstackEntryData
function tracy_force_inline (line 103) | static tracy_force_inline void* Callstack( int32_t depth )
type BacktraceState (line 114) | struct BacktraceState
function _Unwind_Reason_Code (line 120) | static _Unwind_Reason_Code tracy_unwind_callback( struct _Unwind_Conte...
function tracy_force_inline (line 132) | static tracy_force_inline void* Callstack( int32_t depth )
function tracy_force_inline (line 147) | static tracy_force_inline void* Callstack( int32_t depth )
type tracy (line 54) | namespace tracy
type ImageEntry (line 13) | struct ImageEntry
function has_callstack (line 27) | static constexpr bool has_callstack() { return false; }
function tracy_force_inline (line 28) | static tracy_force_inline void* Callstack( int32_t /*depth*/ ) { retur...
function has_callstack (line 57) | static constexpr bool has_callstack() { return true; }
type CallstackSymbolData (line 59) | struct CallstackSymbolData
type CallstackEntry (line 67) | struct CallstackEntry
type CallstackEntryData (line 76) | struct CallstackEntryData
function tracy_force_inline (line 103) | static tracy_force_inline void* Callstack( int32_t depth )
type BacktraceState (line 114) | struct BacktraceState
function _Unwind_Reason_Code (line 120) | static _Unwind_Reason_Code tracy_unwind_callback( struct _Unwind_Conte...
function tracy_force_inline (line 132) | static tracy_force_inline void* Callstack( int32_t depth )
function tracy_force_inline (line 147) | static tracy_force_inline void* Callstack( int32_t depth )
FILE: public/client/TracyDxt1.cpp
type tracy (line 27) | namespace tracy
function to565 (line 30) | static inline uint16_t to565( uint8_t r, uint8_t g, uint8_t b )
function to565 (line 35) | static inline uint16_t to565( uint32_t c )
function tracy_force_inline (line 148) | static tracy_force_inline uint64_t ProcessRGB( const uint8_t* src )
function tracy_force_inline (line 467) | static tracy_force_inline void ProcessRGB_AVX( const uint8_t* src, cha...
function CompressImageDxt1 (line 585) | void CompressImageDxt1( const char* src, char* dst, int w, int h )
FILE: public/client/TracyDxt1.hpp
type tracy (line 4) | namespace tracy
FILE: public/client/TracyFastVector.hpp
type tracy (line 10) | namespace tracy
class FastVector (line 14) | class FastVector
method FastVector (line 20) | FastVector( size_t capacity )
method FastVector (line 28) | FastVector( const FastVector& ) = delete;
method FastVector (line 29) | FastVector( FastVector&& ) = delete;
method FastVector (line 36) | FastVector& operator=( const FastVector& ) = delete;
method FastVector (line 37) | FastVector& operator=( FastVector&& ) = delete;
method empty (line 39) | bool empty() const { return m_ptr == m_write; }
method size (line 40) | size_t size() const { return m_write - m_ptr; }
method T (line 42) | T* data() { return m_ptr; }
method T (line 43) | const T* data() const { return m_ptr; }
method T (line 45) | T* begin() { return m_ptr; }
method T (line 46) | const T* begin() const { return m_ptr; }
method T (line 47) | T* end() { return m_write; }
method T (line 48) | const T* end() const { return m_write; }
method T (line 50) | T& front() { assert( !empty() ); return m_ptr[0]; }
method T (line 51) | const T& front() const { assert( !empty() ); return m_ptr[0]; }
method T (line 53) | T& back() { assert( !empty() ); return m_write[-1]; }
method T (line 54) | const T& back() const { assert( !empty() ); return m_write[-1]; }
method T (line 56) | T& operator[]( size_t idx ) { return m_ptr[idx]; }
method T (line 57) | const T& operator[]( size_t idx ) const { return m_ptr[idx]; }
method T (line 59) | T* push_next()
method T (line 65) | T* prepare_next()
method commit_next (line 71) | void commit_next()
method clear (line 76) | void clear()
method swap (line 81) | void swap( FastVector& vec )
method tracy_no_inline (line 99) | tracy_no_inline void AllocMore()
FILE: public/client/TracyKCore.cpp
type tracy (line 18) | namespace tracy
type elf_ehdr (line 35) | struct elf_ehdr
type elf_phdr (line 53) | struct elf_phdr
FILE: public/client/TracyKCore.hpp
type tracy (line 10) | namespace tracy
class KCore (line 13) | class KCore
type Offset (line 15) | struct Offset
FILE: public/client/TracyLock.hpp
type tracy (line 11) | namespace tracy
class LockableCtx (line 14) | class LockableCtx
function tracy_force_inline (line 41) | tracy_force_inline ~LockableCtx()
function tracy_force_inline (line 53) | tracy_force_inline bool BeforeLock()
function tracy_force_inline (line 77) | tracy_force_inline void AfterLock()
function tracy_force_inline (line 87) | tracy_force_inline void AfterUnlock()
function tracy_force_inline (line 106) | tracy_force_inline void AfterTryLock( bool acquired )
function tracy_force_inline (line 134) | tracy_force_inline void Mark( const SourceLocationData* srcloc )
function tracy_force_inline (line 155) | tracy_force_inline void CustomName( const char* name, size_t size )
class Lockable (line 181) | class Lockable
method tracy_force_inline (line 184) | tracy_force_inline Lockable( const SourceLocationData* srcloc )
method Lockable (line 189) | Lockable( const Lockable& ) = delete;
method Lockable (line 190) | Lockable& operator=( const Lockable& ) = delete;
method tracy_force_inline (line 192) | tracy_force_inline void lock()
method tracy_force_inline (line 199) | tracy_force_inline void unlock()
method tracy_force_inline (line 205) | tracy_force_inline bool try_lock()
method tracy_force_inline (line 212) | tracy_force_inline void Mark( const SourceLocationData* srcloc )
method tracy_force_inline (line 217) | tracy_force_inline void CustomName( const char* name, size_t size )
class SharedLockableCtx (line 229) | class SharedLockableCtx
function tracy_force_inline (line 256) | tracy_force_inline ~SharedLockableCtx()
function tracy_force_inline (line 268) | tracy_force_inline bool BeforeLock()
function tracy_force_inline (line 292) | tracy_force_inline void AfterLock()
function tracy_force_inline (line 302) | tracy_force_inline void AfterUnlock()
function tracy_force_inline (line 321) | tracy_force_inline void AfterTryLock( bool acquired )
function tracy_force_inline (line 349) | tracy_force_inline bool BeforeLockShared()
function tracy_force_inline (line 373) | tracy_force_inline void AfterLockShared()
function tracy_force_inline (line 383) | tracy_force_inline void AfterUnlockShared()
function tracy_force_inline (line 403) | tracy_force_inline void AfterTryLockShared( bool acquired )
function tracy_force_inline (line 431) | tracy_force_inline void Mark( const SourceLocationData* srcloc )
function tracy_force_inline (line 452) | tracy_force_inline void CustomName( const char* name, size_t size )
class SharedLockable (line 478) | class SharedLockable
method tracy_force_inline (line 481) | tracy_force_inline SharedLockable( const SourceLocationData* srcloc )
method SharedLockable (line 486) | SharedLockable( const SharedLockable& ) = delete;
method SharedLockable (line 487) | SharedLockable& operator=( const SharedLockable& ) = delete;
method tracy_force_inline (line 489) | tracy_force_inline void lock()
method tracy_force_inline (line 496) | tracy_force_inline void unlock()
method tracy_force_inline (line 502) | tracy_force_inline bool try_lock()
method tracy_force_inline (line 509) | tracy_force_inline void lock_shared()
method tracy_force_inline (line 516) | tracy_force_inline void unlock_shared()
method tracy_force_inline (line 522) | tracy_force_inline bool try_lock_shared()
method tracy_force_inline (line 529) | tracy_force_inline void Mark( const SourceLocationData* srcloc )
method tracy_force_inline (line 534) | tracy_force_inline void CustomName( const char* name, size_t size )
FILE: public/client/TracyOverride.cpp
function dlclose (line 9) | int dlclose( void* hnd )
FILE: public/client/TracyProfiler.cpp
type tracy (line 140) | namespace tracy
type MappingInfo (line 156) | struct MappingInfo {
function ParseMappings (line 172) | static std::vector<MappingInfo> ParseMappings()
function MappingInfo (line 210) | static MappingInfo* LookUpMapping(std::vector<MappingInfo>& mappings, ...
function MappingInfo (line 235) | static MappingInfo* LookUpMapping(uintptr_t address)
function EnsureReadable (line 253) | static bool EnsureReadable( MappingInfo& mapping )
function EnsureReadable (line 279) | static bool EnsureReadable( uintptr_t address )
function EnsureReadable (line 288) | static bool EnsureReadable( uintptr_t address )
function EnsureReadable (line 295) | static bool EnsureReadable( uintptr_t address )
type InitTimeWrapper (line 303) | struct InitTimeWrapper
type ProducerWrapper (line 308) | struct ProducerWrapper
method ProducerWrapper (line 1239) | ProducerWrapper( ProfilerData& data ) : detail( data.queue ), ptr( d...
type ThreadHandleWrapper (line 313) | struct ThreadHandleWrapper
function CpuId (line 321) | static inline void CpuId( uint32_t* regs, uint32_t leaf )
function InitFailure (line 331) | static void InitFailure( const char* msg )
function CheckHardwareSupportsInvariantTSC (line 377) | static bool CheckHardwareSupportsInvariantTSC()
function HardwareSupportsInvariantTSC (line 399) | bool HardwareSupportsInvariantTSC()
function SetupHwTimer (line 406) | static int64_t SetupHwTimer()
function SetupHwTimer (line 422) | static int64_t SetupHwTimer()
function GetHex (line 498) | static uint32_t GetHex( char*& ptr, int skip )
type utsname (line 556) | struct utsname
type sysinfo (line 716) | struct sysinfo
type asinfo_entry (line 730) | struct asinfo_entry
type asinfo_entry (line 731) | struct asinfo_entry
type asinfo_entry (line 737) | struct asinfo_entry
function GetPid (line 751) | static uint64_t GetPid()
function BroadcastMessage (line 776) | static BroadcastMessage& GetBroadcastMessage( const char* procname, si...
function LONG (line 797) | LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
function LONG (line 902) | LONG WINAPI CrashFilterExecute( PEXCEPTION_POINTERS pExp )
function ThreadFreezer (line 931) | static void ThreadFreezer( int /*signal*/ )
function HexPrint (line 936) | static inline void HexPrint( char*& ptr, uint64_t val )
function TRACY_API (line 962) | TRACY_API void TracyCrashHandler( int signal, siginfo_t* info, void* /...
function StartSystemTracing (line 1160) | static void StartSystemTracing( int64_t& samplingPeriod )
function StopSystemTracing (line 1182) | static void StopSystemTracing()
function TRACY_API (line 1212) | TRACY_API int64_t GetFrequencyQpc()
type ThreadNameData (line 1224) | struct ThreadNameData
type ProfilerData (line 1227) | struct ProfilerData
type ProducerWrapper (line 1237) | struct ProducerWrapper
method ProducerWrapper (line 1239) | ProducerWrapper( ProfilerData& data ) : detail( data.queue ), ptr( d...
type ProfilerThreadData (line 1244) | struct ProfilerThreadData
method ProfilerThreadData (line 1246) | ProfilerThreadData( ProfilerData& data ) : token( data ), gpuCtx( { ...
function TRACY_API (line 1263) | TRACY_API void StartupProfiler()
function ProfilerData (line 1271) | static ProfilerData& GetProfilerData()
function TRACY_API (line 1276) | TRACY_API void ShutdownProfiler()
function TRACY_API (line 1286) | TRACY_API bool IsProfilerStarted()
function ProfilerData (line 1294) | static ProfilerData& GetProfilerData()
type ProfilerThreadDataKey (line 1320) | struct ProfilerThreadDataKey
method ProfilerThreadDataKey (line 1323) | ProfilerThreadDataKey()
method ProfilerThreadData (line 1335) | ProfilerThreadData& get()
method sDestructor (line 1349) | static void sDestructor(void* p)
function ProfilerThreadData (line 1356) | static ProfilerThreadData& GetProfilerThreadData()
method ProfilerThreadData (line 1246) | ProfilerThreadData( ProfilerData& data ) : token( data ), gpuCtx( { ...
function ProfilerThreadData (line 1362) | static ProfilerThreadData& GetProfilerThreadData()
method ProfilerThreadData (line 1246) | ProfilerThreadData( ProfilerData& data ) : token( data ), gpuCtx( { ...
function TRACY_API (line 1369) | TRACY_API moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* Ge...
function TRACY_API (line 1370) | TRACY_API Profiler& GetProfiler() { return GetProfilerData().profiler; }
function TRACY_API (line 1371) | TRACY_API moodycamel::ConcurrentQueue<QueueItem>& GetQueue() { return ...
function TRACY_API (line 1372) | TRACY_API int64_t GetInitTime() { return GetProfilerData().initTime; }
function TRACY_API (line 1373) | TRACY_API std::atomic<uint32_t>& GetLockCounter() { return GetProfiler...
function TRACY_API (line 1374) | TRACY_API std::atomic<uint8_t>& GetGpuCtxCounter() { return GetProfile...
function TRACY_API (line 1375) | TRACY_API GpuCtxWrapper& GetGpuCtx() { return GetProfilerThreadData()....
function TRACY_API (line 1376) | TRACY_API uint32_t GetThreadHandle() { return detail::GetThreadHandleI...
function TRACY_API (line 1380) | TRACY_API LuaZoneState& GetLuaZoneState() { return GetProfilerThreadDa...
type ThreadNameData (line 1419) | struct ThreadNameData
function TRACY_API (line 1429) | TRACY_API moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* Ge...
function TRACY_API (line 1430) | TRACY_API Profiler& GetProfiler() { return s_profiler; }
function TRACY_API (line 1431) | TRACY_API moodycamel::ConcurrentQueue<QueueItem>& GetQueue() { return ...
function TRACY_API (line 1432) | TRACY_API int64_t GetInitTime() { return s_initTime.val; }
function TRACY_API (line 1433) | TRACY_API std::atomic<uint32_t>& GetLockCounter() { return s_lockCount...
function TRACY_API (line 1434) | TRACY_API std::atomic<uint8_t>& GetGpuCtxCounter() { return s_gpuCtxCo...
function TRACY_API (line 1435) | TRACY_API GpuCtxWrapper& GetGpuCtx() { return s_gpuCtx; }
function TRACY_API (line 1436) | TRACY_API uint32_t GetThreadHandle() { return s_threadHandle.val; }
function TRACY_API (line 1441) | TRACY_API LuaZoneState& GetLuaZoneState() { return s_luaZoneState; }
function TRACY_API (line 1445) | TRACY_API bool ProfilerAvailable() { return s_instance != nullptr; }
function TRACY_API (line 1446) | TRACY_API bool ProfilerAllocatorAvailable() { return !RpThreadShutdown; }
function TRACY_API (line 1448) | TRACY_API bool BeginSamplingProfiling() { return GetProfiler().BeginSa...
function TRACY_API (line 1449) | TRACY_API void EndSamplingProfiling() { return GetProfiler().EndSampli...
type sigaction (line 1551) | struct sigaction
type sigaction (line 1555) | struct sigaction
type sigaction (line 1591) | struct sigaction
type sigaction (line 1592) | struct sigaction
type stat (line 1737) | struct stat
function FreeAssociatedMemory (line 2305) | static void FreeAssociatedMemory( const QueueItem& item )
type CpuData (line 3908) | struct CpuData
type stat (line 4211) | struct stat
type stat (line 4244) | struct stat
function TRACY_API (line 4323) | TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_...
function TRACY_API (line 4351) | TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_callstack( const struct...
function TRACY_API (line 4384) | TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_alloc( uint64_t srcloc,...
function TRACY_API (line 4416) | TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_alloc_callstack( uint64...
function TRACY_API (line 4453) | TRACY_API void ___tracy_emit_zone_end( TracyCZoneCtx ctx )
function TRACY_API (line 4470) | TRACY_API void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* t...
function TRACY_API (line 4491) | TRACY_API void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* t...
function TRACY_API (line 4512) | TRACY_API void ___tracy_emit_zone_color( TracyCZoneCtx ctx, uint32_t col...
function TRACY_API (line 4530) | TRACY_API void ___tracy_emit_zone_value( TracyCZoneCtx ctx, uint64_t val...
function TRACY_API (line 4547) | TRACY_API void ___tracy_emit_memory_alloc( const void* ptr, size_t size,...
function TRACY_API (line 4548) | TRACY_API void ___tracy_emit_memory_alloc_callstack( const void* ptr, si...
function TRACY_API (line 4559) | TRACY_API void ___tracy_emit_memory_free( const void* ptr, int32_t secur...
function TRACY_API (line 4560) | TRACY_API void ___tracy_emit_memory_free_callstack( const void* ptr, int...
function TRACY_API (line 4571) | TRACY_API void ___tracy_emit_memory_discard( const char* name, int32_t s...
function TRACY_API (line 4572) | TRACY_API void ___tracy_emit_memory_discard_callstack( const char* name,...
function TRACY_API (line 4583) | TRACY_API void ___tracy_emit_memory_alloc_named( const void* ptr, size_t...
function TRACY_API (line 4584) | TRACY_API void ___tracy_emit_memory_alloc_callstack_named( const void* p...
function TRACY_API (line 4595) | TRACY_API void ___tracy_emit_memory_free_named( const void* ptr, int32_t...
function TRACY_API (line 4596) | TRACY_API void ___tracy_emit_memory_free_callstack_named( const void* pt...
function TRACY_API (line 4607) | TRACY_API void ___tracy_emit_frame_mark( const char* name ) { tracy::Pro...
function TRACY_API (line 4608) | TRACY_API void ___tracy_emit_frame_mark_start( const char* name ) { trac...
function TRACY_API (line 4609) | TRACY_API void ___tracy_emit_frame_mark_end( const char* name ) { tracy:...
function TRACY_API (line 4610) | TRACY_API void ___tracy_emit_frame_image( const void* image, uint16_t w,...
function TRACY_API (line 4611) | TRACY_API void ___tracy_emit_plot( const char* name, double val ) { trac...
function TRACY_API (line 4612) | TRACY_API void ___tracy_emit_plot_float( const char* name, float val ) {...
function TRACY_API (line 4613) | TRACY_API void ___tracy_emit_plot_int( const char* name, int64_t val ) {...
function TRACY_API (line 4614) | TRACY_API void ___tracy_emit_plot_config( const char* name, int32_t type...
function TRACY_API (line 4623) | TRACY_API void ___tracy_emit_logString( int8_t severity, int32_t color, ...
function TRACY_API (line 4624) | TRACY_API void ___tracy_emit_logStringL( int8_t severity, int32_t color,...
function TRACY_API (line 4625) | TRACY_API void ___tracy_emit_message_appinfo( const char* txt, size_t si...
function TRACY_API (line 4627) | TRACY_API uint64_t ___tracy_alloc_srcloc( uint32_t line, const char* sou...
function TRACY_API (line 4631) | TRACY_API uint64_t ___tracy_alloc_srcloc_name( uint32_t line, const char...
function TRACY_API (line 4635) | TRACY_API void ___tracy_emit_gpu_zone_begin( const struct ___tracy_gpu_z...
function TRACY_API (line 4646) | TRACY_API void ___tracy_emit_gpu_zone_begin_callstack( const struct ___t...
function TRACY_API (line 4658) | TRACY_API void ___tracy_emit_gpu_zone_begin_alloc( const struct ___tracy...
function TRACY_API (line 4669) | TRACY_API void ___tracy_emit_gpu_zone_begin_alloc_callstack( const struc...
function TRACY_API (line 4681) | TRACY_API void ___tracy_emit_gpu_time( const struct ___tracy_gpu_time_da...
function TRACY_API (line 4690) | TRACY_API void ___tracy_emit_gpu_zone_end( const struct ___tracy_gpu_zon...
function TRACY_API (line 4700) | TRACY_API void ___tracy_emit_gpu_new_context( ___tracy_gpu_new_context_d...
function TRACY_API (line 4718) | TRACY_API void ___tracy_emit_gpu_context_name( const struct ___tracy_gpu...
function TRACY_API (line 4735) | TRACY_API void ___tracy_emit_gpu_calibration( const struct ___tracy_gpu_...
function TRACY_API (line 4745) | TRACY_API void ___tracy_emit_gpu_time_sync( const struct ___tracy_gpu_ti...
function TRACY_API (line 4754) | TRACY_API void ___tracy_emit_gpu_zone_begin_serial( const struct ___trac...
function TRACY_API (line 4766) | TRACY_API void ___tracy_emit_gpu_zone_begin_callstack_serial( const stru...
function TRACY_API (line 4778) | TRACY_API void ___tracy_emit_gpu_zone_begin_alloc_serial( const struct _...
function TRACY_API (line 4790) | TRACY_API void ___tracy_emit_gpu_zone_begin_alloc_callstack_serial( cons...
function TRACY_API (line 4802) | TRACY_API void ___tracy_emit_gpu_time_serial( const struct ___tracy_gpu_...
function TRACY_API (line 4812) | TRACY_API void ___tracy_emit_gpu_zone_end_serial( const struct ___tracy_...
function TRACY_API (line 4823) | TRACY_API void ___tracy_emit_gpu_new_context_serial( ___tracy_gpu_new_co...
function TRACY_API (line 4842) | TRACY_API void ___tracy_emit_gpu_context_name_serial( const struct ___tr...
function TRACY_API (line 4860) | TRACY_API void ___tracy_emit_gpu_calibration_serial( const struct ___tra...
function TRACY_API (line 4871) | TRACY_API void ___tracy_emit_gpu_time_sync_serial( const struct ___tracy...
type __tracy_lockable_context_data (line 4881) | struct __tracy_lockable_context_data
function TRACY_API (line 4890) | TRACY_API struct __tracy_lockable_context_data* ___tracy_announce_lockab...
function TRACY_API (line 4914) | TRACY_API void ___tracy_terminate_lockable_ctx( struct __tracy_lockable_...
function TRACY_API (line 4932) | TRACY_API int32_t ___tracy_before_lock_lockable_ctx( struct __tracy_lock...
function TRACY_API (line 4956) | TRACY_API void ___tracy_after_lock_lockable_ctx( struct __tracy_lockable...
function TRACY_API (line 4966) | TRACY_API void ___tracy_after_unlock_lockable_ctx( struct __tracy_lockab...
function TRACY_API (line 4985) | TRACY_API void ___tracy_after_try_lock_lockable_ctx( struct __tracy_lock...
function TRACY_API (line 5013) | TRACY_API void ___tracy_mark_lockable_ctx( struct __tracy_lockable_conte...
function TRACY_API (line 5034) | TRACY_API void ___tracy_custom_name_lockable_ctx( struct __tracy_lockabl...
function TRACY_API (line 5050) | TRACY_API int32_t ___tracy_connected( void )
function TRACY_API (line 5056) | TRACY_API void ___tracy_fiber_enter( const char* fiber ){ tracy::Profile...
function TRACY_API (line 5057) | TRACY_API void ___tracy_fiber_leave( void ){ tracy::Profiler::LeaveFiber...
function TRACY_API (line 5061) | TRACY_API void ___tracy_startup_profiler( void )
function TRACY_API (line 5066) | TRACY_API void ___tracy_shutdown_profiler( void )
function TRACY_API (line 5071) | TRACY_API int32_t ___tracy_profiler_started( void )
function TRACY_API (line 5077) | TRACY_API int ___tracy_begin_sampling_profiling( void ) {
function TRACY_API (line 5081) | TRACY_API void ___tracy_end_sampling_profiling( void ) {
function TRACY_API (line 5085) | TRACY_API int64_t ___tracy_get_time( void )
FILE: public/client/TracyProfiler.hpp
type tracy (line 63) | namespace tracy
class GpuCtx (line 77) | class GpuCtx
class Profiler (line 78) | class Profiler
type FrameImageQueueItem (line 200) | struct FrameImageQueueItem
type SymbolQueueItemType (line 209) | enum class SymbolQueueItemType
type SymbolQueueItem (line 218) | struct SymbolQueueItem
method tracy_force_inline (line 232) | static tracy_force_inline int64_t GetTime()
method tracy_force_inline (line 310) | tracy_force_inline uint32_t GetNextZoneId()
method tracy_force_inline (line 315) | static tracy_force_inline QueueItem* QueueSerial()
method tracy_force_inline (line 322) | static tracy_force_inline QueueItem* QueueSerialCallstack( void* ptr )
method tracy_force_inline (line 330) | static tracy_force_inline void QueueSerialFinish()
method tracy_force_inline (line 337) | static tracy_force_inline void SendFrameMark( const char* name )
method tracy_force_inline (line 350) | static tracy_force_inline void SendFrameMark( const char* name, Queu...
method tracy_force_inline (line 363) | static tracy_force_inline void SendFrameImage( const void* image, ui...
method tracy_force_inline (line 393) | static tracy_force_inline void PlotData( const char* name, int64_t v...
method tracy_force_inline (line 405) | static tracy_force_inline void PlotData( const char* name, float val )
method tracy_force_inline (line 417) | static tracy_force_inline void PlotData( const char* name, double val )
method tracy_force_inline (line 429) | static tracy_force_inline void ConfigurePlot( const char* name, Plot...
method tracy_force_inline (line 445) | static tracy_force_inline void LogString( MessageSourceType source, ...
method tracy_force_inline (line 481) | static tracy_force_inline void LogString( MessageSourceType source, ...
method tracy_force_inline (line 513) | static tracy_force_inline void MessageAppInfo( const char* txt, size...
method tracy_force_inline (line 532) | static tracy_force_inline void MemAlloc( const void* ptr, size_t siz...
method tracy_force_inline (line 545) | static tracy_force_inline void MemFree( const void* ptr, bool secure )
method tracy_force_inline (line 558) | static tracy_force_inline void MemAllocCallstack( const void* ptr, s...
method tracy_force_inline (line 582) | static tracy_force_inline void MemFreeCallstack( const void* ptr, in...
method tracy_force_inline (line 611) | static tracy_force_inline void MemAllocNamed( const void* ptr, size_...
method tracy_force_inline (line 625) | static tracy_force_inline void MemFreeNamed( const void* ptr, bool s...
method tracy_force_inline (line 639) | static tracy_force_inline void MemAllocCallstackNamed( const void* p...
method tracy_force_inline (line 664) | static tracy_force_inline void MemFreeCallstackNamed( const void* pt...
method tracy_force_inline (line 689) | static tracy_force_inline void MemDiscard( const char* name, bool se...
method tracy_force_inline (line 702) | static tracy_force_inline void MemDiscardCallstack( const char* name...
method tracy_force_inline (line 725) | static tracy_force_inline void SendCallstack( int32_t depth )
method tracy_force_inline (line 736) | static tracy_force_inline void ParameterRegister( ParameterCallback ...
method tracy_force_inline (line 743) | static tracy_force_inline void ParameterSetup( uint32_t idx, const c...
method tracy_force_inline (line 758) | static tracy_force_inline void SourceCallbackRegister( SourceContent...
method tracy_force_inline (line 766) | static tracy_force_inline void EnterFiber( const char* fiber, int32_...
method tracy_force_inline (line 778) | static tracy_force_inline void LeaveFiber()
method tracy_force_inline (line 794) | tracy_force_inline bool IsConnected() const
method tracy_force_inline (line 799) | tracy_force_inline void SetProgramName( const char* name )
method tracy_force_inline (line 807) | tracy_force_inline uint64_t ConnectionId() const
method tracy_force_inline (line 812) | tracy_force_inline void DeferItem( const QueueItem& item )
method RequestShutdown (line 821) | void RequestShutdown() { m_shutdown.store( true, std::memory_order_r...
method HasShutdownFinished (line 822) | bool HasShutdownFinished() const { return m_shutdownFinished.load( s...
method SendString (line 824) | void SendString( uint64_t str, const char* ptr, QueueType type ) { S...
method SendSingleString (line 826) | void SendSingleString( const char* ptr ) { SendSingleString( ptr, st...
method SendSecondString (line 828) | void SendSecondString( const char* ptr ) { SendSecondString( ptr, st...
method tracy_force_inline (line 842) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 847) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 852) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 857) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
type DequeueStatus (line 878) | enum class DequeueStatus { DataDequeued, ConnectionLost, QueueEmpty }
type ThreadCtxStatus (line 879) | enum class ThreadCtxStatus { Same, Changed, ConnectionLost }
method LaunchWorker (line 881) | static void LaunchWorker( void* ptr ) { ((Profiler*)ptr)->Worker(); }
method LaunchCompressWorker (line 885) | static void LaunchCompressWorker( void* ptr ) { ((Profiler*)ptr)->Co...
method LaunchSymbolWorker (line 890) | static void LaunchSymbolWorker( void* ptr ) { ((Profiler*)ptr)->Symb...
method tracy_force_inline (line 906) | tracy_force_inline bool AppendData( const void* data, size_t len )
method tracy_force_inline (line 913) | tracy_force_inline bool NeedDataSize( size_t len )
method tracy_force_inline (line 924) | tracy_force_inline void AppendDataUnsafe( const void* data, size_t l...
method WithSafeCopy (line 934) | bool WithSafeCopy( const char* p, size_t size, Callable&& callable )
method tracy_force_inline (line 972) | static tracy_force_inline void SendCallstackSerial( void* ptr )
method tracy_force_inline (line 983) | static tracy_force_inline void SendMemAlloc( QueueType type, const u...
method tracy_force_inline (line 1006) | static tracy_force_inline void SendMemFree( QueueType type, const ui...
method tracy_force_inline (line 1018) | static tracy_force_inline void SendMemDiscard( QueueType type, const...
method tracy_force_inline (line 1030) | static tracy_force_inline void SendMemName( const char* name )
method ProcessSysTime (line 1099) | void ProcessSysTime() {}
type sigaction (line 1130) | struct sigaction
class Socket (line 79) | class Socket
class UdpBroadcast (line 80) | class UdpBroadcast
type GpuCtxWrapper (line 82) | struct GpuCtxWrapper
function tracy_force_inline (line 101) | tracy_force_inline bool HardwareSupportsInvariantTSC()
function tracy_force_inline (line 106) | tracy_force_inline bool HardwareSupportsInvariantTSC()
type SourceLocationData (line 114) | struct SourceLocationData
type LuaZoneState (line 124) | struct LuaZoneState
function tracy_force_inline (line 192) | tracy_force_inline int64_t timestamp_win_arm64_cntvct_el0()
class Profiler (line 198) | class Profiler
type FrameImageQueueItem (line 200) | struct FrameImageQueueItem
type SymbolQueueItemType (line 209) | enum class SymbolQueueItemType
type SymbolQueueItem (line 218) | struct SymbolQueueItem
method tracy_force_inline (line 232) | static tracy_force_inline int64_t GetTime()
method tracy_force_inline (line 310) | tracy_force_inline uint32_t GetNextZoneId()
method tracy_force_inline (line 315) | static tracy_force_inline QueueItem* QueueSerial()
method tracy_force_inline (line 322) | static tracy_force_inline QueueItem* QueueSerialCallstack( void* ptr )
method tracy_force_inline (line 330) | static tracy_force_inline void QueueSerialFinish()
method tracy_force_inline (line 337) | static tracy_force_inline void SendFrameMark( const char* name )
method tracy_force_inline (line 350) | static tracy_force_inline void SendFrameMark( const char* name, Queu...
method tracy_force_inline (line 363) | static tracy_force_inline void SendFrameImage( const void* image, ui...
method tracy_force_inline (line 393) | static tracy_force_inline void PlotData( const char* name, int64_t v...
method tracy_force_inline (line 405) | static tracy_force_inline void PlotData( const char* name, float val )
method tracy_force_inline (line 417) | static tracy_force_inline void PlotData( const char* name, double val )
method tracy_force_inline (line 429) | static tracy_force_inline void ConfigurePlot( const char* name, Plot...
method tracy_force_inline (line 445) | static tracy_force_inline void LogString( MessageSourceType source, ...
method tracy_force_inline (line 481) | static tracy_force_inline void LogString( MessageSourceType source, ...
method tracy_force_inline (line 513) | static tracy_force_inline void MessageAppInfo( const char* txt, size...
method tracy_force_inline (line 532) | static tracy_force_inline void MemAlloc( const void* ptr, size_t siz...
method tracy_force_inline (line 545) | static tracy_force_inline void MemFree( const void* ptr, bool secure )
method tracy_force_inline (line 558) | static tracy_force_inline void MemAllocCallstack( const void* ptr, s...
method tracy_force_inline (line 582) | static tracy_force_inline void MemFreeCallstack( const void* ptr, in...
method tracy_force_inline (line 611) | static tracy_force_inline void MemAllocNamed( const void* ptr, size_...
method tracy_force_inline (line 625) | static tracy_force_inline void MemFreeNamed( const void* ptr, bool s...
method tracy_force_inline (line 639) | static tracy_force_inline void MemAllocCallstackNamed( const void* p...
method tracy_force_inline (line 664) | static tracy_force_inline void MemFreeCallstackNamed( const void* pt...
method tracy_force_inline (line 689) | static tracy_force_inline void MemDiscard( const char* name, bool se...
method tracy_force_inline (line 702) | static tracy_force_inline void MemDiscardCallstack( const char* name...
method tracy_force_inline (line 725) | static tracy_force_inline void SendCallstack( int32_t depth )
method tracy_force_inline (line 736) | static tracy_force_inline void ParameterRegister( ParameterCallback ...
method tracy_force_inline (line 743) | static tracy_force_inline void ParameterSetup( uint32_t idx, const c...
method tracy_force_inline (line 758) | static tracy_force_inline void SourceCallbackRegister( SourceContent...
method tracy_force_inline (line 766) | static tracy_force_inline void EnterFiber( const char* fiber, int32_...
method tracy_force_inline (line 778) | static tracy_force_inline void LeaveFiber()
method tracy_force_inline (line 794) | tracy_force_inline bool IsConnected() const
method tracy_force_inline (line 799) | tracy_force_inline void SetProgramName( const char* name )
method tracy_force_inline (line 807) | tracy_force_inline uint64_t ConnectionId() const
method tracy_force_inline (line 812) | tracy_force_inline void DeferItem( const QueueItem& item )
method RequestShutdown (line 821) | void RequestShutdown() { m_shutdown.store( true, std::memory_order_r...
method HasShutdownFinished (line 822) | bool HasShutdownFinished() const { return m_shutdownFinished.load( s...
method SendString (line 824) | void SendString( uint64_t str, const char* ptr, QueueType type ) { S...
method SendSingleString (line 826) | void SendSingleString( const char* ptr ) { SendSingleString( ptr, st...
method SendSecondString (line 828) | void SendSecondString( const char* ptr ) { SendSecondString( ptr, st...
method tracy_force_inline (line 842) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 847) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 852) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
method tracy_force_inline (line 857) | static tracy_force_inline uint64_t AllocSourceLocation( uint32_t lin...
type DequeueStatus (line 878) | enum class DequeueStatus { DataDequeued, ConnectionLost, QueueEmpty }
type ThreadCtxStatus (line 879) | enum class ThreadCtxStatus { Same, Changed, ConnectionLost }
method LaunchWorker (line 881) | static void LaunchWorker( void* ptr ) { ((Profiler*)ptr)->Worker(); }
method LaunchCompressWorker (line 885) | static void LaunchCompressWorker( void* ptr ) { ((Profiler*)ptr)->Co...
method LaunchSymbolWorker (line 890) | static void LaunchSymbolWorker( void* ptr ) { ((Profiler*)ptr)->Symb...
method tracy_force_inline (line 906) | tracy_force_inline bool AppendData( const void* data, size_t len )
method tracy_force_inline (line 913) | tracy_force_inline bool NeedDataSize( size_t len )
method tracy_force_inline (line 924) | tracy_force_inline void AppendDataUnsafe( const void* data, size_t l...
method WithSafeCopy (line 934) | bool WithSafeCopy( const char* p, size_t size, Callable&& callable )
method tracy_force_inline (line 972) | static tracy_force_inline void SendCallstackSerial( void* ptr )
method tracy_force_inline (line 983) | static tracy_force_inline void SendMemAlloc( QueueType type, const u...
method tracy_force_inline (line 1006) | static tracy_force_inline void SendMemFree( QueueType type, const ui...
method tracy_force_inline (line 1018) | static tracy_force_inline void SendMemDiscard( QueueType type, const...
method tracy_force_inline (line 1030) | static tracy_force_inline void SendMemName( const char* name )
method ProcessSysTime (line 1099) | void ProcessSysTime() {}
type sigaction (line 1130) | struct sigaction
FILE: public/client/TracyRingBuffer.hpp
type tracy (line 13) | namespace tracy
class RingBuffer (line 16) | class RingBuffer
method RingBuffer (line 19) | RingBuffer( unsigned int size, int fd, int id, int cpu = -1 )
method RingBuffer (line 50) | RingBuffer( const RingBuffer& ) = delete;
method RingBuffer (line 51) | RingBuffer& operator=( const RingBuffer& ) = delete;
method RingBuffer (line 53) | RingBuffer( RingBuffer&& other )
method RingBuffer (line 60) | RingBuffer& operator=( RingBuffer&& other )
method IsValid (line 68) | bool IsValid() const { return m_metadata != nullptr; }
method GetId (line 69) | int GetId() const { return m_id; }
method GetCpu (line 70) | int GetCpu() const { return m_cpu; }
method Enable (line 72) | void Enable()
method Read (line 77) | void Read( void* dst, uint64_t offset, uint64_t cnt )
method Advance (line 94) | void Advance( uint64_t cnt )
method CheckTscCaps (line 100) | bool CheckTscCaps() const
method ConvertTimeToTsc (line 105) | int64_t ConvertTimeToTsc( int64_t timestamp ) const
method LoadHead (line 114) | uint64_t LoadHead() const
method GetTail (line 119) | uint64_t GetTail() const
method StoreTail (line 125) | void StoreTail()
FILE: public/client/TracyRocprof.cpp
type DispatchData (line 37) | struct DispatchData
type ToolData (line 45) | struct ToolData
function rocprofiler_context_id_t (line 64) | rocprofiler_context_id_t& get_client_ctx()
function gpu_context_allocate (line 72) | uint8_t gpu_context_allocate( ToolData* data )
function kernel_src_loc (line 130) | uint64_t kernel_src_loc( ToolData* data, uint64_t kernel_id )
function record_interval (line 146) | void record_interval( ToolData* data, rocprofiler_timestamp_t start_time...
function record_callback (line 236) | void record_callback( rocprofiler_dispatch_counting_service_data_t dispa...
function dispatch_callback (line 283) | void dispatch_callback( rocprofiler_dispatch_counting_service_data_t dis...
function tool_callback_tracing_callback (line 378) | void tool_callback_tracing_callback( rocprofiler_callback_tracing_record...
function calibration_thread (line 450) | void calibration_thread( void* ptr )
function tool_init (line 493) | int tool_init( rocprofiler_client_finalize_t fini_func, void* user_data )
function tool_fini (line 526) | void tool_fini( void* tool_data_v )
function rocprofiler_tool_configure_result_t (line 538) | rocprofiler_tool_configure_result_t* rocprofiler_configure( uint32_t ver...
FILE: public/client/TracyScoped.hpp
type tracy (line 21) | namespace tracy
class ScopedZone (line 24) | class ScopedZone
method ScopedZone (line 27) | ScopedZone( const ScopedZone& ) = delete;
method ScopedZone (line 28) | ScopedZone( ScopedZone&& ) = delete;
method ScopedZone (line 29) | ScopedZone& operator=( const ScopedZone& ) = delete;
method ScopedZone (line 30) | ScopedZone& operator=( ScopedZone&& ) = delete;
method tracy_force_inline (line 32) | tracy_force_inline ScopedZone( const SourceLocationData* srcloc, int...
method m_active (line 57) | m_active( is_active && GetProfiler().IsConnected() )
method tracy_force_inline (line 80) | tracy_force_inline ScopedZone( uint32_t line, const char* source, si...
method tracy_force_inline (line 82) | tracy_force_inline ~ScopedZone()
method tracy_force_inline (line 93) | tracy_force_inline void Text( const char* txt, size_t size )
FILE: public/client/TracyStringHelpers.hpp
type tracy (line 10) | namespace tracy
function tracy_force_inline (line 13) | static tracy_force_inline char* CopyString( const char* src, size_t sz )
function tracy_force_inline (line 21) | static tracy_force_inline char* CopyString( const char* src )
function tracy_force_inline (line 26) | static tracy_force_inline char* CopyStringFast( const char* src, size_...
function tracy_force_inline (line 34) | static tracy_force_inline char* CopyStringFast( const char* src )
FILE: public/client/TracySysPower.cpp
type tracy (line 16) | namespace tracy
type dirent (line 73) | struct dirent
FILE: public/client/TracySysPower.hpp
type tracy (line 15) | namespace tracy
class SysPower (line 18) | class SysPower
type Domain (line 20) | struct Domain
FILE: public/client/TracySysTime.cpp
type tracy (line 19) | namespace tracy
function ConvertTime (line 24) | static inline uint64_t ConvertTime( const FILETIME& t )
FILE: public/client/TracySysTime.hpp
type tracy (line 18) | namespace tracy
class SysTime (line 21) | class SysTime
FILE: public/client/TracySysTrace.cpp
type tracy (line 16) | namespace tracy
function GetSamplingFrequency (line 19) | static int GetSamplingFrequency()
function GetSamplingPeriod (line 37) | static int GetSamplingPeriod()
function EventRecordCallback (line 83) | void WINAPI EventRecordCallback( PEVENT_RECORD record )
function GetSamplingInterval (line 174) | static int GetSamplingInterval()
function SysTraceStart (line 185) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 243) | void SysTraceStop()
function SysTraceWorker (line 256) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 264) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
function CurrentProcOwnsThread (line 418) | static bool CurrentProcOwnsThread( uint32_t tid )
function perf_event_open (line 440) | static int perf_event_open( struct perf_event_attr* hw_event, pid_t pi...
type TraceEventId (line 445) | enum TraceEventId
function ProbePreciseIp (line 459) | static void ProbePreciseIp( perf_event_attr& pe, unsigned long long co...
function ProbePreciseIp (line 487) | static void ProbePreciseIp( perf_event_attr& pe, pid_t pid )
function IsGenuineIntel (line 503) | static bool IsGenuineIntel()
function SysTraceStart (line 567) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 951) | void SysTraceStop()
function SysTraceWorker (line 993) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 1400) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
type tracy (line 64) | namespace tracy
function GetSamplingFrequency (line 19) | static int GetSamplingFrequency()
function GetSamplingPeriod (line 37) | static int GetSamplingPeriod()
function EventRecordCallback (line 83) | void WINAPI EventRecordCallback( PEVENT_RECORD record )
function GetSamplingInterval (line 174) | static int GetSamplingInterval()
function SysTraceStart (line 185) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 243) | void SysTraceStop()
function SysTraceWorker (line 256) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 264) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
function CurrentProcOwnsThread (line 418) | static bool CurrentProcOwnsThread( uint32_t tid )
function perf_event_open (line 440) | static int perf_event_open( struct perf_event_attr* hw_event, pid_t pi...
type TraceEventId (line 445) | enum TraceEventId
function ProbePreciseIp (line 459) | static void ProbePreciseIp( perf_event_attr& pe, unsigned long long co...
function ProbePreciseIp (line 487) | static void ProbePreciseIp( perf_event_attr& pe, pid_t pid )
function IsGenuineIntel (line 503) | static bool IsGenuineIntel()
function SysTraceStart (line 567) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 951) | void SysTraceStop()
function SysTraceWorker (line 993) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 1400) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
type tracy (line 405) | namespace tracy
function GetSamplingFrequency (line 19) | static int GetSamplingFrequency()
function GetSamplingPeriod (line 37) | static int GetSamplingPeriod()
function EventRecordCallback (line 83) | void WINAPI EventRecordCallback( PEVENT_RECORD record )
function GetSamplingInterval (line 174) | static int GetSamplingInterval()
function SysTraceStart (line 185) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 243) | void SysTraceStop()
function SysTraceWorker (line 256) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 264) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
function CurrentProcOwnsThread (line 418) | static bool CurrentProcOwnsThread( uint32_t tid )
function perf_event_open (line 440) | static int perf_event_open( struct perf_event_attr* hw_event, pid_t pi...
type TraceEventId (line 445) | enum TraceEventId
function ProbePreciseIp (line 459) | static void ProbePreciseIp( perf_event_attr& pe, unsigned long long co...
function ProbePreciseIp (line 487) | static void ProbePreciseIp( perf_event_attr& pe, pid_t pid )
function IsGenuineIntel (line 503) | static bool IsGenuineIntel()
function SysTraceStart (line 567) | bool SysTraceStart( int64_t& samplingPeriod )
function SysTraceStop (line 951) | void SysTraceStop()
function SysTraceWorker (line 993) | void SysTraceWorker( void* ptr )
function SysTraceGetExternalName (line 1400) | void SysTraceGetExternalName( uint64_t thread, const char*& threadName...
FILE: public/client/TracySysTrace.hpp
type tracy (line 15) | namespace tracy
FILE: public/client/TracyThread.hpp
type tracy (line 14) | namespace tracy
class ThreadExitHandler (line 21) | class ThreadExitHandler
class Thread (line 35) | class Thread
method Thread (line 38) | Thread( void(*func)( void* ptr ), void* ptr )
method HANDLE (line 50) | HANDLE Handle() const { return m_hnd; }
method DWORD (line 53) | static DWORD WINAPI Launch( void* ptr ) { ((Thread*)ptr)->m_func( ((...
method Thread (line 65) | Thread( void(*func)( void* ptr ), void* ptr )
method pthread_t (line 77) | pthread_t Handle() const { return m_thread; }
class Thread (line 62) | class Thread
method Thread (line 38) | Thread( void(*func)( void* ptr ), void* ptr )
method HANDLE (line 50) | HANDLE Handle() const { return m_hnd; }
method DWORD (line 53) | static DWORD WINAPI Launch( void* ptr ) { ((Thread*)ptr)->m_func( ((...
method Thread (line 65) | Thread( void(*func)( void* ptr ), void* ptr )
method pthread_t (line 77) | pthread_t Handle() const { return m_thread; }
FILE: public/client/tracy_SPSCQueue.h
function namespace (line 38) | namespace tracy {
FILE: public/client/tracy_concurrentqueue.h
function namespace (line 66) | namespace moodycamel { namespace details {
type compile_time_condition (line 85) | struct compile_time_condition
function namespace (line 91) | namespace moodycamel {
type ProducerToken (line 192) | struct ProducerToken
type ConsumerToken (line 193) | struct ConsumerToken
FILE: public/client/tracy_rpmalloc.cpp
function FORCEINLINE (line 228) | static FORCEINLINE int32_t atomic_load32(atomic32_t* src) { return std::...
function FORCEINLINE (line 229) | static FORCEINLINE void atomic_store32(atomic32_t* dst, int32_t val) ...
function FORCEINLINE (line 230) | static FORCEINLINE int32_t atomic_incr32(atomic32_t* val) { return std::...
function FORCEINLINE (line 231) | static FORCEINLINE int32_t atomic_decr32(atomic32_t* val) { return std::...
function FORCEINLINE (line 232) | static FORCEINLINE int32_t atomic_add32(atomic32_t* val, int32_t add) { ...
function FORCEINLINE (line 233) | static FORCEINLINE int atomic_cas32_acquire(atomic32_t* dst, int32_t...
function FORCEINLINE (line 234) | static FORCEINLINE void atomic_store32_release(atomic32_t* dst, int32...
function FORCEINLINE (line 235) | static FORCEINLINE int64_t atomic_load64(atomic64_t* val) { return std::...
function FORCEINLINE (line 236) | static FORCEINLINE int64_t atomic_add64(atomic64_t* val, int64_t add) { ...
function FORCEINLINE (line 237) | static FORCEINLINE void* atomic_load_ptr(atomicptr_t* src) { return st...
function FORCEINLINE (line 238) | static FORCEINLINE void atomic_store_ptr(atomicptr_t* dst, void* val)...
function FORCEINLINE (line 239) | static FORCEINLINE void atomic_store_ptr_release(atomicptr_t* dst, vo...
function FORCEINLINE (line 240) | static FORCEINLINE void* atomic_exchange_ptr_acquire(atomicptr_t* dst,...
function FORCEINLINE (line 241) | static FORCEINLINE int atomic_cas_ptr(atomicptr_t* dst, void* val, v...
type heap_t (line 354) | struct heap_t
type span_t (line 356) | struct span_t
type span_list_t (line 358) | struct span_list_t
type span_active_t (line 360) | struct span_active_t
type size_class_t (line 362) | struct size_class_t
type global_cache_t (line 364) | struct global_cache_t
type span_use_t (line 376) | struct span_use_t {
type span_use_t (line 400) | struct span_use_t
type size_class_use_t (line 404) | struct size_class_use_t {
type size_class_use_t (line 427) | struct size_class_use_t
type span_t (line 438) | struct span_t {
type span_cache_t (line 476) | struct span_cache_t {
type span_cache_t (line 480) | struct span_cache_t
type span_large_cache_t (line 482) | struct span_large_cache_t {
type span_large_cache_t (line 486) | struct span_large_cache_t
type heap_size_class_t (line 488) | struct heap_size_class_t {
type heap_size_class_t (line 497) | struct heap_size_class_t
type heap_t (line 500) | struct heap_t {
type size_class_t (line 557) | struct size_class_t {
type global_cache_t (line 567) | struct global_cache_t {
function heap_t (line 707) | static inline heap_t*
function heap_t (line 717) | static inline heap_t*
function get_thread_id (line 731) | static inline uintptr_t
function set_thread_heap (line 764) | static void
function rpmalloc_set_main_thread (line 779) | void
function _rpmalloc_spin (line 784) | static void
function _rpmalloc_thread_destructor (line 803) | static void NTAPI
function _rpmalloc_set_name (line 823) | static void
function _rpmalloc_unmap (line 860) | static void
function span_t (line 996) | static span_t*
function _rpmalloc_global_set_reserved_spans (line 1009) | static void
function _rpmalloc_span_double_link_list_add (line 1024) | static void
function _rpmalloc_span_double_link_list_pop_head (line 1033) | static void
function _rpmalloc_span_double_link_list_remove (line 1041) | static void
function _rpmalloc_span_mark_as_subspan_unless_master (line 1072) | static void
function span_t (line 1084) | static span_t*
function _rpmalloc_span_align_count (line 1099) | static size_t
function _rpmalloc_span_initialize (line 1108) | static void
function span_t (line 1121) | static span_t*
function span_t (line 1159) | static span_t*
function _rpmalloc_span_unmap (line 1192) | static void
function _rpmalloc_span_release_to_cache (line 1228) | static void
function free_list_partial_init (line 1250) | static uint32_t
function _rpmalloc_span_extract_free_list_deferred (line 1311) | static void
function _rpmalloc_span_is_fully_utilized (line 1323) | static int
function _rpmalloc_span_finalize (line 1329) | static int
function _rpmalloc_global_cache_finalize (line 1379) | static void
function _rpmalloc_global_cache_insert_spans (line 1397) | static void
FILE: public/client/tracy_rpmalloc.hpp
type tracy (line 17) | namespace tracy
type rpmalloc_global_statistics_t (line 68) | struct rpmalloc_global_statistics_t {
type rpmalloc_thread_statistics_t (line 85) | struct rpmalloc_thread_statistics_t {
type rpmalloc_config_t (line 136) | struct rpmalloc_config_t {
type heap_t (line 298) | struct heap_t
FILE: public/client/windows/TracyETW.cpp
type tracy (line 9) | namespace tracy
type etw (line 11) | namespace etw
type Session (line 21) | struct Session
type CSwitch (line 31) | struct CSwitch
type ReadyThread (line 50) | struct ReadyThread
type ThreadInfo (line 62) | struct ThreadInfo
type ThreadStart (line 76) | struct ThreadStart : public ThreadInfo
type ThreadDCStart (line 83) | struct ThreadDCStart : public ThreadInfo
type SampledProfile (line 89) | struct SampledProfile
type StackWalkEvent (line 102) | struct StackWalkEvent
type VSyncDPC (line 115) | struct VSyncDPC
function ETWErrorAction (line 134) | static void ETWErrorAction( ULONG error_code, const char* message, i...
function ULONG (line 149) | static ULONG ETWError( ULONG result )
function CheckAdminPrivilege (line 169) | static bool CheckAdminPrivilege()
function DWORD (line 182) | static DWORD ElevatePrivilege( LPCTSTR PrivilegeName )
function IsOS64Bit (line 198) | static bool IsOS64Bit()
function ULONG (line 210) | static ULONG StopSession( Session& session )
function ULONG (line 224) | static ULONG StartSession( Session& session )
function ULONG (line 241) | static ULONG CheckProviderSessions( GUID provider, ULONGLONG MatchAn...
function ULONG (line 279) | static ULONG EnableProvider(
function ULONG (line 293) | static ULONG EnableStackWalk( Session& session, GUID EventGuid, UCHA...
function ULONG (line 317) | static ULONG SetCPUProfilingInterval( int microseconds )
function Session (line 329) | static Session StartSingletonKernelLoggerSession( ULONGLONG EnableFl...
function Session (line 363) | static Session StartPrivateKernelSession( const CHAR* name )
function Session (line 397) | static Session StartUserSession( const CHAR* name )
function IsSingletonKernelLoggerSession (line 424) | bool IsSingletonKernelLoggerSession( Session& session )
function ULONG (line 432) | static ULONG UpdateSessionEnableFlags( Session& session, ULONGLONG E...
function ULONG (line 445) | static ULONG EnableProcessAndThreadMonitoring( Session& session )
function ULONG (line 461) | static ULONG EnableCPUProfiling( Session& session, int microseconds ...
function ULONG (line 495) | static ULONG EnableContextSwitchMonitoring( Session& session )
function ULONG (line 522) | static ULONG EnableVSyncMonitoring( Session& session )
function ULONG (line 562) | static ULONG WINAPI OnBufferComplete( PEVENT_TRACE_LOGFILEA Buffer )
function PROCESSTRACE_HANDLE (line 573) | static PROCESSTRACE_HANDLE SetupEventConsumer( const Session& sessio...
function ULONG (line 590) | static ULONG StopEventConsumer( PROCESSTRACE_HANDLE hEventConsumer )
function ULONG (line 598) | static ULONG EventConsumerLoop( PROCESSTRACE_HANDLE hEventConsumer )
FILE: public/common/TracyAlign.hpp
type tracy (line 8) | namespace tracy
function tracy_force_inline (line 12) | tracy_force_inline T MemRead( const void* ptr )
function tracy_force_inline (line 20) | tracy_force_inline void MemWrite( void* ptr, T val )
FILE: public/common/TracyAlloc.hpp
type tracy (line 13) | namespace tracy
function InitRpmalloc (line 19) | static inline void InitRpmalloc() {}
function tracy_free (line 41) | static inline void tracy_free( void* ptr )
function tracy_free_fast (line 51) | static inline void tracy_free_fast( void* ptr )
FILE: public/common/TracyColor.hpp
type tracy (line 4) | namespace tracy
type Color (line 6) | struct Color
type ColorType (line 8) | enum ColorType
FILE: public/common/TracyMutex.hpp
type tracy (line 8) | namespace tracy
type tracy (line 17) | namespace tracy
FILE: public/common/TracyProtocol.hpp
type tracy (line 8) | namespace tracy
function Lz4CompressBound (line 11) | constexpr unsigned Lz4CompressBound( unsigned isize ) { return isize +...
type HandshakeStatus (line 26) | enum HandshakeStatus : uint8_t
type ServerQuery (line 41) | enum ServerQuery : uint8_t
type ServerQueryPacket (line 62) | struct ServerQueryPacket
type CpuArchitecture (line 72) | enum CpuArchitecture : uint8_t
type WelcomeFlag (line 82) | struct WelcomeFlag
type _t (line 84) | enum _t : uint8_t
type WelcomeMessage (line 94) | struct WelcomeMessage
type OnDemandPayloadMessage (line 113) | struct OnDemandPayloadMessage
type BroadcastMessage (line 120) | struct BroadcastMessage
type BroadcastMessage_v2 (line 130) | struct BroadcastMessage_v2
type BroadcastMessage_v1 (line 139) | struct BroadcastMessage_v1
type BroadcastMessage_v0 (line 148) | struct BroadcastMessage_v0
FILE: public/common/TracyQueue.hpp
type tracy (line 9) | namespace tracy
type QueueType (line 12) | enum class QueueType : uint8_t
type QueueThreadContext (line 136) | struct QueueThreadContext
type QueueZoneBeginLean (line 141) | struct QueueZoneBeginLean
type QueueZoneBegin (line 146) | struct QueueZoneBegin : public QueueZoneBeginLean
type QueueZoneBeginThread (line 151) | struct QueueZoneBeginThread : public QueueZoneBegin
type QueueZoneEnd (line 156) | struct QueueZoneEnd
type QueueZoneEndThread (line 161) | struct QueueZoneEndThread : public QueueZoneEnd
type QueueZoneValidation (line 166) | struct QueueZoneValidation
type QueueZoneValidationThread (line 171) | struct QueueZoneValidationThread : public QueueZoneValidation
type QueueZoneColor (line 176) | struct QueueZoneColor
type QueueZoneColorThread (line 183) | struct QueueZoneColorThread : public QueueZoneColor
type QueueZoneValue (line 188) | struct QueueZoneValue
type QueueZoneValueThread (line 193) | struct QueueZoneValueThread : public QueueZoneValue
type QueueStringTransfer (line 198) | struct QueueStringTransfer
type QueueFrameMark (line 203) | struct QueueFrameMark
type QueueFrameVsync (line 209) | struct QueueFrameVsync
type QueueFrameImage (line 215) | struct QueueFrameImage
type QueueFrameImageFat (line 223) | struct QueueFrameImageFat : public QueueFrameImage
type QueueSourceLocation (line 228) | struct QueueSourceLocation
type QueueZoneTextFat (line 239) | struct QueueZoneTextFat
type QueueZoneTextFatThread (line 245) | struct QueueZoneTextFatThread : public QueueZoneTextFat
type LockType (line 250) | enum class LockType : uint8_t
type QueueLockAnnounce (line 256) | struct QueueLockAnnounce
type QueueFiberEnter (line 264) | struct QueueFiberEnter
type QueueFiberLeave (line 272) | struct QueueFiberLeave
type QueueLockTerminate (line 278) | struct QueueLockTerminate
type QueueLockWait (line 284) | struct QueueLockWait
type QueueLockObtain (line 291) | struct QueueLockObtain
type QueueLockRelease (line 298) | struct QueueLockRelease
type QueueLockReleaseShared (line 304) | struct QueueLockReleaseShared : public QueueLockRelease
type QueueLockMark (line 309) | struct QueueLockMark
type QueueLockName (line 316) | struct QueueLockName
type QueueLockNameFat (line 321) | struct QueueLockNameFat : public QueueLockName
type QueuePlotDataBase (line 327) | struct QueuePlotDataBase
type QueuePlotDataInt (line 333) | struct QueuePlotDataInt : public QueuePlotDataBase
type QueuePlotDataFloat (line 338) | struct QueuePlotDataFloat : public QueuePlotDataBase
type QueuePlotDataDouble (line 343) | struct QueuePlotDataDouble : public QueuePlotDataBase
type MessageSourceType (line 348) | enum class MessageSourceType : uint8_t
type MessageSeverity (line 355) | enum class MessageSeverity : uint8_t
function tracy_force_inline (line 366) | tracy_force_inline uint8_t MakeMessageMetadata(MessageSourceType sourc...
function tracy_force_inline (line 373) | tracy_force_inline MessageSourceType MessageSourceFromMetadata(uint8_t...
function tracy_force_inline (line 379) | tracy_force_inline MessageSeverity MessageSeverityFromMetadata(uint8_t...
type QueueMessage (line 387) | struct QueueMessage
type QueueMessageColor (line 392) | struct QueueMessageColor : public QueueMessage
type QueueMessageMetadata (line 399) | struct QueueMessageMetadata : public QueueMessage
type QueueMessageColorMetadata (line 404) | struct QueueMessageColorMetadata : public QueueMessageColor
type QueueMessageLiteral (line 409) | struct QueueMessageLiteral : public QueueMessage
type QueueMessageLiteralThread (line 414) | struct QueueMessageLiteralThread : public QueueMessageLiteral
type QueueMessageColorLiteral (line 419) | struct QueueMessageColorLiteral : public QueueMessageColor
type QueueMessageColorLiteralThread (line 424) | struct QueueMessageColorLiteralThread : public QueueMessageColorLiteral
type QueueMessageFat (line 429) | struct QueueMessageFat : public QueueMessage
type QueueMessageFatThread (line 435) | struct QueueMessageFatThread : public QueueMessageFat
type QueueMessageColorFat (line 440) | struct QueueMessageColorFat : public QueueMessageColor
type QueueMessageColorFatThread (line 446) | struct QueueMessageColorFatThread : public QueueMessageColorFat
type GpuContextType (line 452) | enum class GpuContextType : uint8_t
type GpuContextFlags (line 466) | enum GpuContextFlags : uint8_t
type QueueGpuNewContext (line 471) | struct QueueGpuNewContext
type QueueGpuZoneBeginLean (line 482) | struct QueueGpuZoneBeginLean
type QueueGpuZoneBegin (line 490) | struct QueueGpuZoneBegin : public QueueGpuZoneBeginLean
type QueueGpuZoneEnd (line 495) | struct QueueGpuZoneEnd
type QueueGpuZoneAnnotation (line 503) | struct QueueGpuZoneAnnotation
type QueueGpuTime (line 512) | struct QueueGpuTime
type QueueGpuCalibration (line 519) | struct QueueGpuCalibration
type QueueGpuTimeSync (line 527) | struct QueueGpuTimeSync
type QueueGpuContextName (line 534) | struct QueueGpuContextName
type QueueGpuContextNameFat (line 539) | struct QueueGpuContextNameFat : public QueueGpuContextName
type QueueGpuAnnotationName (line 545) | struct QueueGpuAnnotationName
type QueueGpuAnnotationNameFat (line 551) | struct QueueGpuAnnotationNameFat : public QueueGpuAnnotationName
type QueueMemNamePayload (line 557) | struct QueueMemNamePayload
type QueueThreadGroupHint (line 562) | struct QueueThreadGroupHint
type QueueMemAlloc (line 568) | struct QueueMemAlloc
type QueueMemFree (line 576) | struct QueueMemFree
type QueueMemDiscard (line 583) | struct QueueMemDiscard
type QueueCallstackFat (line 590) | struct QueueCallstackFat
type QueueCallstackFatThread (line 595) | struct QueueCallstackFatThread : public QueueCallstackFat
type QueueCallstackAllocFat (line 600) | struct QueueCallstackAllocFat
type QueueCallstackAllocFatThread (line 606) | struct QueueCallstackAllocFatThread : public QueueCallstackAllocFat
type QueueCallstackSample (line 611) | struct QueueCallstackSample
type QueueCallstackSampleFat (line 617) | struct QueueCallstackSampleFat : public QueueCallstackSample
type QueueCallstackFrameSize (line 622) | struct QueueCallstackFrameSize
type QueueCallstackFrameSizeFat (line 628) | struct QueueCallstackFrameSizeFat : public QueueCallstackFrameSize
type QueueCallstackFrame (line 634) | struct QueueCallstackFrame
type QueueSymbolInformation (line 641) | struct QueueSymbolInformation
type QueueSymbolInformationFat (line 647) | struct QueueSymbolInformationFat : public QueueSymbolInformation
type QueueCrashReport (line 653) | struct QueueCrashReport
type QueueCrashReportThread (line 659) | struct QueueCrashReportThread
type QueueSysTime (line 664) | struct QueueSysTime
type QueueSysPower (line 670) | struct QueueSysPower
type QueueContextSwitch (line 677) | struct QueueContextSwitch
type QueueThreadWakeup (line 690) | struct QueueThreadWakeup
type QueueTidToPid (line 699) | struct QueueTidToPid
type QueueHwSample (line 705) | struct QueueHwSample
type PlotFormatType (line 711) | enum class PlotFormatType : uint8_t
type QueuePlotConfig (line 718) | struct QueuePlotConfig
type QueueParamSetup (line 727) | struct QueueParamSetup
type QueueSourceCodeNotAvailable (line 735) | struct QueueSourceCodeNotAvailable
type QueueCpuTopology (line 740) | struct QueueCpuTopology
type QueueExternalNameMetadata (line 748) | struct QueueExternalNameMetadata
type QueueSymbolCodeMetadata (line 755) | struct QueueSymbolCodeMetadata
type QueueSourceCodeMetadata (line 762) | struct QueueSourceCodeMetadata
type QueueHeader (line 769) | struct QueueHeader
type QueueItem (line 778) | struct QueueItem
FILE: public/common/TracySocket.cpp
type tracy (line 43) | namespace tracy
type __wsinit (line 53) | struct __wsinit
method __wsinit (line 55) | __wsinit()
function InitWinSock (line 66) | void InitWinSock()
type addrinfo (line 159) | struct addrinfo
type addrinfo (line 160) | struct addrinfo
type addrinfo (line 231) | struct addrinfo
type addrinfo (line 232) | struct addrinfo
type pollfd (line 345) | struct pollfd
type pollfd (line 428) | struct pollfd
function addrinfo_and_socket_for_family (line 454) | static int addrinfo_and_socket_for_family( uint16_t port, int ai_famil...
type addrinfo (line 479) | struct addrinfo
function Socket (line 513) | Socket* ListenSocket::Accept()
type addrinfo (line 570) | struct addrinfo
type addrinfo (line 571) | struct addrinfo
type sockaddr_in (line 628) | struct sockaddr_in
type sockaddr (line 645) | struct sockaddr
type sockaddr_in (line 648) | struct sockaddr_in
type sockaddr_in (line 652) | struct sockaddr_in
type sockaddr_in (line 705) | struct sockaddr_in
type pollfd (line 739) | struct pollfd
type sockaddr (line 745) | struct sockaddr
FILE: public/common/TracySocket.hpp
type addrinfo (line 8) | struct addrinfo
type sockaddr (line 9) | struct sockaddr
type tracy (line 11) | namespace tracy
class Socket (line 18) | class Socket
method Read (line 36) | bool Read( void* buf, int len, int timeout, ShouldExit exitCb )
method Socket (line 51) | Socket( const Socket& ) = delete;
method Socket (line 52) | Socket( Socket&& ) = delete;
method Socket (line 53) | Socket& operator=( const Socket& ) = delete;
method Socket (line 54) | Socket& operator=( Socket&& ) = delete;
type addrinfo (line 67) | struct addrinfo
type addrinfo (line 68) | struct addrinfo
class ListenSocket (line 72) | class ListenSocket
method ListenSocket (line 82) | ListenSocket( const ListenSocket& ) = delete;
method ListenSocket (line 83) | ListenSocket( ListenSocket&& ) = delete;
method ListenSocket (line 84) | ListenSocket& operator=( const ListenSocket& ) = delete;
method ListenSocket (line 85) | ListenSocket& operator=( ListenSocket&& ) = delete;
class UdpBroadcast (line 91) | class UdpBroadcast
method UdpBroadcast (line 102) | UdpBroadcast( const UdpBroadcast& ) = delete;
method UdpBroadcast (line 103) | UdpBroadcast( UdpBroadcast&& ) = delete;
method UdpBroadcast (line 104) | UdpBroadcast& operator=( const UdpBroadcast& ) = delete;
method UdpBroadcast (line 105) | UdpBroadcast& operator=( UdpBroadcast&& ) = delete;
class IpAddress (line 112) | class IpAddress
type sockaddr (line 118) | struct sockaddr
method GetNumber (line 120) | uint32_t GetNumber() const { return m_number; }
method IpAddress (line 123) | IpAddress( const IpAddress& ) = delete;
method IpAddress (line 124) | IpAddress( IpAddress&& ) = delete;
method IpAddress (line 125) | IpAddress& operator=( const IpAddress& ) = delete;
method IpAddress (line 126) | IpAddress& operator=( IpAddress&& ) = delete;
class UdpListen (line 133) | class UdpListen
method UdpListen (line 144) | UdpListen( const UdpListen& ) = delete;
method UdpListen (line 145) | UdpListen( UdpListen&& ) = delete;
method UdpListen (line 146) | UdpListen& operator=( const UdpListen& ) = delete;
method UdpListen (line 147) | UdpListen& operator=( UdpListen&& ) = delete;
FILE: public/common/TracyStackFrames.cpp
type tracy (line 3) | namespace tracy
FILE: public/common/TracyStackFrames.hpp
type tracy (line 6) | namespace tracy
type StringMatch (line 9) | struct StringMatch
FILE: public/common/TracySystem.cpp
type tracy (line 64) | namespace tracy
type detail (line 67) | namespace detail
function TRACY_API (line 70) | TRACY_API uint32_t GetThreadHandleImpl()
type THREADNAME_INFO (line 118) | struct THREADNAME_INFO
function ThreadNameMsvcMagic (line 127) | void ThreadNameMsvcMagic( const THREADNAME_INFO& info )
function TRACY_API (line 139) | TRACY_API void SetThreadName( const char* name )
function TRACY_API (line 144) | TRACY_API void SetThreadNameWithHint( const char* name, int32_t groupH...
function ThreadNameData (line 221) | ThreadNameData* GetThreadNameData( uint32_t id )
function TRACY_API (line 236) | TRACY_API const char* GetThreadName( uint32_t id )
function TRACY_API (line 310) | TRACY_API const char* GetEnvVar( const char* name )
function TRACY_API (line 342) | TRACY_API const char* GetUserLogin()
function TRACY_API (line 364) | TRACY_API const char* GetUserFullName()
function TRACY_API (line 393) | TRACY_API void ___tracy_set_thread_name( const char* name ) { tracy::Set...
FILE: public/common/TracySystem.hpp
type tracy (line 8) | namespace tracy
type detail (line 11) | namespace detail
type ThreadNameData (line 17) | struct ThreadNameData
function GetThreadHandle (line 29) | static inline uint32_t GetThreadHandle()
FILE: public/common/TracyTaggedUserlandAddress.hpp
type tracy (line 7) | namespace tracy
class TaggedUserlandAddress (line 10) | class TaggedUserlandAddress
method TaggedUserlandAddress (line 19) | TaggedUserlandAddress() = default;
method TaggedUserlandAddress (line 20) | explicit TaggedUserlandAddress( uint64_t address, uint8_t tag = 0 )
method SetPackedValue (line 27) | void SetPackedValue(uint64_t value) { m_storage = value; }
method GetPackedValue (line 28) | uint64_t GetPackedValue() const { return m_storage; }
method SetAddress (line 30) | void SetAddress( uint64_t address)
method GetAddress (line 35) | uint64_t GetAddress() const { return m_storage & ( ~kKernelOnlyBitMa...
method SetTag (line 37) | void SetTag( uint8_t tag )
method GetTag (line 42) | uint8_t GetTag() const { return (uint8_t)( ( m_storage & kKernelOnly...
FILE: public/common/TracyVersion.hpp
type tracy (line 4) | namespace tracy
type Version (line 6) | namespace Version
FILE: public/common/TracyYield.hpp
type tracy (line 12) | namespace tracy
function tracy_force_inline (line 15) | static tracy_force_inline void YieldThread()
FILE: public/common/tracy_lz4.cpp
function LZ4_isAligned (line 290) | static int LZ4_isAligned(const void* ptr, size_t alignment)
function LZ4_isLittleEndian (line 363) | static unsigned LZ4_isLittleEndian(void)
function U16 (line 373) | static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; }
function U32 (line 374) | static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; }
function reg_t (line 375) | static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) ...
function LZ4_write16 (line 377) | static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
function LZ4_write32 (line 378) | static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; }
function U16 (line 386) | static U16 LZ4_read16(const void* ptr) { return ((const LZ4_unalign*)ptr...
function U32 (line 387) | static U32 LZ4_read32(const void* ptr) { return ((const LZ4_unalign*)ptr...
function reg_t (line 388) | static reg_t LZ4_read_ARCH(const void* ptr) { return ((const LZ4_unalign...
function LZ4_write16 (line 390) | static void LZ4_write16(void* memPtr, U16 value) { ((LZ4_unalign*)memPtr...
function LZ4_write32 (line 391) | static void LZ4_write32(void* memPtr, U32 value) { ((LZ4_unalign*)memPtr...
function U16 (line 395) | static U16 LZ4_read16(const void* memPtr)
function U32 (line 400) | static U32 LZ4_read32(const void* memPtr)
function reg_t (line 405) | static reg_t LZ4_read_ARCH(const void* memPtr)
function LZ4_write16 (line 410) | static void LZ4_write16(void* memPtr, U16 value)
function LZ4_write32 (line 415) | static void LZ4_write32(void* memPtr, U32 value)
function U16 (line 423) | static U16 LZ4_readLE16(const void* memPtr)
function LZ4_writeLE16 (line 433) | static void LZ4_writeLE16(void* memPtr, U16 value)
function LZ4_FORCE_INLINE (line 445) | LZ4_FORCE_INLINE
function LZ4_FORCE_INLINE (line 476) | LZ4_FORCE_INLINE void
function LZ4_FORCE_INLINE (line 502) | LZ4_FORCE_INLINE void
function LZ4_FORCE_INLINE (line 515) | LZ4_FORCE_INLINE void
function LZ4_NbCommonBytes (line 560) | LZ4_FORCE_INLINE unsigned LZ4_NbCommonBytes (reg_t val)
function LZ4_count (line 660) | LZ4_FORCE_INLINE
function LZ4_versionNumber (line 730) | int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; }
function LZ4_compressBound (line 732) | int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); }
function LZ4_sizeofState (line 733) | int LZ4_sizeofState(void) { return sizeof(LZ4_stream_t); }
function LZ4_FORCE_INLINE (line 752) | LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
function LZ4_FORCE_INLINE (line 760) | LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
function LZ4_FORCE_INLINE (line 772) | LZ4_FORCE_INLINE U32 LZ4_hashPosition(
Copy disabled (too large)
Download .json
Condensed preview — 391 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,275K chars).
[
{
"path": ".clang-format",
"chars": 1555,
"preview": "# Empirical format config, based on observed style guide\n# Use this only as an help to fit the surrounding code style - "
},
{
"path": ".clang-tidy",
"chars": 4149,
"preview": "---\nChecks:\n'\n\tclang-diagnostic-*,\n\tclang-analyzer-*,\n\tbugprone-*,\n\tgoogle-*,\n\tmisc-*,\n\tmodernize-*,\n\tperformance-*,\n\tre"
},
{
"path": ".github/FUNDING.yml",
"chars": 16,
"preview": "github: wolfpld\n"
},
{
"path": ".github/workflows/emscripten.yml",
"chars": 2382,
"preview": "name: emscripten\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n workflow_dispatch:\n\nen"
},
{
"path": ".github/workflows/latex.yml",
"chars": 459,
"preview": "name: Manual\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n workflow_dispatch:\n workf"
},
{
"path": ".github/workflows/linux.yml",
"chars": 3189,
"preview": "name: linux\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n workflow_dispatch:\n\nenv:\n "
},
{
"path": ".github/workflows/macos.yml",
"chars": 2124,
"preview": "name: macos\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n workflow_dispatch:\n\nenv:\n "
},
{
"path": ".github/workflows/release.yml",
"chars": 643,
"preview": "name: release\n\non:\n release:\n types: [published]\n\njobs:\n build-windows:\n uses: ./.github/workflows/windows.yml\n\n"
},
{
"path": ".github/workflows/windows.yml",
"chars": 2163,
"preview": "name: windows\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n workflow_dispatch:\n work"
},
{
"path": ".gitignore",
"chars": 624,
"preview": ".vs\n_build\n_compiler\ntools/*\n*.d\n*.o\n*.so\n*.swp\n*.obj\nimgui.ini\ntest/tracy_test\ntest/tracy_test.exe\n*/build/unix/*-*\nman"
},
{
"path": ".mailmap",
"chars": 86,
"preview": "<wolf@nereid.pl> <wolf.pld@gmail.com>\n<wolf@nereid.pl> <bartosz.taudul@game-lion.com>\n"
},
{
"path": ".vscode/extensions.json",
"chars": 146,
"preview": "{\n \"recommendations\": [\n \"llvm-vs-code-extensions.vscode-clangd\",\n \"vadimcn.vscode-lldb\",\n \"ms-v"
},
{
"path": ".vscode/launch.json",
"chars": 293,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Launch\",\n \"type\": \"lldb\",\n "
},
{
"path": ".vscode/settings.json",
"chars": 753,
"preview": "{\n \"cmake.sourceDirectory\": [\n \"${workspaceFolder}/profiler\",\n \"${workspaceFolder}/capture\",\n \"$"
},
{
"path": "CMakeLists.txt",
"chars": 12369,
"preview": "cmake_minimum_required(VERSION 3.10)\n\n# Run version helper script\ninclude(cmake/version.cmake)\n\nproject(Tracy LANGUAGES "
},
{
"path": "Config.cmake.in",
"chars": 140,
"preview": "@PACKAGE_INIT@\n\ninclude(CMakeFindDependencyMacro)\nfind_dependency(Threads REQUIRED)\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/"
},
{
"path": "LICENSE",
"chars": 1618,
"preview": "Tracy Profiler (https://github.com/wolfpld/tracy) is licensed under the\n3-clause BSD license.\n\nCopyright (c) 2017-2026, "
},
{
"path": "NEWS",
"chars": 73166,
"preview": "Note: There is no guarantee that version mismatched client and server will\nbe able to talk with each other. Network prot"
},
{
"path": "README.md",
"chars": 2014,
"preview": "# Tracy Profiler\n\n[](https://github.com/sponsors/wolfpld/)\n\n### A real time, nanosecond r"
},
{
"path": "capture/CMakeLists.txt",
"chars": 1206,
"preview": "cmake_minimum_required(VERSION 3.16)\n\noption(NO_ISA_EXTENSIONS \"Disable ISA extensions (don't pass -march=native or -mcp"
},
{
"path": "capture/src/CaptureOutput.cpp",
"chars": 6616,
"preview": "#ifdef _WIN32\n# include <io.h>\n# include <windows.h>\n#else\n# include <unistd.h>\n#endif\n\n#include <atomic>\n#include <c"
},
{
"path": "capture/src/CaptureOutput.hpp",
"chars": 796,
"preview": "#ifndef __CAPTUREOUTPUT_HPP__\n#define __CAPTUREOUTPUT_HPP__\n\n#include <stdint.h>\n\n#define ANSI_RESET \"\\033[0m\"\n#define A"
},
{
"path": "capture/src/capture.cpp",
"chars": 4993,
"preview": "#ifdef _WIN32\n# include <windows.h>\n#else\n# include <unistd.h>\n#endif\n\n#include <atomic>\n#include <chrono>\n#include <i"
},
{
"path": "capture/src/capturedaemon.cpp",
"chars": 12898,
"preview": "#ifdef _WIN32\n# include <windows.h>\n#else\n# include <unistd.h>\n#endif\n\n#include <atomic>\n#include <chrono>\n#include <c"
},
{
"path": "cmake/CPM.cmake",
"chars": 41052,
"preview": "# CPM.cmake - CMake's missing package manager\n# ===========================================\n# See https://github.com/cpm"
},
{
"path": "cmake/ECMFindModuleHelpers.cmake",
"chars": 13704,
"preview": "#.rst:\n# ECMFindModuleHelpers\n# --------------------\n#\n# Helper macros for find modules: ecm_find_package_version_check("
},
{
"path": "cmake/FindWaylandScanner.cmake",
"chars": 6381,
"preview": "#.rst:\n# FindWaylandScanner\n# ------------------\n#\n# Try to find wayland-scanner.\n#\n# If the wayland-scanner executable "
},
{
"path": "cmake/config.cmake",
"chars": 2304,
"preview": "if (NOT NO_ISA_EXTENSIONS)\n include(CheckCXXCompilerFlag)\n if (CMAKE_SYSTEM_PROCESSOR MATCHES \"aarch64\" OR CMAKE_S"
},
{
"path": "cmake/gl3w-extra-symbols.patch",
"chars": 269,
"preview": "diff --git a/extra_symbols.txt b/extra_symbols.txt\nindex b95bb58..6b8f616 100644\n--- a/extra_symbols.txt\n+++ b/extra_sym"
},
{
"path": "cmake/imgui-emscripten.patch",
"chars": 565,
"preview": "diff '--color=auto' -ruN 72d8f61727dc878102157113d1998f86b852d20e/imconfig.h new/imconfig.h\n--- 72d8f61727dc878102157113"
},
{
"path": "cmake/imgui-loader.patch",
"chars": 2910,
"preview": "diff --git i/backends/imgui_impl_opengl3_loader.h w/backends/imgui_impl_opengl3_loader.h\nindex 4ca0536..a1ff572 100644\n-"
},
{
"path": "cmake/ppqsort-nodebug.patch",
"chars": 345,
"preview": "diff --git i/include/ppqsort/parameters.h w/include/ppqsort/parameters.h\nindex 115c3a1..3f4b669 100644\n--- i/include/ppq"
},
{
"path": "cmake/server.cmake",
"chars": 993,
"preview": "set(TRACY_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR}/../public/common)\n\nset(TRACY_COMMON_SOURCES\n tracy_lz4.cpp\n tracy_l"
},
{
"path": "cmake/tidy-cmake.patch",
"chars": 1449,
"preview": "diff --git i/CMakeLists.txt w/CMakeLists.txt\nindex 8efec25..c1d101e 100644\n--- i/CMakeLists.txt\n+++ w/CMakeLists.txt\n@@ "
},
{
"path": "cmake/vendor.cmake",
"chars": 8770,
"preview": "# Vendor Specific CMake\n# The Tracy project keeps most vendor source locally\n\nset (ROOT_DIR \"${CMAKE_CURRENT_LIST_DIR}/."
},
{
"path": "cmake/version.cmake",
"chars": 853,
"preview": "cmake_minimum_required(VERSION 3.10)\n\nmessage(\"Parsing public/common/TracyVersion.hpp file\")\n\nfile(READ \"${CMAKE_CURRENT"
},
{
"path": "csvexport/CMakeLists.txt",
"chars": 882,
"preview": "cmake_minimum_required(VERSION 3.16)\n\noption(NO_ISA_EXTENSIONS \"Disable ISA extensions (don't pass -march=native or -mcp"
},
{
"path": "csvexport/src/csvexport.cpp",
"chars": 15764,
"preview": "#ifdef _WIN32\n# include <windows.h>\n#endif\n\n#include <algorithm>\n#include <cctype>\n#include <fstream>\n#include <iostrea"
},
{
"path": "dtl/Diff.hpp",
"chars": 25667,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/Diff3.hpp",
"chars": 9498,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/Lcs.hpp",
"chars": 2050,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/Sequence.hpp",
"chars": 2295,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/Ses.hpp",
"chars": 4415,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/dtl.hpp",
"chars": 1906,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/functors.hpp",
"chars": 5188,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "dtl/variables.hpp",
"chars": 4934,
"preview": "/**\n dtl -- Diff Template Library\n \n In short, Diff Template Library is distributed under so called \"BSD license\","
},
{
"path": "examples/OpenCLVectorAdd/CMakeLists.txt",
"chars": 579,
"preview": "cmake_minimum_required(VERSION 3.10)\n\nproject(OpenCLVectorAdd)\n\nset(THREADS_PREFER_PTHREAD_FLAG ON)\nfind_package(Threads"
},
{
"path": "examples/OpenCLVectorAdd/OpenCLVectorAdd.cpp",
"chars": 8809,
"preview": "#include <iostream>\n#include <cassert>\n#include <string>\n#include <vector>\n#include <numeric>\n#include <math.h>\n\n#includ"
},
{
"path": "examples/ToyPathTracer/.gitignore",
"chars": 26,
"preview": "Windows/Compiled*Shader.h\n"
},
{
"path": "examples/ToyPathTracer/README",
"chars": 133,
"preview": "https://github.com/aras-p/ToyPathTracer\n\nModified to render only 10 frames. Client part requires 12 GB, server part\nrequ"
},
{
"path": "examples/ToyPathTracer/Source/Config.h",
"chars": 802,
"preview": "\n#if defined(__APPLE__) && !defined(__METAL_VERSION__)\n#include <TargetConditionals.h>\n#endif\n\n#define kBackbufferWidth "
},
{
"path": "examples/ToyPathTracer/Source/MathSimd.h",
"chars": 8338,
"preview": "#pragma once\n\n#if defined(_MSC_VER)\n#define VM_INLINE __forceinline\n#else\n#define VM_INLINE __attribute__((unused, alway"
},
{
"path": "examples/ToyPathTracer/Source/Maths.cpp",
"chars": 6247,
"preview": "#include \"Maths.h\"\n#include <stdlib.h>\n#include <stdint.h>\n\nstatic uint32_t XorShift32(uint32_t& state)\n{\n uint32_t x"
},
{
"path": "examples/ToyPathTracer/Source/Maths.h",
"chars": 16153,
"preview": "#pragma once\n\n#include <math.h>\n#include <assert.h>\n#include <stdint.h>\n#include \"Config.h\"\n#include \"MathSimd.h\"\n\n#defi"
},
{
"path": "examples/ToyPathTracer/Source/Test.cpp",
"chars": 15742,
"preview": "#include \"Config.h\"\n#include \"Test.h\"\n#include \"Maths.h\"\n#include <algorithm>\n#if CPU_CAN_DO_THREADS\n#include \"enkiTS/Ta"
},
{
"path": "examples/ToyPathTracer/Source/Test.h",
"chars": 607,
"preview": "#pragma once\n#include <stdint.h>\n\nenum TestFlags\n{\n kFlagAnimate = (1 << 0),\n kFlagProgressive = (1 << 1),\n};\n\nvoi"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/Atomics.h",
"chars": 3077,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/LockLessMultiReadPipe.h",
"chars": 9132,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/TaskScheduler.cpp",
"chars": 12543,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/TaskScheduler.h",
"chars": 6717,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/TaskScheduler_c.cpp",
"chars": 3306,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/TaskScheduler_c.h",
"chars": 4000,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Source/enkiTS/Threads.h",
"chars": 5099,
"preview": "// Copyright (c) 2013 Doug Binks\n// \n// This software is provided 'as-is', without any express or implied\n// warranty. I"
},
{
"path": "examples/ToyPathTracer/Windows/ComputeShader.hlsl",
"chars": 11560,
"preview": "#include \"../Source/Config.h\"\n\ninline uint RNG(inout uint state)\n{\n uint x = state;\n x ^= x << 13;\n x ^= x >> 1"
},
{
"path": "examples/ToyPathTracer/Windows/PixelShader.hlsl",
"chars": 350,
"preview": "float3 LinearToSRGB(float3 rgb)\n{\n rgb = max(rgb, float3(0, 0, 0));\n return max(1.055 * pow(rgb, 0.416666667) - 0."
},
{
"path": "examples/ToyPathTracer/Windows/TestCpu.sln",
"chars": 1401,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3090"
},
{
"path": "examples/ToyPathTracer/Windows/TestCpu.vcxproj",
"chars": 14782,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
},
{
"path": "examples/ToyPathTracer/Windows/TestCpu.vcxproj.filters",
"chars": 2263,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "examples/ToyPathTracer/Windows/TestWin.cpp",
"chars": 19696,
"preview": "#include <stdint.h>\n#define WIN32_LEAN_AND_MEAN\n#define NOMINMAX\n#include <windows.h>\n#include <d3d11_1.h>\n\n#include <st"
},
{
"path": "examples/ToyPathTracer/Windows/VertexShader.hlsl",
"chars": 250,
"preview": "struct vs2ps\n{\n float2 uv : TEXCOORD0;\n float4 pos : SV_Position;\n};\n\nvs2ps main(uint vid : SV_VertexID)\n{\n vs2"
},
{
"path": "examples/ToyPathTracer/license.md",
"chars": 1210,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "examples/fibers.cpp",
"chars": 589,
"preview": "// g++ fibers.cpp ../public/TracyClient.cpp -I../public/tracy -DTRACY_ENABLE -DTRACY_FIBERS -lpthread -ldl\n\n#include <th"
},
{
"path": "extra/color-hot.cpp",
"chars": 1663,
"preview": "#include <algorithm>\n#include <string.h>\n#include <stdio.h>\n#include <stdint.h>\n#include <math.h>\n\ninline float linear2s"
},
{
"path": "extra/color.cpp",
"chars": 1828,
"preview": "#include <algorithm>\n#include <string.h>\n#include <stdio.h>\n#include <stdint.h>\n#include <math.h>\n\ninline float sqrtfast"
},
{
"path": "extra/desktop/application-tracy.xml",
"chars": 597,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\n <mi"
},
{
"path": "extra/desktop/tracy.desktop",
"chars": 329,
"preview": "[Desktop Entry]\nVersion=1.0\nType=Application\nName=Tracy Profiler\nGenericName=Code profiler\nGenericName[pl]=Profiler kodu"
},
{
"path": "extra/dxt1divtable.c",
"chars": 439,
"preview": "#include <stdint.h>\n#include <stdio.h>\n\nint main()\n{\n for( int i=0; i<255*3+1; i++ )\n {\n // replace 4 with "
},
{
"path": "extra/dxt1table.c",
"chars": 666,
"preview": "#include <stdint.h>\n#include <stdio.h>\n\nstatic const uint8_t IndexTable[4] = { 1, 3, 2, 0 };\n\nint convert( int v )\n{\n "
},
{
"path": "extra/identify.cpp",
"chars": 1444,
"preview": "// g++ identify.cpp -lpthread ../public/common/tracy_lz4.cpp ../zstd/common/*.c ../zstd/decompress/*.c ../zstd/decompres"
},
{
"path": "extra/make-build.sh",
"chars": 1051,
"preview": "#!/bin/sh\n\nrm -rf tracy-build\nmkdir tracy-build\n\n./update-meson-version.sh\n\nif [ ! -f vswhere.exe ]; then\n wget https"
},
{
"path": "extra/natvis.py",
"chars": 7251,
"preview": "import lldb\n\ndef VectorSummary(value, dict):\n v = value.GetNonSyntheticValue()\n size = v.GetChildMemberWithName('m"
},
{
"path": "extra/rdotbl.c",
"chars": 532,
"preview": "#include <stdio.h>\n\nint main()\n{\n //int a = 16, b = 44, s = 4;\n //int av = 12, bv = 6, cv = 3;\n\n //int a = 32, "
},
{
"path": "extra/uarch/TracyMicroArchitecture.hpp",
"chars": 716,
"preview": "#include <stdint.h>\n\nnamespace tracy\n{\n\nstruct AsmDesc\n{\n uint8_t type;\n uint16_t width;\n};\n\nstruct AsmVar\n{\n i"
},
{
"path": "extra/uarch/uarch.cpp",
"chars": 10552,
"preview": "// Use with instructions.xml retrieved from uops.info\n\n#include <algorithm>\n#include <assert.h>\n#include <limits>\n#inclu"
},
{
"path": "extra/update-meson-version.sh",
"chars": 509,
"preview": "#!/bin/sh\n\nversion_header=\"../public/common/TracyVersion.hpp\"\n\nmajor=$(grep -o -E 'Major = [0-9]+' \"$version_header\" | a"
},
{
"path": "extra/version.cpp",
"chars": 300,
"preview": "#include <stdint.h>\n#include <stdio.h>\n\n#include \"../server/TracyFileHeader.hpp\"\n#include \"../public/common/TracyVersion"
},
{
"path": "extra/x11_colors.c",
"chars": 897,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n\nint main()\n{\n FILE* f = fopen( \"rgb.txt\", \"rb\" );\n\n char buf[1024];\n in"
},
{
"path": "getopt/getopt.c",
"chars": 8492,
"preview": "/*******************************************************************************\n * Copyright (c) 2012-2023, Kim Grasman"
},
{
"path": "getopt/getopt.h",
"chars": 2307,
"preview": "/*******************************************************************************\n * Copyright (c) 2012-2023, Kim Grasman"
},
{
"path": "icon/application-tracy.copying",
"chars": 617,
"preview": "application-tracy.svg (and no other file) is based on icons retrieved from\nhttps://gitlab.gnome.org/GNOME/adwaita-icon-t"
},
{
"path": "import/CMakeLists.txt",
"chars": 938,
"preview": "cmake_minimum_required(VERSION 3.16)\n\noption(NO_ISA_EXTENSIONS \"Disable ISA extensions (don't pass -march=native or -mcp"
},
{
"path": "import/src/import-chrome.cpp",
"chars": 11530,
"preview": "#ifdef _WIN32\n# include <windows.h>\n#endif\n\n#include <fstream>\n#include <nlohmann/json.hpp>\n#include <stdint.h>\n#includ"
},
{
"path": "import/src/import-fuchsia.cpp",
"chars": 17631,
"preview": "#include <cinttypes>\n#include <cstddef>\n#include <cstdint>\n#include <exception>\n#include <ostream>\n#include <utility>\n#i"
},
{
"path": "manual/filter.lua",
"chars": 109,
"preview": "function Link(el)\n el.attributes['reference-type'] = nil\n el.attributes['reference'] = nil\n return el\nend\n"
},
{
"path": "manual/latex2md.sh",
"chars": 1141,
"preview": "#!/bin/sh\n\ncp -f tracy.tex _tmp.tex\nsed -i -e 's@\\\\menu\\[,\\]@@g' _tmp.tex\nsed -i -e 's@\\\\keys@@g' _tmp.tex\nsed -i -e 's@"
},
{
"path": "manual/techdoc.tex",
"chars": 39041,
"preview": "% !TeX spellcheck = en_US\n\\documentclass[hidelinks,titlepage,a4paper]{article}\n\n\\usepackage[utf8]{inputenc}\n\\usepackage["
},
{
"path": "manual/tracy.bib",
"chars": 1391,
"preview": "@inproceedings{Abel19a,\n title = {uops.info: Characterizing Latency, Throughput, and Port Usage of Instructions on Inte"
},
{
"path": "manual/tracy.md",
"chars": 343434,
"preview": "---\nbibliography:\n- tracy.bib\n---\n\n::: titlepage\nTracy Profiler\n\nThe user manual\n\n{height=\"40m"
},
{
"path": "manual/tracy.tex",
"chars": 394850,
"preview": "% !TeX spellcheck = en_US\n\\documentclass[hidelinks,titlepage,a4paper,twoside]{article}\n\n\\usepackage[utf8]{inputenc}\n\\use"
},
{
"path": "merge/CMakeLists.txt",
"chars": 894,
"preview": "cmake_minimum_required(VERSION 3.16)\n\noption(NO_ISA_EXTENSIONS \"Disable ISA extensions (don't pass -march=native or -mcp"
},
{
"path": "merge/src/merge.cpp",
"chars": 12958,
"preview": "#include \"TracyFileRead.hpp\"\n#include \"TracyFileWrite.hpp\"\n#include \"TracyPrint.hpp\"\n#include \"TracyWorker.hpp\"\n#include"
},
{
"path": "meson.build",
"chars": 6542,
"preview": "project('tracy', ['cpp'], version: '0.13.1', meson_version: '>=1.3.0', default_options : ['cpp_std=c++11'])\n\n# internal "
},
{
"path": "meson.options",
"chars": 3743,
"preview": "option('tracy_enable', type : 'boolean', value : true, description : 'Enable profiling', yield: true)\noption('on_demand'"
},
{
"path": "profiler/CMakeLists.txt",
"chars": 10121,
"preview": "cmake_minimum_required(VERSION 3.25)\n\noption(NO_FILESELECTOR \"Disable the file selector\" OFF)\noption(GTK_FILESELECTOR \"U"
},
{
"path": "profiler/helpers/CMakeLists.txt",
"chars": 250,
"preview": "cmake_minimum_required(VERSION 3.16)\n\nset(CMAKE_CXX_STANDARD 20)\n\nproject(helpers LANGUAGES CXX)\n\nadd_executable(embed\n "
},
{
"path": "profiler/helpers/embed.cpp",
"chars": 2332,
"preview": "#include <stdint.h>\n#include <stdio.h>\n#include <string>\n\n#include \"../../public/common/tracy_lz4hc.hpp\"\n\nstatic void Us"
},
{
"path": "profiler/src/Backend.hpp",
"chars": 665,
"preview": "#ifndef __BACKEND_HPP__\n#define __BACKEND_HPP__\n\n#include <functional>\n#include <stdint.h>\n\n#include \"WindowPosition.hpp"
},
{
"path": "profiler/src/BackendEmscripten.cpp",
"chars": 16080,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <GLES2/"
},
{
"path": "profiler/src/BackendGlfw.cpp",
"chars": 8116,
"preview": "#include <backends/imgui_impl_glfw.h>\n#include <backends/imgui_impl_opengl3.h>\n#include <backends/imgui_impl_opengl3_loa"
},
{
"path": "profiler/src/BackendWayland.cpp",
"chars": 44340,
"preview": "#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <backends/imgui_impl_opengl3.h>\n#include <backends/imgui_impl_open"
},
{
"path": "profiler/src/ConnectionHistory.cpp",
"chars": 2245,
"preview": "#include <assert.h>\n#include <stdint.h>\n#include <stdio.h>\n\n#include \"ConnectionHistory.hpp\"\n\n#include \"../../server/tra"
},
{
"path": "profiler/src/ConnectionHistory.hpp",
"chars": 728,
"preview": "#ifndef __CONNECTIONHISTORY_HPP__\n#define __CONNECTIONHISTORY_HPP__\n\n#include <stdint.h>\n#include <string>\n#include <uno"
},
{
"path": "profiler/src/EmscriptenShim.hpp",
"chars": 792,
"preview": "#ifndef __EMSCRIPTENSHIM_HPP__\n#define __EMSCRIPTENSHIM_HPP__\n\n#if defined __EMSCRIPTEN__ || defined __APPLE__\n\nnamespac"
},
{
"path": "profiler/src/Filters.cpp",
"chars": 1996,
"preview": "#include <inttypes.h>\n#include <stdint.h>\n#include <stdio.h>\n\n#include \"Filters.hpp\"\n\n#include \"profiler/TracyStorage.hp"
},
{
"path": "profiler/src/Filters.hpp",
"chars": 436,
"preview": "#ifndef __FILTERS_HPP__\n#define __FILTERS_HPP__\n\n#include <imgui.h>\n#include <string>\n\nclass Filters\n{\npublic:\n Filte"
},
{
"path": "profiler/src/Fonts.cpp",
"chars": 3520,
"preview": "#include <imgui.h>\n#include <math.h>\n#include <backends/imgui_impl_opengl3.h>\n#include <misc/freetype/imgui_freetype.h>\n"
},
{
"path": "profiler/src/Fonts.hpp",
"chars": 293,
"preview": "#ifndef __FONTS_HPP__\n#define __FONTS_HPP__\n\nstruct ImFont;\n\nstruct FontData\n{\n ImFont* normal;\n ImFont* mono;\n "
},
{
"path": "profiler/src/HttpRequest.cpp",
"chars": 4257,
"preview": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"../public/common/TracySocket.h"
},
{
"path": "profiler/src/HttpRequest.hpp",
"chars": 203,
"preview": "#ifndef __HTTPREQUEST_HPP__\n#define __HTTPREQUEST_HPP__\n\n#include <functional>\n\nvoid HttpRequest( const char* server, co"
},
{
"path": "profiler/src/ImGuiContext.cpp",
"chars": 569,
"preview": "#include <imgui.h>\n#include \"profiler/TracyStorage.hpp\"\n#include \"ImGuiContext.hpp\"\n\nImGuiTracyContext::ImGuiTracyContex"
},
{
"path": "profiler/src/ImGuiContext.hpp",
"chars": 215,
"preview": "#ifndef __IMGUICONTEXT_HPP__\n#define __IMGUICONTEXT_HPP__\n\n#include <string>\n\nclass ImGuiTracyContext\n{\npublic:\n ImGu"
},
{
"path": "profiler/src/IsElevated.cpp",
"chars": 615,
"preview": "#include \"IsElevated.hpp\"\n\n#ifdef _WIN32\n\n#include <windows.h>\n\nbool IsElevated()\n{\n HANDLE token;\n if( OpenProces"
},
{
"path": "profiler/src/IsElevated.hpp",
"chars": 82,
"preview": "#ifndef __ISELEVATED_HPP__\n#define __ISELEVATED_HPP__\n\nbool IsElevated();\n\n#endif\n"
},
{
"path": "profiler/src/ResolvService.cpp",
"chars": 1553,
"preview": "#ifdef _WIN32\n# include <ws2tcpip.h>\n#else\n# ifdef __FreeBSD__\n# include <netinet/in.h>\n# endif\n# include <arpa/i"
},
{
"path": "profiler/src/ResolvService.hpp",
"chars": 715,
"preview": "#ifndef __RESOLVSERVICE_HPP__\n#define __RESOLVSERVICE_HPP__\n\n#include <atomic>\n#include <condition_variable>\n#include <f"
},
{
"path": "profiler/src/RunQueue.cpp",
"chars": 636,
"preview": "#include \"RunQueue.hpp\"\n\nRunQueue::RunQueue()\n : m_mainThread( std::this_thread::get_id() )\n{\n}\n\nvoid RunQueue::Queue"
},
{
"path": "profiler/src/RunQueue.hpp",
"chars": 387,
"preview": "#ifndef __RUNQUEUE_HPP__\n#define __RUNQUEUE_HPP__\n\n#include <functional>\n#include <mutex>\n#include <thread>\n#include <ve"
},
{
"path": "profiler/src/WindowPosition.cpp",
"chars": 975,
"preview": "#include <stdint.h>\n#include <stdio.h>\n\n#include \"WindowPosition.hpp\"\n\n#include \"profiler/TracyStorage.hpp\"\n\n\nWindowPosi"
},
{
"path": "profiler/src/WindowPosition.hpp",
"chars": 254,
"preview": "#ifndef __WINDOWPOSITION_HPP__\n#define __WINDOWPOSITION_HPP__\n\n#include <string>\n\nclass WindowPosition\n{\npublic:\n Win"
},
{
"path": "profiler/src/icon.hpp",
"chars": 2829,
"preview": "// File: 'icon.png' (854 bytes)\n// Exported using binary_to_compressed_c.cpp\nstatic const unsigned int Icon_size = 854;\n"
},
{
"path": "profiler/src/ini.c",
"chars": 6005,
"preview": "/**\n * Copyright (c) 2016 rxi\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of t"
},
{
"path": "profiler/src/ini.h",
"chars": 606,
"preview": "/**\n * Copyright (c) 2016 rxi\n *\n * This library is free software; you can redistribute it and/or modify it\n * under the"
},
{
"path": "profiler/src/llm/system.prompt.md",
"chars": 5962,
"preview": "You're a language model, meant to give exact answers using the tools you have and what you know. The current time is %TI"
},
{
"path": "profiler/src/llm/tools.json",
"chars": 4131,
"preview": "[\n{\n \"type\": \"function\",\n \"function\": {\n \"name\": \"search_wikipedia\",\n \"description\": \"Search the Wikipedia with "
},
{
"path": "profiler/src/main.cpp",
"chars": 59114,
"preview": "#include <algorithm>\n#include <assert.h>\n#include <atomic>\n#include <chrono>\n#include <inttypes.h>\n#define IMGUI_DEFINE_"
},
{
"path": "profiler/src/profiler/IconsFontAwesome6.h",
"chars": 73902,
"preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and"
},
{
"path": "profiler/src/profiler/TracyAchievementData.cpp",
"chars": 13946,
"preview": "#include \"IconsFontAwesome6.h\"\n#include \"TracyAchievements.hpp\"\n#include \"TracyImGui.hpp\"\n#include \"TracySourceContents."
},
{
"path": "profiler/src/profiler/TracyAchievements.cpp",
"chars": 5418,
"preview": "#include <assert.h>\n#include <inttypes.h>\n#include <time.h>\n\n#include \"../ini.h\"\n\n#include \"TracyAchievements.hpp\"\n#incl"
},
{
"path": "profiler/src/profiler/TracyAchievements.hpp",
"chars": 1459,
"preview": "#ifndef __TRACYACHIEVEMENTS_HPP__\n#define __TRACYACHIEVEMENTS_HPP__\n\n#include <stdint.h>\n#include <string>\n#include <vec"
},
{
"path": "profiler/src/profiler/TracyBadVersion.cpp",
"chars": 4250,
"preview": "#include <assert.h>\n\n#include \"imgui.h\"\n#include \"../Fonts.hpp\"\n\n#include \"IconsFontAwesome6.h\"\n#include \"TracyBadVersio"
},
{
"path": "profiler/src/profiler/TracyBadVersion.hpp",
"chars": 617,
"preview": "#ifndef __TRACYBADVERSION_HPP__\n#define __TRACYBADVERSION_HPP__\n\n#include <string>\n\n#include \"../public/common/TracyForc"
},
{
"path": "profiler/src/profiler/TracyBuzzAnim.hpp",
"chars": 706,
"preview": "#ifndef __TRACYBUZZANIM_HPP__\n#define __TRACYBUZZANIM_HPP__\n\n#include <assert.h>\n\nnamespace tracy\n{\n\ntemplate<typename T"
},
{
"path": "profiler/src/profiler/TracyColor.cpp",
"chars": 899,
"preview": "#include <algorithm>\n\n#include \"TracyColor.hpp\"\n\nnamespace tracy\n{\n\nuint32_t GetHsvColor( uint64_t hue, int value )\n{\n "
},
{
"path": "profiler/src/profiler/TracyColor.hpp",
"chars": 1751,
"preview": "#ifndef __TRACYCOLOR_HPP__\n#define __TRACYCOLOR_HPP__\n\n#include <algorithm>\n#include <stdint.h>\n\n#include \"../public/com"
},
{
"path": "profiler/src/profiler/TracyConfig.cpp",
"chars": 6050,
"preview": "#include <stdio.h>\n\n#include \"TracyConfig.hpp\"\n#include \"TracyStorage.hpp\"\n\n#include \"../ini.h\"\n\nnamespace tracy\n{\n\nConf"
},
{
"path": "profiler/src/profiler/TracyConfig.hpp",
"chars": 1532,
"preview": "#ifndef __TRACYCONFIG_HPP__\n#define __TRACYCONFIG_HPP__\n\n#include <string>\n\n#include \"TracyUtility.hpp\"\n\nnamespace tracy"
},
{
"path": "profiler/src/profiler/TracyDecayValue.hpp",
"chars": 843,
"preview": "#ifndef __TRACYDECAYVALUE_HPP__\n#define __TRACYDECAYVALUE_HPP__\n\n#include \"../public/common/TracyForceInline.hpp\"\n\nnames"
},
{
"path": "profiler/src/profiler/TracyEmbed.cpp",
"chars": 324,
"preview": "#include \"TracyEmbed.hpp\"\n#include \"../public/common/tracy_lz4.hpp\"\n\nEmbedData::EmbedData( size_t size, size_t lz4Size, "
},
{
"path": "profiler/src/profiler/TracyEmbed.hpp",
"chars": 469,
"preview": "#pragma once\n\n#include <memory>\n#include <stddef.h>\n#include <stdint.h>\n\n#define Unembed( name ) std::make_shared<EmbedD"
},
{
"path": "profiler/src/profiler/TracyEventDebug.cpp",
"chars": 14008,
"preview": "#include <assert.h>\n#include <stdio.h>\n#include <inttypes.h>\n\n#include \"TracyEventDebug.hpp\"\n#include \"../public/common/"
},
{
"path": "profiler/src/profiler/TracyEventDebug.hpp",
"chars": 151,
"preview": "#ifndef __TRACYEVENTDEBUG_HPP__\n#define __TRACYEVENTDEBUG_HPP__\n\nnamespace tracy\n{\nstruct QueueItem;\nvoid EventDebug( co"
},
{
"path": "profiler/src/profiler/TracyFileselector.cpp",
"chars": 2909,
"preview": "#include \"TracyFileselector.hpp\"\n\n#ifndef TRACY_NO_FILESELECTOR\n# ifdef __EMSCRIPTEN__\n# include <emscripten.h>\n# e"
},
{
"path": "profiler/src/profiler/TracyFileselector.hpp",
"chars": 389,
"preview": "#ifndef __TRACYFILESELECTOR_HPP__\n#define __TRACYFILESELECTOR_HPP__\n\n#include <functional>\n\nnamespace tracy::Fileselecto"
},
{
"path": "profiler/src/profiler/TracyFilesystem.cpp",
"chars": 503,
"preview": "#include \"TracyFilesystem.hpp\"\n#include \"TracyView.hpp\"\n\nnamespace tracy\n{\n\nbool SourceFileValid( const char* fn, uint64"
},
{
"path": "profiler/src/profiler/TracyFilesystem.hpp",
"chars": 407,
"preview": "#ifndef __TRACYFILESYSTEM_HPP__\n#define __TRACYFILESYSTEM_HPP__\n\n#include <stdint.h>\n#include <sys/stat.h>\n\nnamespace tr"
},
{
"path": "profiler/src/profiler/TracyImGui.cpp",
"chars": 7060,
"preview": "#include <assert.h>\n#include <algorithm>\n#include <string>\n\n#include \"TracyPrint.hpp\"\n#include \"TracyImGui.hpp\"\n\nextern "
},
{
"path": "profiler/src/profiler/TracyImGui.hpp",
"chars": 11686,
"preview": "#ifndef __TRACYIMGUI_HPP__\n#define __TRACYIMGUI_HPP__\n\n#ifdef _MSC_VER\n# pragma warning( disable: 4244 ) // conversion"
},
{
"path": "profiler/src/profiler/TracyLlm.cpp",
"chars": 42037,
"preview": "#include <array>\n#include <cmath>\n#include <curl/curl.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"TracyConfig."
},
{
"path": "profiler/src/profiler/TracyLlm.hpp",
"chars": 2796,
"preview": "#ifndef __TRACYLLM_HPP__\n#define __TRACYLLM_HPP__\n\n#include <atomic>\n#include <condition_variable>\n#include <functional>"
},
{
"path": "profiler/src/profiler/TracyLlmApi.cpp",
"chars": 10671,
"preview": "#include <assert.h>\n#include <curl/curl.h>\n#include <nlohmann/json.hpp>\n#include <string>\n\n#include \"TracyLlmApi.hpp\"\n\nn"
},
{
"path": "profiler/src/profiler/TracyLlmApi.hpp",
"chars": 1424,
"preview": "#ifndef __TRACYLLMAPI_HPP__\n#define __TRACYLLMAPI_HPP__\n\n#include <functional>\n#include <nlohmann/json.hpp>\n#include <st"
},
{
"path": "profiler/src/profiler/TracyLlmChat.cpp",
"chars": 17280,
"preview": "#include <array>\n#include <assert.h>\n#include <md4c.h>\n#include <nlohmann/json.hpp>\n#include <string>\n\n#include \"TracyIm"
},
{
"path": "profiler/src/profiler/TracyLlmChat.hpp",
"chars": 1111,
"preview": "#ifndef __TRACYLLMCHAT_HPP__\n#define __TRACYLLMCHAT_HPP__\n\n#include <nlohmann/json.hpp>\n\n#include \"TracyMarkdown.hpp\"\n\nn"
},
{
"path": "profiler/src/profiler/TracyLlmEmbeddings.cpp",
"chars": 2986,
"preview": "#ifdef _WIN32\n# include <windows.h>\n# include <io.h>\n#else\n# include <unistd.h>\n#endif\n\n#include \"TracyLlmEmbeddings."
},
{
"path": "profiler/src/profiler/TracyLlmEmbeddings.hpp",
"chars": 814,
"preview": "#ifndef __TRACYLLMEMBEDDINGS_HPP__\n#define __TRACYLLMEMBEDDINGS_HPP__\n\n#include <stddef.h>\n#include <usearch/index_dense"
},
{
"path": "profiler/src/profiler/TracyLlmTools.cpp",
"chars": 32677,
"preview": "#include <algorithm>\n#include <curl/curl.h>\n#include <nlohmann/json.hpp>\n#include <libbase64.h>\n#include <pugixml.hpp>\n#"
},
{
"path": "profiler/src/profiler/TracyLlmTools.hpp",
"chars": 2646,
"preview": "#ifndef __TRACYLLMTOOLS_HPP__\n#define __TRACYLLMTOOLS_HPP__\n\n#include <nlohmann/json.hpp>\n#include <memory>\n#include <mu"
},
{
"path": "profiler/src/profiler/TracyLockHelpers.hpp",
"chars": 541,
"preview": "#ifndef __TRACYLOCKHELPERS_HPP__\n#define __TRACYLOCKHELPERS_HPP__\n\n#include <stdint.h>\n\n#include \"../public/common/Tracy"
},
{
"path": "profiler/src/profiler/TracyManualData.cpp",
"chars": 3652,
"preview": "#include \"TracyEmbed.hpp\"\n#include \"TracyManualData.hpp\"\n\n#define XXH_INLINE_ALL\n#include \"tracy_xxhash.h\"\n\n#include \"da"
},
{
"path": "profiler/src/profiler/TracyManualData.hpp",
"chars": 827,
"preview": "#ifndef __TRACYMANUALDATA_HPP__\n#define __TRACYMANUALDATA_HPP__\n\n#include <stdint.h>\n#include <string>\n#include <string_"
},
{
"path": "profiler/src/profiler/TracyMarkdown.cpp",
"chars": 13790,
"preview": "#include <array>\n#include <md4c.h>\n#include <string>\n#include <string.h>\n#include <vector>\n\n#include \"TracyFilesystem.hp"
},
{
"path": "profiler/src/profiler/TracyMarkdown.hpp",
"chars": 371,
"preview": "#ifndef __TRACYMARKDOWN_HPP__\n#define __TRACYMARKDOWN_HPP__\n\n#include <stddef.h>\n\nstruct MD_PARSER;\n\nnamespace tracy\n{\n\n"
},
{
"path": "profiler/src/profiler/TracyMicroArchitecture.cpp",
"chars": 10378174,
"preview": "#include \"TracyMicroArchitecture.hpp\"\n\nnamespace tracy\n{\n\nconst char* MicroArchitectureList[]={\n\"CON\",\n\"WOL\",\n\"NHM\",\n\"WS"
},
{
"path": "profiler/src/profiler/TracyMicroArchitecture.hpp",
"chars": 716,
"preview": "#include <stdint.h>\n\nnamespace tracy\n{\n\nstruct AsmDesc\n{\n uint8_t type;\n uint16_t width;\n};\n\nstruct AsmVar\n{\n i"
},
{
"path": "profiler/src/profiler/TracyMouse.cpp",
"chars": 2404,
"preview": "#include <cmath>\n\n#include \"TracyMouse.hpp\"\n\n#include \"imgui_internal.h\"\n\nnamespace tracy\n{\n\nstatic constexpr int MouseB"
},
{
"path": "profiler/src/profiler/TracyMouse.hpp",
"chars": 427,
"preview": "#ifndef __TRACYMOUSE_HPP__\n#define __TRACYMOUSE_HPP__\n\n#include \"imgui.h\"\n\nnamespace tracy\n{\n\nvoid MouseFrame();\n\nbool I"
},
{
"path": "profiler/src/profiler/TracyProtoHistory.cpp",
"chars": 1047,
"preview": "#include \"TracyFileHeader.hpp\"\n#include \"TracyProtoHistory.hpp\"\n\nnamespace tracy\n{\n\nconstexpr ProtocolHistory_t Protocol"
},
{
"path": "profiler/src/profiler/TracyProtoHistory.hpp",
"chars": 265,
"preview": "#ifndef __TRACYPROTOHISTORY_HPP__\n#define __TRACYPROTOHISTORY_HPP__\n\n#include <stdint.h>\n\nnamespace tracy\n{\n\nstruct Prot"
},
{
"path": "profiler/src/profiler/TracySourceContents.cpp",
"chars": 2598,
"preview": "#include \"TracySourceContents.hpp\"\n#include \"TracyView.hpp\"\n#include \"TracyWorker.hpp\"\n\nnamespace tracy\n{\n\nSourceContent"
},
{
"path": "profiler/src/profiler/TracySourceContents.hpp",
"chars": 1116,
"preview": "#ifndef __TRACYSOURCECONTENTS_HPP__\n#define __TRACYSOURCECONTENTS_HPP__\n\n#include <stdint.h>\n#include <stddef.h>\n#includ"
},
{
"path": "profiler/src/profiler/TracySourceTokenizer.cpp",
"chars": 18001,
"preview": "#include \"tracy_robin_hood.h\"\n#include \"TracyCharUtil.hpp\"\n#include \"TracySourceTokenizer.hpp\"\n\nnamespace tracy\n{\n\nnames"
},
{
"path": "profiler/src/profiler/TracySourceTokenizer.hpp",
"chars": 1389,
"preview": "#ifndef __TRACYSOURCETOKENIZER_HPP__\n#define __TRACYSOURCETOKENIZER_HPP__\n\n#include <stdint.h>\n#include <vector>\n\nnamesp"
},
{
"path": "profiler/src/profiler/TracySourceView.cpp",
"chars": 234967,
"preview": "#include <ctype.h>\n#include <inttypes.h>\n#include <nlohmann/json.hpp>\n#include <sstream>\n#include <stdio.h>\n\n#include <c"
},
{
"path": "profiler/src/profiler/TracySourceView.hpp",
"chars": 8971,
"preview": "#ifndef __TRACYSOURCEVIEW_HPP__\n#define __TRACYSOURCEVIEW_HPP__\n\n#include <limits>\n#include <string>\n#include <tuple>\n#i"
},
{
"path": "profiler/src/profiler/TracyStorage.cpp",
"chars": 5329,
"preview": "#ifdef __MINGW32__\n# define __STDC_FORMAT_MACROS\n#endif\n#include <assert.h>\n#include <inttypes.h>\n#include <string>\n#in"
},
{
"path": "profiler/src/profiler/TracyStorage.hpp",
"chars": 296,
"preview": "#ifndef __TRACYSTORAGE_HPP__\n#define __TRACYSTORAGE_HPP__\n\n#include <stdint.h>\n\nnamespace tracy\n{\n\nconst char* GetSavePa"
},
{
"path": "profiler/src/profiler/TracyTexture.cpp",
"chars": 5284,
"preview": "#include <inttypes.h>\n#include <string.h>\n\n#ifdef __EMSCRIPTEN__\n# include <emscripten/html5.h>\n# include <GLES2/gl2.h"
},
{
"path": "profiler/src/profiler/TracyTexture.hpp",
"chars": 525,
"preview": "#ifndef __TRACYTEXTURE_HPP__\n#define __TRACYTEXTURE_HPP__\n\n#include <functional>\n#include <imgui.h>\n\nnamespace tracy\n{\n\n"
},
{
"path": "profiler/src/profiler/TracyTimelineContext.hpp",
"chars": 307,
"preview": "#ifndef __TRACYTIMELINECONTEXT_HPP__\n#define __TRACYTIMELINECONTEXT_HPP__\n\n#include <stdint.h>\n\n#include \"imgui.h\"\n\nname"
},
{
"path": "profiler/src/profiler/TracyTimelineController.cpp",
"chars": 4932,
"preview": "#include <algorithm>\n#include <thread>\n\n#include \"TracyTimelineItem.hpp\"\n#include \"TracyTimelineContext.hpp\"\n#include \"T"
},
{
"path": "profiler/src/profiler/TracyTimelineController.hpp",
"chars": 1705,
"preview": "#ifndef __TRACYTIMELINECONTROLLER_HPP__\n#define __TRACYTIMELINECONTROLLER_HPP__\n\n#include <assert.h>\n#include <optional>"
},
{
"path": "profiler/src/profiler/TracyTimelineDraw.hpp",
"chars": 1435,
"preview": "#ifndef __TRACYTIMELINEDRAW_HPP__\n#define __TRACYTIMELINEDRAW_HPP__\n\n#include <stdint.h>\n\n#include \"TracyEvent.hpp\"\n#inc"
},
{
"path": "profiler/src/profiler/TracyTimelineItem.cpp",
"chars": 4612,
"preview": "#include <algorithm>\n\n#include \"TracyImGui.hpp\"\n#include \"TracyMouse.hpp\"\n#include \"TracyTimelineContext.hpp\"\n#include \""
},
{
"path": "profiler/src/profiler/TracyTimelineItem.hpp",
"chars": 2095,
"preview": "#ifndef __TRACYTIMELINEITEM_HPP__\n#define __TRACYTIMELINEITEM_HPP__\n\n#include <assert.h>\n#include <stdint.h>\n\n#include \""
},
{
"path": "profiler/src/profiler/TracyTimelineItemCpuData.cpp",
"chars": 7952,
"preview": "#include \"TracyImGui.hpp\"\n#include \"TracyPrint.hpp\"\n#include \"TracyTimelineContext.hpp\"\n#include \"TracyTimelineItemCpuDa"
},
{
"path": "profiler/src/profiler/TracyTimelineItemCpuData.hpp",
"chars": 1358,
"preview": "#ifndef __TRACYTIMELINEITEMCPUDATA_HPP__\n#define __TRACYTIMELINEITEMCPUDATA_HPP__\n\n#include \"TracyEvent.hpp\"\n#include \"T"
},
{
"path": "profiler/src/profiler/TracyTimelineItemGpu.cpp",
"chars": 6036,
"preview": "#include \"TracyImGui.hpp\"\n#include \"TracyPopcnt.hpp\"\n#include \"TracyPrint.hpp\"\n#include \"TracyTimelineContext.hpp\"\n#incl"
},
{
"path": "profiler/src/profiler/TracyTimelineItemGpu.hpp",
"chars": 1004,
"preview": "#ifndef __TRACYTIMELINEITEMGPU_HPP__\n#define __TRACYTIMELINEITEMGPU_HPP__\n\n#include \"TracyEvent.hpp\"\n#include \"TracyTime"
},
{
"path": "profiler/src/profiler/TracyTimelineItemPlot.cpp",
"chars": 8114,
"preview": "#include \"TracyImGui.hpp\"\n#include \"TracyPrint.hpp\"\n#include \"TracyTimelineContext.hpp\"\n#include \"TracyTimelineItemPlot."
},
{
"path": "profiler/src/profiler/TracyTimelineItemPlot.hpp",
"chars": 1175,
"preview": "#ifndef __TRACYTIMELINEITEMPLOT_HPP__\n#define __TRACYTIMELINEITEMPLOT_HPP__\n\n#include \"TracyEvent.hpp\"\n#include \"TracyTi"
}
]
// ... and 191 more files (download for full content)
About this extraction
This page contains the full source code of the wolfpld/tracy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 391 files (16.2 MB), approximately 4.0M tokens, and a symbol index with 3017 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.