O MicroProfiler é uma ferramenta de otimização disponível no Roblox Studio e no Roblox Client que fornece informações detalhadas de tempo para Processos do Programador de Tarefas chamados Tags. Para uma lista completa dessas Tags de processo, consulte a Tabela de Tags. Para um guia sobre como usar efetivamente o MicroProfiler para otimizar sua experiência, consulte o Tutorial do MicroProfiler.
Usando o MicroProfiler
Para abrir a interface do MicroProfiler, pressione CtrlAltF6 (⌘⌥F6 ) no Studio ou no cliente. Quando aberto, uma barra de menu é visível na parte superior da verdo jogo. Debaixo dela, um gráfico de barra móvel mostra o tempo usado em cada quadro do Programador de Tarefas. Os quadros fluem para a esquerda, com os quadros mais recentes à direita.
As barras indicam o tempo de processamento de cada quadro:
- Barras laranja indicam quadros "padrão" onde o tempo de Jobs excede o tempo de Render .
- Barras azuis indicam quadros onde o tempo de Render excede o tempo de Jobs . Passe o mouse sobre um desses quadros e você poderá ver um valor positivo para Waiting for Rendering Thread . Um grande número desses quadros indica um gargalo de renderização.
As barras geralmente devem estar no meio do gráfico, mas você pode ver os picos das barras ou aumentar o valor. Picos indicam que mais tempo foi gasto para realizar algum processo do Programador de Tarefas, geralmente devido a uma carga de trabalho aumentada. Por instância, criar muitas peças móveis coloca mais trabalho na simulação de física e, portanto, mais tempo é usado para processar o movimento e os contatos das peças. A imagem a seguir mostra um exemplo de um pico:
Para pausar a gravação de quadros, pressione CtrlP (⌘P ) ou clique em Pausar ao longo da barra superior. Enquanto estiver em pausa, uma linha do tempo aparecerá na visualização do jogo e você poderá navegar pelos quadros clicando ou arrastando o gráfico. O zoom deslizante na linha do tempo. Rótulos coloridos descrevem diferentes tarefas sendo realizadas; rótulos que aparecem diretamente abaixo de outra etiqueta indicam que uma tarefa é realizada durante outra tarefa.
Clique com o botão direito do mouse em um rótulo para ampliar a linha do tempo para a duração exata do etiqueta / rótulo. Clique com o botão esquerdo para adicionar o rótulo a um gráfico de linha no canto inferior direito da verdo jogo. O gráfico mostrará o tempo que a tarefa está demorando em cada quadro. Usando este gráfico, você pode testar o desempenho de apenas certos rótulos em seu jogo. Múltiplos rótulos podem ser adicionados e você pode esconder o gráfico clicando com o botão direito.
Tópicos
Como muitos programas, o Roblox usa vários threads para realizar várias sequências de tarefas ao mesmo tempo. Na linha do tempo do MicroProfiler, você pode ver os rótulos deles à esquerda. Existem três tipos de threads:
Principal : Processa entrada, Humanoids, animações/tweening, propriedade física, som, reiniciações de script em espera, atualiza interfaces do Studio (/studio/explorer, Propriedades) e coordena os outros threads.
Trabalhador ("Trabalhador TSMk2"): Ajuda o thread principal com redes, física e busca de pathfinding. Múltiplos são usados dependendo do número de núcleos do processador.
Render ("GPU"): Segue uma lógica de preparação, desempenho e apresentação. Comunica-se com a unidade de processamento gráfico (GPU) do dispositivo.
- Prepare: As informações do tópico principal são usadas para atualizar os modelos de renderização.
- Realizar: Emitir comandos de renderização, incluindo interfaces 2D.
- Presente: Sincroniza com a GPU.
Profiling Personalizado
Se seus scripts estiverem fazendo tarefas complicadas, você vai querer traçar pontos críticos para garantir que uma quantidade razoável de tempo esteja sendo usada. Você pode fazer isso chamando Debug.profilebegin seguido de Debug.profileend, que multiplica tudo feito entre essas duas chamadas de função. Isso cria um rótulo na linha do tempo do MicroProfiler.
debug.profilebegin("Hard Work")-- Aqui é onde o código a ser perfilado deve estardebug.profileend()
Tenha em mente que há uma quantidade limitada de memória disponível para os rótulos do MicroProfiler, portanto, às vezes, os rótulos de perfilador personalizados podem não aparecer como um nome significativo se essa memória se esgotar. Usar menos rótulos evitará isso. Se você não precisar mais criar um perfil em uma seção do seu código, você deve comentar ou remover chamadas para essas funções, pois elas não fornecem outro benefício, exceto durante a depuração.
Exemplo
O exemplo de código abaixo conecta uma função manequim ao evento RunService.PreSimulation, que roda em todos os quadros. Qualquer coisa feita assim deve correr da forma mais eficiente possível, então as chamadas para Debug.profilebegin e Debug.profileend foram adicionadas ao código a ser perfilado.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard work") -- Comece a criar perfil aqui com este etiqueta / rótulo
-- Exemplo de trabalho: trocar duas variáveis 200.000 vezes
local a, b = 0, 1
for i = 1, 200000 do
a, b = b, a
end
debug.profileend() -- Pare de criar perfil aqui
end
RunService.PreSimulation:Connect(onPreSimulation)
Correndo o jogo e pausando o profiler (CtrlP ; ⌘P ), o rótulo de profiler personalizado é visível sob o etiqueta / rótuloPasseado:
É claro que essa função está usando muito desempenho desnecessariamente: se isso fosse código real, olhar aqui para oportunidades de otimização seria um bom iniciar. No entanto, este é um exemplo inventado que faz um trabalho sem sentido para enfatizar o etiqueta / rótulo.
Profiling em dispositivos móveis
Você pode ativar o MicroProfiler através do menu de Configurações. Usando um dispositivo móvel conectado à mesma rede que sua máquina de desenvolvimento, você pode acessar um MicroProfiler baseado em navegador. Uma vez ativado, o endereço IP da rede do dispositivo é exibido junto com um número de porta.
Por exemplo, na captura de tela acima, o endereço é 192.168.1.166 e a porta é 1338. No navegador da web de um computador conectado à mesma rede , você navegaria até http://192.168.1.166:1338. Uma interface semelhante à vista em dispositivos não móveis é mostrada: