Um profiler é uma ferramenta usada para medir e analisar o desempenho de um programa de software.
Ele ajuda os desenvolvedores a identificar gargalos, otimizar o uso de recursos e melhorar a eficiência do código.
O Tracy Profiler é um exemplo de profiler que se destaca por ser uma ferramenta de análise de desempenho em tempo real para aplicativos escritos em C++.
Em resumo, um profiler como o Tracy é uma ferramenta essencial para qualquer desenvolvedor que deseja garantir que seu software funcione de maneira eficiente e sem problemas de desempenho.
O Tracy Profiler é uma ferramenta sofisticada de profiling desenvolvida com uma combinação de várias tecnologias e bibliotecas que suportam sua funcionalidade e interface gráfica.
As principais ferramentas e bibliotecas utilizadas no desenvolvimento do Tracy Profiler são:
O desenvolvimento do Tracy Profiler envolve a combinação dessas ferramentas para criar uma aplicação que é ao mesmo tempo poderosa e eficiente.
A integração de Dear ImGui e OpenGL permite uma interface gráfica fluida e responsiva, enquanto bibliotecas como GLFW e Capstone fornecem suporte adicional para a funcionalidade avançada de profiling.
O uso de C++ e bibliotecas de compressão como miniz garante que o Tracy seja capaz de lidar com grandes volumes de dados de desempenho de maneira eficiente.
Essas ferramentas e bibliotecas trabalham em conjunto para fazer do Tracy Profiler uma ferramenta robusta e eficaz para desenvolvedores que precisam analisar e otimizar o desempenho de seus aplicativos.
A instalação no Windows consiste em
.7z
;Tracy.exe
Caso queira fazer o download por aqui mesmo, basta clicar no botão abaixo:
De acordo com a data de publicação desse artigo, a versão mais recente é a
0.10
.
Em sistemas tipo Unix: macOS, FreeBSD e GNU/Linux você precisará antes de dependências tanto em tempo de execução quanto em tempo de compilação.
Utilize o Gerenciador de Pacotes do seu sistema operacional, exemplos: Brew, APT, Pacman, pkg, emerge, …
Exemplo no Ubuntu usando o APT:
Pesquise esses nomes de pacotes para seu sistema!
sudo apt install build-essential libdbus-1-dev libfreetype-dev libtbb-dev libglfw3-dev
Para Wayland, adicione:
sudo apt install libxkbcommon-dev libwayland-dev libglvnd-dev
.
Você precisa também do Capstone instalado.
Você pode tentar os pacotes dos repositórios do seu sistema, mas geralmente esses pacotes(salvo o Gentoo e Ports que compilam do código-fonte) estão com versões defasadas ou quebradas, e a maioria tem problemas ao executar o binário.
Logo, é recomendado remover esses pacotes caso estejam instalados e compilar o Capstone do código-fonte pra não ter problemas.
Então, para usar o pacote correto, é necessário remover, caso já tenha instalado:
sudo apt remove libcapstone-dev --purge
# Ou
sudo apt remove libcapstone3 --purge
# Para não correr nenhum risco, rode também
sudo apt autoremove
sudo apt autoclean
git clone https://github.com/capstone-engine/capstone
git checkout 5.0.1
./make.sh
sudo ./make.sh install
Em seguida, adicione o diretório onde você baixou o capstone à variável de ambiente $PKG_CONFIG_PATH
, exemplo:
echo 'export PKG_CONFIG_PATH="/caminho/para/o/capstone"' >> ~/.bashrc
exec $SHELL
Agora chegou a hora mais esperada! Rode os comandos na ordem:
git clone https://github.com/wolfpld/tracy
cd tracy
git checkout v0.10
cd profiler/build/unix/
make LEGACY=1 # Para X11 ou só 'make' para Wayland
Se não usar a flag
LEGACY=1
em X11 o binário irá abortar a operação após execução. Outra coisa, se nçao fizer checkout na tag(git checkout v0.10
), o diretóriobuild
não estará disponível.
Executando:
./Tracy-release
Instalar:
sudo install -v Tracy-release /usr/local/bin/tracy-profiler
Para utilizar o Tracy não é tão simples para iniciantes, mas há ajudas, manuais, PDFs, … para lhe auxiliar!
tracy-profiler
Tracy Profiler rodando! Clique na imagem para abrir numa nova aba para ver melhor.
help
:tracy-profiler --help
wget -q https://github.com/wolfpld/tracy/releases/latest/download/tracy.pdf && xdg-open tracy.pdf
Se você só clonar e compilar de forma tradicional com CMake ou Meson, isso só instala a biblioteca estática com CMake e a dinâmica com Meson, exemplo:
CMake
git clone https://github.com/wolfpld/tracy
cd tracy
cmake -B build .
cd build && make
sudo make install
Meson
git clone https://github.com/wolfpld/tracy
cd tracy
meson build
ninja
Assim você poderá usar a biblioteca em seus código fonte para aplicações específicas:
# include <tracy/Tracy.hpp>
E usar diretivas e flags específicas.
Caso queira saber os locais de instalação:
[100%] Built target TracyClient
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib64/libTracyClient.a
-- Installing: /usr/local/include/tracy/TracyC.h
-- Installing: /usr/local/include/tracy/Tracy.hpp
-- Installing: /usr/local/include/tracy/TracyD3D11.hpp
-- Installing: /usr/local/include/tracy/TracyD3D12.hpp
-- Installing: /usr/local/include/tracy/TracyLua.hpp
-- Installing: /usr/local/include/tracy/TracyOpenCL.hpp
-- Installing: /usr/local/include/tracy/TracyOpenGL.hpp
-- Installing: /usr/local/include/tracy/TracyVulkan.hpp
-- Installing: /usr/local/include/client/tracy_concurrentqueue.h
-- Installing: /usr/local/include/client/tracy_rpmalloc.hpp
-- Installing: /usr/local/include/client/tracy_SPSCQueue.h
-- Installing: /usr/local/include/client/TracyArmCpuTable.hpp
-- Installing: /usr/local/include/client/TracyCallstack.h
-- Installing: /usr/local/include/client/TracyCallstack.hpp
-- Installing: /usr/local/include/client/TracyCpuid.hpp
-- Installing: /usr/local/include/client/TracyDebug.hpp
-- Installing: /usr/local/include/client/TracyDxt1.hpp
-- Installing: /usr/local/include/client/TracyFastVector.hpp
-- Installing: /usr/local/include/client/TracyLock.hpp
-- Installing: /usr/local/include/client/TracyProfiler.hpp
-- Installing: /usr/local/include/client/TracyRingBuffer.hpp
-- Installing: /usr/local/include/client/TracyScoped.hpp
-- Installing: /usr/local/include/client/TracyStringHelpers.hpp
-- Installing: /usr/local/include/client/TracySysPower.hpp
-- Installing: /usr/local/include/client/TracySysTime.hpp
-- Installing: /usr/local/include/client/TracySysTrace.hpp
-- Installing: /usr/local/include/client/TracyThread.hpp
-- Installing: /usr/local/include/common/tracy_lz4.hpp
-- Installing: /usr/local/include/common/tracy_lz4hc.hpp
-- Installing: /usr/local/include/common/TracyAlign.hpp
-- Installing: /usr/local/include/common/TracyAlloc.hpp
-- Installing: /usr/local/include/common/TracyApi.h
-- Installing: /usr/local/include/common/TracyColor.hpp
-- Installing: /usr/local/include/common/TracyForceInline.hpp
-- Installing: /usr/local/include/common/TracyMutex.hpp
-- Installing: /usr/local/include/common/TracyProtocol.hpp
-- Installing: /usr/local/include/common/TracyQueue.hpp
-- Installing: /usr/local/include/common/TracySocket.hpp
-- Installing: /usr/local/include/common/TracyStackFrames.hpp
-- Installing: /usr/local/include/common/TracySystem.hpp
-- Installing: /usr/local/include/common/TracyUwp.hpp
-- Installing: /usr/local/include/common/TracyYield.hpp
-- Installing: /usr/local/share/Tracy/TracyTargets.cmake
-- Installing: /usr/local/share/Tracy/TracyTargets-noconfig.cmake
-- Installing: /usr/local/share/Tracy/TracyConfig.cmake