Script Profiler é uma ferramenta dentro do Developer Console que permite gravar sessões de perfilamento de todos os scripts em funcionamento e visualizar seus gastos de tempo de CPU com configurações de gravação e exibição personalizadas. Ele pode gravar todos os tipos de chamadas de função, incluindo funções Luau, chamadas de método e acessos de propriedades. Essa ferramenta é útil para identificar scripts que consomem mais recursos de CPU e diminuem o performance.
Gravando sessões de criação de perfil
Antes de gravar, você precisa selecionar o ambiente de gravação de:
- Cliente (Padrão) Registra scripts do lado do cliente, incluindo LocalScripts e Scripts com RunContext definido como Client .
- Server Registra scripts do lado do servidor, incluindo Scripts com RunContext definido como Server ou Legacy. O Script Profiler apaga todos os dados coletados do lado do servidor no final de cada sessão.
Você também pode definir as seguintes opções de gravação:
Comportamiento | Opciones | Por defecto | Descripción |
---|---|---|---|
Frecuencia | 1000 veces por segundo (1 KHz) 10.000 veces por segundo (10 KHz) | 1 kilociclo | La frecuencia de 10 KHz tiene una mayor precisión, ya que Script Profiler puede no recibir llamadas API que se ejecuten con más frecuencia que la frecuencia seleccionada, pero también tiene un mayor costo de rendimiento. |
Duración de la sesión | 1 minuto 5 minutos 10 minutos Manual | Manuel | La opción manual requiere que dejes de grabar manualmente. |
Comportamiento de votación en vivo | Encendido Apagado | Apagado | Este comportamiento realiza encuestas y actualiza los datos de perfil cada segundo durante una sesión de perfil. |
Para gravar uma nova sessão de criação de perfil:
Abra Console de Desenvolvedor .
Expanda o menu suspenso de ferramentas para selecionar ScriptProfiler .
Expanda a lista suspensa cliente-servidor para selecionar Cliente ou Servidor .
(Opcional) Marque a caixa de seleção Live para habilitar o comportamento de votação ao vivo.
(Opcional) Selecione Freq e Time para escolher a frequência de gravação e a duração da sessão se você não quiser usar os valores padrão.
Clique Iniciar para iniciar a sessão de criação de perfil. Se você definir uma duração, o Script Profiler exibirá um cronômetro com o tempo restante na sessão.
Clique em Parar ou aguarde até que a gravação termine para exibir os dados de perfil.
Lendo dados de perfil
Depois que uma sessão pára, o Script Profiler gera uma tabela mostrando quanto tempo cada chamada de função gasta no tempo da CPU. A tabela classifica as chamadas de função do mais gasto para o menos gasto, e permite que você pesquise funções específicas por seu nome. Ele fornece as seguintes duas visualizações:
- Callgraph (Padrão): Categoriza e exibe chamadas de função em uma estrutura de árvore com base em tarefas de quadro. Esta exibição exibe cada categoria de tarefa como nós sob a mesma raiz e permite que você os expanda para ver funções. Você também pode passar o mouse sobre qualquer nó na árvore para ver informações de arquivo e linha. Por exemplo, Stepped/CameraInput/<anonymous> pode revelar Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 .
- Funções : Lista todas as funções sem categorizá-las por tarefas.
Você também pode selecionar entre as seguintes opções de exibição para adaptar suas necessidades de depuração:
Nombre | Opciones | Por defecto | Descripción |
---|---|---|---|
Unidad | Millisegundos (ms) Porcentaje (%) | fr. | Muestra el tiempo transcurrido en cada llamada de API en milisegundos o porcentajes de la sesión de grabación total. |
Promedio | Apagado 1 segundo 1 minuto 5 minutos 10 minutos | Apagado | Calcula el tiempo promedio gastado en cada llamada de API por el valor seleccionado. Si selecciona una opción que es más larga que la duración de la sesión, el perfilador de scripts extrapolará la duración de la sesión para calcular el promedio. Por ejemplo, puede seleccionar la opción de 5 minutos para una sesión de 1 minuto para ver el valor promedio esperado si ejecuta el código durante 5 minutos. |
Exportando dados de perfil
O Script Profiler permite exportar dados de perfil gravados como um arquivo JSON. Para exportar dados gravados após uma sessão de perfil:
Na janela do Script Profiler, clique em Exportar .
Na janela de exportação, selecione a sessão de criação de perfil que você deseja exportar. Renomeie o nome do arquivo padrão se você quiser definir um nome personalizado.
Clique Exportar para salvar o arquivo JSON.
O arquivo JSON exportado inclui os seguintes campos:
- Versão : O número da versão.
- SessionStartTime : Um timestamp em milissegundos que registra a hora de início da sessão.
- SessionEndTime : Um timestamp em milissegundos que registra a hora do fim da sessão.
- Categorias : Um conjunto de categorias de tarefas de quadro registradas na sessão de criação de perfil. Cada entrada inclui:
- Nome : O nome de cada categoria de tarefa de quadro.
- NodeId : O identificador exclusivo de uma categoria de tarefa (nodo). É um índice baseado em 1 na matriz Nodes. Por exemplo, você pode buscar o nó com o NodeId de 123 recuperando o 123o elemento em Nodes .
- Nodos : Um conjunto de nós registrados na sessão de criação de perfil. Cada entrada inclui:
- TotalDuration : A quantidade de tempo que o nó gasta em tempo de CPU em microssegundos.
- FunctionIds : Um conjunto de identificadores únicos de funções.
- NodeIds : Um conjunto de IDs de nó.
- Funções : Um conjunto de funções registradas na sessão de criação de perfil.
- TotalDuration : A quantidade de tempo que a função gasta em tempo de CPU em microssegundos.
- Nome : O nome da função, se disponível.
- Fonte : A fonte da função, se disponível.
- Linha : O número da linha da função, se disponível.
- Bandeiras : Um campo de bit que indica qualquer ambiente de implementação de função específica. Atualmente pode ter os seguintes valores:
- 0 : O 0o bit representa IsNative para implementação no Native CodeGen.
- 1 : O 1o bit representa IsPlugin para implementação como parte de um plugin.
Exemplo de dados de perfil exportados
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"Script","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}