Focar o gráfico de rastreio em pilhas sobrepostas
Quando usa o filtro Foco, seleciona uma única função e o gráfico de chamas apresenta os caminhos de código que entram e saem dessa função específica. Um gráfico focado permite-lhe realizar duas tarefas comuns:
- Analisar o consumo de recursos agregado de uma determinada função que é chamada a partir de vários locais.
- Analisar a proporção de tempo gasto numa função para diferentes autores da chamada da função.
Por exemplo, como analisa o consumo de recursos em torno da função Sort
usando o gráfico de chamas padrão?
Na secção seguinte, focamos o gráfico em Sort
e respondemos a esta pergunta.
Os gráficos de chamas nesta página foram criados com o Modo de cor e a opção Comparar com definidos para os valores predefinidos de Nome e Nenhum, respetivamente.
Explicação do gráfico focado
O gráfico criado pelo filtro Foco cria efetivamente dois gráficos de chamas para a função especificada e junta-os:
No gráfico anterior, o frame correspondente à função Sort
tem largura total e está realçado. O texto da frame inclui o nome da função, uma percentagem e o número de perfis usados para a análise. Neste caso, as métricas indicam que a função Sort
, no total, consumiu 8,85% do tempo da CPU.
A metade inferior do gráfico anterior trata a função Sort
como o ponto de partida de um gráfico de chamas padrão e mostra todos os respetivos destinatários.
Pode criar esta parte com o gráfico de chamas padrão através do filtro Mostrar a partir do frame:
A metade superior do gráfico mostra as pessoas que ligaram para Sort
com as pessoas que receberam a chamada ocultas. Pode fazer uma aproximação da metade superior através de uma série de filtros.
Comece por adicionar um filtro Mostrar conjuntos para Sort
. Em seguida, para cada função chamada por Sort
, adicione Hide stacks ou Hide frames. Nesta situação, adicionaria uma ocultação de frames para quickSort
para eliminar esta função e os respetivos elementos secundários e, em seguida, adicionaria ocultação de frames para Len
e maxDepth
:
Com estes filtros, a aproximação da metade superior do gráfico focado mostra que a função Sort
é alcançada através de diferentes pilhas de chamadas. No entanto, as métricas não são agregadas, pelo que o gráfico não
ilustra o consumo geral de métricas por Sort
.
O gráfico focado é ligeiramente diferente de um gráfico que apenas combina as duas aproximações:
- Existe um único frame para a função de foco
Sort
. - O frame da função de foco está realçado, é um frame de largura total e apresenta métricas que são a agregação de todas as pilhas de chamadas.
- Existem várias sequências de chamadas, cada uma a começar com um frame
root
, para que possa ver a sequência de chamadas completa.
Selecionar uma moldura
Se selecionar um frame num gráfico focado, o gráfico de chamas é redesenhado com a pilha de chamadas desse frame apresentada com mais detalhes. Se o frame for alcançado através de várias pilhas de chamadas, cada uma dessas pilhas de chamadas é apresentada. As pilhas de chamadas que não incluem a frame estão ocultas. Para restaurar o gráfico ao estado original, selecione a moldura 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 essa frame.
Pode selecionar outro frame e refinar ainda mais as pilhas de chamadas apresentadas:
Para restaurar um gráfico de chamas focado ao respetivo estado original, selecione a frame que apresenta o valor do filtro Foco. Neste caso, selecione a moldura cinzenta com a etiqueta Sort
. Tenha em atenção que, para restaurar um gráfico de chamas padrão ao respetivo estado original, selecione a frame raiz.
Analisar o gráfico
Para analisar um gráfico de chamas focado, usa os mesmos controlos e filtros que usa para analisar um gráfico de chamas padrão. No entanto, existem diferenças na forma como os gráficos interagem com o ponteiro:
Se passar o cursor do rato sobre um frame, a sugestão apresenta dados de métricas. Para um gráfico de chamas padrão, são apresentados os dados totais das métricas para o frame. Para um gráfico de chamas focado, são apresentados os dados das métricas agregadas da função.
Se selecionar um frame, o gráfico de chamas é redesenhado com esse frame apresentado a toda a largura. Para restaurar um gráfico de chamas padrão à sua forma original, tem de selecionar a frame superior. Para restaurar um gráfico de chamas focado à sua forma original, tem de selecionar a frame que apresenta o valor do filtro de foco.
Para ver informações sobre o gráfico focado quando está a comparar perfis, consulte o artigo Focar uma comparação.
Definir o filtro de foco
Existem diferentes métodos que pode usar para definir um filtro de foco, mas resultam no mesmo gráfico.
Usando o gráfico
Coloque o ponteiro no frame de interesse e, de seguida, clique em Focar na dica
do frame.
A função de foco é extraída da moldura.
Neste exemplo, o gráfico de chamas, que está expandido em torno da função (*huffmanBitWriter).write
, apresenta três diferentes pilhas de chamadas:
Usando a lista de foco
Para focar o gráfico de chamas numa função específica, faça o seguinte:
- Clique em Lista list para abrir a tabela Selecionar função de foco.
- Selecione um nome de função na tabela ou, para uma função específica, clique em Ações more_vert e, de seguida, selecione Foco:
Se a função que selecionou puder ser chamada através de diferentes pilhas de chamadas, cada pilha de chamadas é apresentada no gráfico de chamas.
Pode ordenar as linhas da tabela por ordem ascendente arrow_upward ou
descendente arrow_downward
selecionando um elemento de cabeçalho da tabela.
Cada linha da tabela apresenta um nome de função e estatísticas relacionadas com a execução da função.
Esta tabela mostra que a função (*compressor).deflate
requer 2,78 s para ser executada, com 1,8 s gastos na própria função e o restante tempo gasto na respetiva pilha de chamadas.
Uma coluna de percentagem indica que 57% do tempo de execução total é gasto na função (*compressor).deflate
. Outra coluna indica que, 89% das vezes, (*compressor).deflate
ou uma função na respetiva pilha de chamadas está a ser executada.
Por último, a coluna de contagem indica que existem três sequências que invocam a função (*compressor).deflate
.
Quando compara perfis, o conteúdo da lista de foco é diferente. Para mais informações, consulte o artigo Focar uma comparação.
Usando a barra de filtros
Clique no texto cinzento Adicionar filtro de dados do perfil na barra de filtros e, de seguida, introduza Focus:
e uma string que identifique a função na qual se concentrar. Pode usar uma substring, incluindo prefixos de pacotes,
ou o nome completo. Quando fornece uma string ambígua, é selecionada a função que melhor corresponde à string.
Se preferir, pode clicar em Filtros, selecionar Foco e, de seguida, introduzir a string de identificação.
Se a função que selecionou puder ser chamada através de diferentes pilhas de chamadas, cada pilha de chamadas é apresentada no gráfico de chamas.
Remover o filtro de foco
Para remover o filtro de foco, clique em Fechar close no filtro.