Como focar o gráfico de chama

Quando o filtro Foco é usado, uma única função é selecionada, e o gráfico de chama exibe todos os caminhos de código que entram e saem dessa função específica. Um gráfico focado permite realizar duas tarefas comuns:

  1. Analisar o consumo de recursos agregado de uma determinada função que é chamada a partir de vários locais.
  2. Analisar a proporção de tempo gasto em uma função de diferentes autores de chamada.

Por exemplo, como você analisa o consumo de recursos em torno da função Sort usando o gráfico de chama padrão?

Função sort no gráfico de chama.

Na próxima seção, focaremos o gráfico em Sort e responderemos a essa pergunta. Os gráficos de chama desta página foram construídos com Modo de cor e Comparar com definidos para os valores padrão de Nome e Nenhum, respectivamente.

Explicação do gráfico focado

O gráfico gerado pelo filtro Foco cria dois gráficos de chama para a função especificada e os une.

Gráfico de chama para focar na função de classificação.

No gráfico anterior, o frame correspondente à função Sort é de largura total e está destacado. O texto do quadro inclui o nome da função, uma porcentagem e o número de perfis usados na análise. Nesse caso, as métricas indicam que a função Sort consumiu, em seu conjunto, 8,85% do tempo de CPU.

A metade inferior do gráfico anterior trata a função Sort como o ponto de partida de um gráfico de chama padrão e mostra todos os recebedores das chamadas. É possível criar essa parte com o gráfico de chama padrão usando o filtro Mostrar do frame:

Parte inferior dos gráficos de chama mostrando a classificação do que foi chamado.

A metade superior do gráfico mostra os autores das chamadas de Sort com os recebedores ocultados. É possível fazer uma aproximação da metade superior usando uma série de filtros. Comece adicionando um filtro Mostrar pilhas para Sort. Em seguida, para cada função chamada por Sort, adicione Ocultar pilhas ou Ocultar frames. Nessa situação, você adicionaria Ocultar pilhas para quickSort para eliminar essa função e seus filhos e, em seguida, adicionaria Ocultar frames para Len e maxDepth:

Parte superior dos gráficos de chama mostrando os chamadores de classificação.

Com esses filtros, a estimativa da metade superior do gráfico focado mostra que a função Sort é alcançada por meio de diferentes pilhas de chamadas. No entanto, as métricas não são agregadas. Portanto, o gráfico não ilustra o consumo geral de métricas de Sort.

O gráfico focado é um pouco diferente de um gráfico que combina as duas aproximações:

  • Há um único frame para a função de foco Sort.
  • O quadro da função de foco é realçado, é um quadro de largura total e exibe métricas que são a combinação de todas as pilhas de chamadas.
  • Há várias pilhas de chamadas, cada uma começando com um frame root para que você possa ver toda a pilha de chamadas.

Como selecionar um quadro

Se você selecionar um quadro em um gráfico focado, o gráfico em degradê será redesenhado com a pilha de chamadas desse quadro exibida com mais detalhes. Se o quadro for alcançado por meio de várias pilhas de chamadas, cada uma dessas pilhas será exibida. As pilhas de chamadas que não incluírem o quadro serão ocultadas. Para restaurar o gráfico ao estado original dele, clique no quadro que corresponde à função de foco.

No exemplo anterior, Sort é chamado por (*byFreq).sort e por (*byLiteral).sort. Para ver a pilha de chamadas de (*byLiteral).sort com mais detalhes, selecione esse frame. É possível clicar em outro quadro para refinar ainda mais as pilhas de chamadas exibidas:

Gráfico de chama expandido sobre a classificação.

Para restaurar um gráfico de chama focado ao estado original dele, clique no quadro que exibe o valor do filtro Foco. Nesse caso, selecione o frame cinza com o rótulo Sort. Para restaurar um gráfico de chama padrão ao estado original dele, selecione o quadro raiz.

Como analisar o gráfico

Para analisar um gráfico em degradê focalizado, use os mesmos controles e filtros usados para analisar um gráfico em degradê padrão. No entanto, há diferenças na maneira como os gráficos interagem com o ponteiro:

  • Se o ponteiro do mouse estiver sobre um quadro, a dica da ferramenta exibirá dados métricos. Para um gráfico em degradê padrão, são mostrados os dados de métricas totais do quadro são mostrados. Para um gráfico em degradê focalizado, são mostrados dados métricos agregados para a função.

  • Se você selecionar um quadro, o gráfico em degradê será redesenhado com esse quadro exibido em largura total. Para restaurar um gráfico em degradê padrão ao formato original dele, selecione o quadro superior. Para restaurar um gráfico de chama focalizado ao formato original dele, selecione o quadro que exibe o valor do filtro de foco.

Para informações sobre o gráfico focado ao comparar perfis, consulte Como focar uma comparação.

Como configurar o filtro de foco

Existem métodos diferentes que podem ser usados para definir um filtro de foco, mas todos resultam no mesmo gráfico.

Usando o gráfico

Coloque o ponteiro no quadro relevante e clique em Foco na dica dele. A função de foco é extraída do quadro. Neste exemplo, o gráfico de chama, que é expandido em torno da função (*huffmanBitWriter).write, exibe três pilhas de chamadas diferentes:

Gráfico de chama focado em um pequeno quadro.

Usando a lista de foco

Para focar o gráfico de chama em uma função específica, clique em Lista e selecione uma linha na tabela Selecionar função de foco:

Selecione a tabela de funções de foco.

Se for possível chamar a função selecionada por meio de pilhas diferentes, cada pilha de chamadas será mostrada no gráfico.

Você pode classificar as linhas da tabela em ordem crescente ou decrescente selecionando um elemento do cabeçalho da tabela. Cada linha na tabela exibe um nome de função e estatísticas relacionadas à execução dela. Esta tabela mostra que a função (*compressor).deflate requer 1,46 s para ser executada, com 971 ms gastos na própria função e o restante do tempo gasto na pilha de chamadas. Uma coluna de porcentagem informa que 62% do tempo total de execução é gasto na função (*compressor).deflate. Outra coluna informa que, em 93% do tempo, (*compressor).deflate ou uma função na pilha de chamadas está em execução. Por fim, a coluna de contagem informa que há duas sequências que invocam a função (*compressor).deflate.

Quando você estiver comparando perfis, observe que o conteúdo da lista de foco é diferente. Saiba mais em Como focar uma comparação.

Usando a barra de filtro

Clique no texto cinza Adicionar filtro de dados do perfil na barra de filtros e insira Focus: e uma string que identifique a função a ser focada. É possível usar uma substring, incluindo prefixos de pacote ou o nome completo. Quando você fornece uma string ambígua, a função que melhor corresponde à ela é selecionada.

Se preferir, clique em Filtros, selecione Foco e insira a string de identificação.

Se for possível chamar a função selecionada por meio de pilhas diferentes, cada pilha de chamadas será mostrada no gráfico.

Como remover o filtro de foco

Para remover o filtro de foco, clique em Fechar no filtro.

A seguir