Preços

Visão geral do projeto

Arquivos-fonte

Esta página foi gerada com base nos seguintes arquivos-fonte:

O microprofile é um profiler de CPU/GPU embutível que oferece visualizadores tanto in-app quanto em HTML. Trata-se de um fork do projeto original de Jonas Meyer, que divergiu significativamente ao longo do tempo devido a diferenças nas prioridades de desenvolvimento. Atualmente, o uso da versão upstream é recomendado, pois este fork não recebe mais manutenção ativa (README.md:1-8).

A biblioteca foi projetada para ter baixa sobrecarga, permitindo sua utilização mesmo em builds de produção. Ela é enviada no cliente e editor Roblox para todas as plataformas, compilada com o profiler desativado por padrão, mas funcional nos modos on-screen ou web-server dependendo da plataforma (README.md:50-52).

O projeto divergiu do upstream desde 2015, quando este ainda utilizava Bitbucket/Mercurial. As diferenças nas prioridades de funcionalidades levaram a uma bifurcação permanente, tornando este fork uma implementação independente com características próprias (README.md:26-29).

Funcionalidades principais

Regiões hierárquicas e medição de tempo

O microprofile oferece regiões hierárquicas para medir seções específicas do código, permitindo uma análise granular do desempenho. Labels podem ser adicionados na forma de strings para fornecer informações extras às regiões, incluindo suporte a strings dinâmicas com formato printf-style, uma funcionalidade exclusiva deste fork (README.md:10-18).

FuncionalidadeDescriçãoDisponibilidade
Regiões hierárquicasTiming de seções de código aninhadasCore
Labels dinâmicasStrings com formato printf-styleFork exclusivo
Seleção automática de corBaseada em hash do nome do escopo (-1 como valor)Fork exclusivo
Escopos unificados CPU/GPUMicroProfileEnter/Leave detectam tipo automaticamenteFork exclusivo

Suporte a GPU e sincronização

O sistema suporta regiões de GPU para D3D11, D3D12, OpenGL e Vulkan, com sincronização de timestamp GPU. A implementação de GPU timing foi completamente refeita neste fork, oferecendo suporte a GL no OSX, além de Vulkan, D3D12 e D3D11 em outras plataformas (README.md:36-50).

Os backends de GPU podem ser escolhidos dinamicamente: é possível compilar suporte para D3D11, D3D12, OpenGL e Vulkan (ou qualquer combinação deles) e inicializar apenas um em algum momento posterior. Escopos CPU/GPU são unificados, onde MicroProfileEnter/MicroProfileLeave determinam automaticamente se o grupo é CPU ou GPU (README.md:36-50).

Visualização e contadores

O sistema oferece contadores para medir valores globais que mudam ao longo do tempo, além de capacidade de grafar qualquer região ou contador em tempo real. A visualização pode ser feita através de UI in-game, navegador web (servidor embutido) ou arquivo HTML (README.md:10-18).

A UI on-screen suporta dois modos de exibição:

  • Modo completo: Exibe todas as informações de profiling
  • Modo Frame: Exibe apenas a barra de frames, permitindo detecção de spikes sem obstruir a gameplay

A nomenclatura é unificada entre UI on-screen e web UI, garantindo que as mesmas informações sejam exibidas consistentemente em ambas com os mesmos nomes (README.md:36-50).

Performance e robustez

Este fork inclui melhorias substanciais de performance no web server, que roda em uma thread dedicada, tornando a criação de HTML dump várias vezes mais rápida. Diversas correções de robustez foram implementadas para casos extremos, condições de overflow e problemas de GPU timing, tornando a biblioteca segura para uso em builds de produção (README.md:36-50).

A sobrecarga de memória do profiler é reduzida através de alocação preguiçosa (lazy allocation) da maioria dos buffers grandes quando nenhum grupo está sendo capturado (README.md:36-50).

Suporte de plataformas

Plataformas oficialmente suportadas

O microprofile é conhecido por funcionar nas seguintes plataformas:

