Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Usando o profiler de ObjectDB
Desde o Godot 4.6, há uma nova aba ObjectDB Profiler no painel inferior do Debugger. Este perfilador permite tirar instantâneos (snapshots) do estado atual do ObjectDB, que é o banco de dados que contém todas as classes derivadas de Object atualmente alocadas na memória. Isso é útil para identificar vazamentos de memória (memory leaks) e entender o uso de memória do seu projeto.
Além disso, esta ferramenta é capaz de visualizar as diferenças entre dois instantâneos. Isso pode ser usado para identificar melhorias ou regressões no uso de memória após fazer alterações no seu projeto. Reduzir o uso de memória pode levar a um melhor desempenho, mesmo nos casos em que a memória não é um gargalo. Ao reduzir o uso de memória, você pode realizar menos alocações, o que pode ser uma operação dispendiosa, especialmente se realizada em grandes quantidades durante a gameplay.
Ver também
Veja Quando e como evitar o uso de nós para tudo para informações sobre o uso de alternativas mais leves aos nós, o que pode ajudar a reduzir o uso de memória no seu projeto.
Aviso
O perfilador ObjectDB não rastreia cada bit de memória usado pela engine ou por bibliotecas externas. Classes nativas da engine que não estão expostas para a API de script não aparecerão nos instantâneos.
Considere o uso de ferramentas externas de perfilamento de memória se precisar de acesso a essas informações.
Uso
Abra a aba ObjectDB Profiler no painel inferior . Você cairá na página de resumo (summary) sem nenhum instantâneo tirado ainda.
Resumo do perfilador ObjectDB sem instantâneos tirados
Execute o projeto e, em seguida, chegue a um ponto em que gostaria de tirar um instantâneo (por exemplo, após carregar uma fase). Clique em para tirar um instantâneo no momento atual. Se o botão aparecer acinzentado, certifique-se de que o projeto esteja rodando primeiro.
Resumo do perfilador ObjectDB com um instantâneo tirado
Você pode tirar múltiplos instantâneos durante uma única execução do projeto. Além disso, você pode clicar com o botão direito em um instantâneo na lista de instantâneos para renomeá-lo, mostrá-lo no gerenciador de arquivos ou excluí-lo.
Dica
É uma boa ideia renomear os instantâneos após tirá-los para dar a eles nomes descritivos (ex: antes_da_otimizacao, apos_a_otimizacao). Independentemente do nome, a data em que o instantâneo foi tirado permanece salva no próprio arquivo do instantâneo.
Os arquivos de instantâneo têm uma extensão .odb_snapshot e estão localizados em user://objectdb_snapshots/ (veja detalhes em Data paths). Eles podem ser copiados com segurança entre dispositivos, pois são independentes de plataforma.
Visualizar diferenças entre snapshots
Depois de tirar pelo menos dois instantâneos, o menu suspenso fica disponível. Aqui, você pode selecionar outro instantâneo para comparar com o instantâneo atualmente selecionado.
Menu suspenso Diff Against no canto inferior esquerdo do perfilador ObjectDB
A página de resumo mostrará então as diferenças entre os dois instantâneos:
Dois instantâneos sendo comparados na aba Summary
Isso também se aplica a todas as outras abas no perfilador ObjectDB, que mostrarão as diferenças entre os dois instantâneos em colunas adicionais.
Classes
Na aba Classes, você pode visualizar quantas instâncias de cada classe foram criadas no momento em que o instantâneo foi tirado:
Um instantâneo sendo visualizado na aba Classes
Quando estiver no modo diff, ele mostrará a contagem de instâncias da classe para o instantâneo atualmente selecionado (coluna A) e para o instantâneo com o qual está sendo comparado (coluna B). Ele também mostrará a diferença na contagem de instâncias na coluna Delta.
Dois instantâneos sendo comparados na aba Classes. Aqui, a coluna A é segunda_sessao, a coluna B é primeira_sessao
Você pode clicar em uma classe na lista à direita para visualizá-la no inspetor.
Uma instância de classe selecionada sendo visualizada no inspetor
Dica
A visualização prévia de instâncias no inspetor também está disponível em outras abas (Nodes, Objects e RefCounted).
Objetos
A aba Objects é semelhante, mas difere na maneira como apresenta os dados. Aqui, cada instância é listada de forma linear, em vez de agrupá-las por classe. Ao selecionar um objeto, você verá uma lista de outros objetos que ele referencia à direita (), bem como uma lista de objetos pelos quais ele está sendo referenciado ().
Isso permite que você visualize os objetos tanto de uma maneira "de cima para baixo" (visualizando quais objetos um determinado objeto referencia) quanto de uma maneira "de baixo para cima" (visualizando quais objetos referenciam um determinado objeto).
A aba Objects sendo usada para visualizar objetos de uma maneira "de cima para baixo"
Na imagem acima, clicar no objeto default_font na lista mudará a visualização para a perspectiva daquele objeto. Este objeto está sendo referenciado por muitos outros objetos também, o que efetivamente muda para uma perspectiva "de baixo para cima".
A aba Objects sendo usada para visualizar objetos de uma maneira "de baixo para cima"
Nós
A seguir, la aba Nodes mostra a árvore de cena no momento em que o instantâneo foi tirado.
A aba Nodes sendo usada para visualizar a árvore de cena
Esta aba é particularmente interessante na visualização diff, pois suporta mostrar a diferença entre os dois instantâneos de uma maneira mais visual. Quando está desmarcado, você pode ver as diferenças lado a lado.
Visualização diff separada na aba Nodes
Quando está marcado, você pode ver as diferenças mescladas em uma única árvore, com os nós adicionados destacados em verde e os nós removidos destacados em vermelho.
Visualização diff combinada na aba Nodes
Adicionalmente, você pode visualizar uma lista de nós órfãos (nós que não estão anexados à raiz da árvore de cena) no final da visualização em árvore. Você pode visualizá-la mais facilmente recolhendo o nó raiz, já que estes são listados fora da árvore de cena principal.
Nós órfãos no final da árvore de nós no perfilador ObjectDB
RefCounted
A última aba é a aba RefCounted. Esta aba é semelhante à aba Objects, mas mostra as contagens de referência de classes derivadas de RefCounted diretamente na tabela. A tabela possui quatro colunas:
Native Refs: O número de referências nativas da engine para o objeto.
ObjectDB Refs: O número de referências do ObjectDB para o objeto.
Total Refs: A soma das referências nativas e referências do ObjectDB.
ObjectDB Cycles: O número de referências circulares detectadas.
Quando na visualização diff, o instantâneo B é sempre listado acima do instantâneo A se uma instância RefCounted existir em ambos os instantâneos.
A lista à direita mostra detalhes sobre a instância selecionada, incluindo uma lista de referências e se estas são duplicadas.
A aba RefCounted sendo usada para visualizar instâncias de RefCounted
Nota
A aba RefCounted não lista objetos que derivam diretamente de Object, pois estes não usam contagem de referências.