PlataformaStatusNotas
Windows XP+✅ SuportadoInclui versões modernas
Linux✅ SuportadoDistribuições principais
OSX✅ SuportadoCom visualização de contexto via dtrace
iOS✅ SuportadoEm produção no Roblox
Android✅ SuportadoEm produção no Roblox
Xbox One✅ SuportadoConsole Microsoft

A adaptação para outras plataformas é considerada fácil, e pull requests são bem-vindos para expandir o suporte (README.md:20-24).

Implementação em produção

A biblioteca é utilizada em ambiente de produção no cliente e editor Roblox para todas as plataformas. O profiler é compilado no código, mas não captura dados por padrão, funcionando nos modos on-screen ou web-server dependendo da plataforma (README.md:50-52).

Diferenças em relação ao upstream

Funcionalidades não backportadas do upstream

O upstream possui algumas funcionalidades que não foram trazidas para este fork (até outubro de 2018):

  • Conexão live baseada em WebSocket que exibe gráficos e permite iniciar captura de frames
  • Timelines úteis para profiling de código de longa duração como carregamento de níveis
  • Suporte a mais de 48 categorias (README.md:30-35)

Funcionalidades exclusivas do fork

Este fork oferece várias funcionalidades não presentes no upstream:

FuncionalidadeDescrição
UI On-screenSuporte usando OpenGL ou qualquer backend de renderização (upstream removeu em 2017)
Modo FrameExibe apenas barra de frames para detecção de spikes
Nomenclatura unificadaMesma informação e nomes entre UI on-screen e web UI
Strings dinâmicasLabels com formato printf-style dentro de escopos
Cores automáticasSeleção baseada em hash do nome do escopo
Escopos unificadosCPU/GPU determinados automaticamente
GPU timing refeitoSuporte a GL/OSX, Vulkan, D3D12, D3D11
Backends dinâmicosGPU backends escolhidos em runtime
Web server otimizadoThread dedicada, HTML dump mais rápido
Correções de robustezSeguro para builds de produção
Alocação preguiçosaRedução de overhead de memória

(README.md:36-49)

Arquitetura do sistema

Visão geral dos componentes

正在加载图表渲染器...

Pontos-chave da arquitetura:

  1. Núcleo unificado: Os módulos CPU e GPU compartilham a mesma API de entrada (MicroProfileEnter/MicroProfileLeave), que determina automaticamente o tipo de escopo (README.md:36-50)

  2. Backends de GPU intercambiáveis: O sistema permite compilar múltiplos backends e selecionar um dinamicamente em runtime, oferecendo flexibilidade para diferentes plataformas (README.md:36-50)

  3. Múltiplos modos de visualização: Dados podem ser visualizados via UI on-screen, web server embutido ou exportados como HTML, mantendo nomenclatura consistente (README.md:36-50)

  4. Contadores integrados: Valores globais que mudam ao longo do tempo podem ser grafados em tempo real junto com regiões (README.md:10-18)

  5. Baixo overhead: Alocação preguiçosa de buffers e otimizações de performance permitem uso em produção (README.md:36-50)

Fluxo de dados de profiling

正在加载图表渲染器...

Explicação do fluxo de dados:

  1. Entrada unificada: A aplicação chama MicroProfileEnter/MicroProfileLeave sem precisar especificar se é CPU ou GPU - o sistema determina automaticamente baseado no grupo (README.md:36-50)

  2. Sincronização GPU: Para escopos GPU, o backend correspondente (D3D11/12, GL, Vulkan) é consultado para timestamps sincronizados (README.md:36-50)

  3. Armazenamento hierárquico: Dados CPU são organizados em estrutura hierárquica, permitindo análise aninhada de regiões (README.md:10-18)

  4. Visualização flexível: O mesmo conjunto de dados pode ser visualizado em tempo real via UI on-screen ou web server, ou exportado para análise posterior (README.md:10-18)

  5. Performance otimizada: Web server roda em thread dedicada, e HTML dump é gerado de forma otimizada para minimizar impacto (README.md:36-50)

Módulos principais

Módulo de Timing CPU

Responsabilidades:

  • Medir tempo de execução de regiões de código
  • Manter estrutura hierárquica de escopos aninhados
  • Suportar labels dinâmicas com formato printf-style

APIs principais:

  • MicroProfileEnter - Entra em uma região de profiling
  • MicroProfileLeave - Sai de uma região de profiling
  • Funções de label para adicionar informações extras

Características:

  • Seleção automática de cores baseada em hash do nome
  • Baixo overhead para uso em produção
  • Buffers alocados preguiçosamente quando necessário

Nota: Detalhes específicos de implementação como estruturas de dados internas e assinaturas exatas de funções requerem análise dos arquivos de código-fonte.

Módulo de Timing GPU

Responsabilidades:

  • Sincronizar timestamps entre CPU e GPU
  • Suportar múltiplos backends gráficos
  • Gerenciar seleção dinâmica de backend

Backends suportados:

  • D3D11 - Direct3D 11
  • D3D12 - Direct3D 12
  • OpenGL - Incluindo suporte no OSX
  • Vulkan - API moderna multi-plataforma

Características exclusivas do fork:

  • Implementação completamente refeita
  • Backends selecionáveis em runtime
  • Melhor sincronização de tempo
  • Correções para casos extremos e overflow

Módulo de Visualização

Responsabilidades:

  • Renderizar UI on-screen com OpenGL ou backend genérico
  • Servir dados via web server embutido
  • Exportar dados para arquivos HTML

Modos de operação:

  • Modo completo: Exibe todas as informações de profiling
  • Modo Frame: Exibe apenas barra de frames para detecção de spikes

Características:

  • Nomenclatura unificada entre UI on-screen e web UI
  • Web server em thread dedicada para performance
  • Geração de HTML dump otimizada

Módulo de Contadores

Responsabilidades:

  • Rastrear valores globais que mudam ao longo do tempo
  • Permitir grafar contadores em tempo real
  • Integrar com visualização de regiões

Características:

  • Podem ser grafados junto com regiões
  • Úteis para monitorar métricas de sistema
  • Baixo overhead de coleta

Capacidades quantificadas

MétricaValorFonte
Plataformas suportadas6+Windows, Linux, OSX, iOS, Android, Xbox One
Backends GPU4D3D11, D3D12, OpenGL, Vulkan
Modos de visualização3UI on-screen, Web server, HTML dump
Categorias máximas48Limitação conhecida vs upstream
Uso em produçãoRobloxCliente e editor para todas as plataformas

Cenários de uso

Desenvolvimento de jogos

O microprofile é ideal para profiling de jogos devido à sua UI on-screen que não obstrui a gameplay no modo Frame. O suporte a GPU timing com sincronização permite analisar tanto CPU quanto GPU em conjunto, identificando gargalos de renderização.

Aplicações gráficas intensivas

Com suporte a múltiplos backends GPU (D3D11/12, OpenGL, Vulkan), a biblioteca pode ser usada em aplicações gráficas que precisam otimizar performance de renderização. A seleção dinâmica de backend permite compilar suporte para múltiplas APIs e escolher em runtime.

Análise de performance em produção

As correções de robustez e alocação preguiçosa tornam a biblioteca segura para uso em builds de produção. O fato de ser usada no Roblox para todos os usuários demonstra sua estabilidade em escala.

Desenvolvimento multi-plataforma

Com suporte a Windows, Linux, OSX, iOS, Android e Xbox One, o microprofile permite profiling consistente across diferentes plataformas, facilitando a identificação de problemas específicos de cada ambiente.

Roteiro de leitura do relatório

正在加载图表渲染器...

Recomendação de leitura:

  1. Esta página: Fornece contexto geral e visão arquitetural
  2. Funcionalidades: Aprofunda em cada feature e suas capacidades
  3. Arquitetura: Detalha a estrutura modular do sistema
  4. Fluxo de Dados: Explica como dados de profiling fluem pelo sistema
  5. API Design: Documenta interfaces para integração
  6. Plataformas: Guia de suporte e adaptação para novas plataformas