Flame 그래프 포커스 지정
포커스 필터를 사용할 때 함수 하나를 선택하면 Flame 그래프에는 특정 함수를 드나드는 코드 경로가 표시됩니다. 포커스가 지정된 그래프를 사용하면 다음 두 가지의 일반적인 태스크를 수행할 수 있습니다.
- 여러 곳에서 호출되는 특정 함수의 총 리소스 소비 분석
- 특정 함수에서 여러 호출자에 소비되는 시간의 비율 분석
예를 들어 표준 Flame 그래프를 사용하여 Sort 함수와 관련된 리소스 소비량을 분석하려면 어떻게 해야 할까요?
 
다음 섹션에서는 이 질문에 대한 답을 알아보기 위해 Sort 그래프를 집중적으로 살펴봅니다.
이 페이지의 Flame 그래프는 색상 모드와 비교 대상으로 구성되며 각각 이름과 없음의 기본값으로 설정되어 있습니다.
포커스가 지정된 그래프 설명
포커스 필터로 작성된 그래프는 지정된 함수의 Flame 그래프 두 개를 만들어서 하나로 합칩니다.
 
위 그래프에서 Sort 함수에 해당하는 프레임은 전체 너비이며 강조표시되어 있습니다. 프레임 텍스트에는 함수 이름, 백분율, 분석에 사용된 프로필 수가 포함됩니다. 이 경우 측정항목을 통해 Sort 함수가 CPU 시간의 8.85%를 소비한 것을 알 수 있습니다.
위 그래프의 하단부 절반은 Sort 함수를 표준 Flame 그래프의 시작점으로 간주하고 모든 피호출자를 표시합니다.
프레임에서 표시 필터를 사용하면 이 부분을 표준 Flame 그래프로 만들 수 있습니다.
 
그래프의 상단부 절반은 피호출자가 숨겨진 Sort의 호출자를 표시합니다. 일련의 필터를 사용하면 상단부 절반에 대한 근사치를 구할 수 있습니다.
먼저 Sort에 스택 표시 필터를 추가합니다. 그런 다음 Sort로 호출된 함수마다 스택 숨기기 또는 프레임 숨기기를 추가합니다. 이 예시에서는 quickSort에 스택 숨기기를 추가하여 이 함수와 하위 요소를 삭제한 후 Len 및 maxDepth에 프레임 숨기기를 추가합니다.
 
이러한 필터를 사용하면 포커스가 지정된 그래프의 상단부 절반에 대한 근사치를 구할 수 있으므로 서로 다른 호출 스택을 통해 Sort 함수에 도달한다는 점을 알 수 있습니다. 그러나 측정항목은 집계되지 않으므로 그래프에 Sort의 전체 측정항목 소비량은 나타나지 않습니다.
포커스가 지정된 그래프는 근사치 값 두 개를 단순히 결합하는 그래프와는 조금 다릅니다.
- 포커스 함수 Sort에 사용할 수 있는 프레임이 한 개 있습니다.
- 포커스 함수 프레임은 강조표시된 전체 너비 프레임이며 모든 호출 스택 집계인 측정항목을 표시합니다.
- 각 호출 스택은 root프레임으로 시작하므로 전체 호출 스택을 볼 수 있습니다.
프레임 선택
포커스가 지정된 그래프에서 프레임을 클릭하면 Flame 그래프가 다시 그려지고 프레임의 호출 스택이 좀 더 자세하게 표시됩니다. 여러 호출 스택을 통해 프레임이 연결되면 각 호출 스택이 표시되며 프레임을 포함하지 않는 호출 스택은 표시되지 않습니다. 그래프를 원래 상태로 복원하려면 포커스 함수에 해당하는 프레임을 선택합니다.
앞의 예시에서 Sort는 (*byFreq).sort 및 (*byLiteral).sort에 의해 호출됩니다. (*byLiteral).sort의 호출 스택을 자세히 보려면 해당 프레임을 선택합니다.
다른 프레임을 선택하고 표시되는 호출 스택을 더욱 세분화할 수 있습니다.
 
포커스가 지정된 Flame 그래프를 원래 상태로 복원하려면 포커스 필터 값이 표시되는 프레임을 선택합니다. 이 예시에서는 Sort 라벨이 있는 회색 프레임을 선택합니다. 표준 Flame 그래프를 원래 상태로 복원하려면 루트 프레임을 선택합니다.
그래프 분석
포커스가 지정된 Flame 그래프를 분석하려면 표준 Flame 그래프를 분석하는 데 사용된 컨트롤 및 필터와 동일한 컨트롤 및 필터를 사용합니다. 단, 그래프와 포인터의 상호작용 방식에는 차이가 있습니다.
- 포인터를 프레임 위로 가져가면 도움말에 측정항목 데이터가 표시됩니다. 표준 Flame 그래프에서는 프레임의 전체 측정항목 데이터가 표시됩니다. 포커스가 지정된 Flame 그래프에서는 함수의 집계 측정항목 데이터가 표시됩니다. 
- 프레임을 선택하면 Flame 그래프가 다시 그려지고 프레임이 전체 너비로 표시됩니다. 표준 Flame 그래프를 원래 상태로 복원하려면 맨 위에 있는 프레임을 선택해야 합니다. 포커스가 지정된 Flame 그래프를 원래 상태로 복원하려면 포커스 필터 값이 표시된 프레임을 선택해야 합니다. 
프로필을 비교할 때 포커스가 지정된 그래프에 대한 자세한 내용은 비교 포커스 지정을 참조하세요.
포커스 필터 설정
포커스 필터를 설정하는 데 사용할 수 있는 방법은 여러 가지가 있지만 모두 같은 그래프를 표시합니다.
그래프 사용
원하는 프레임 위에 마우스 포인터를 놓은 다음 프레임 도움말에서 포커스를 클릭합니다.
포커스 함수가 프레임에서 추출됩니다.
이 예시에서는 함수 (*huffmanBitWriter).write 주위로 펼쳐진 Flame 그래프에 다음 세 가지 호출 스택이 표시됩니다.
 
포커스 목록 사용
Flame 그래프에 특정 함수의 포커스를 지정하려면 다음을 수행합니다.
- 목록 list을 클릭하여 포커스 함수 선택 테이블을 엽니다.
- 테이블에서 함수 이름을 선택하거나 특정 함수의 경우 작업 more_vert을 클릭한 다음 포커스를 선택합니다.
 
선택한 함수가 여러 호출 스택을 통해 호출될 수 있으면 각 호출 스택이 Flame 그래프에 표시됩니다.
테이블 헤더 요소를 선택하여 테이블 행을 오름차순 arrow_upward 또는 내림차순 arrow_downward으로 정렬할 수 있습니다.
표의 각 행에는 함수 이름과 함수의 실행과 관련된 통계가 표시됩니다.
이 테이블에서는 (*compressor).deflate 함수를 실행하는 데 2.78초가 소요된다는 점을 보여줍니다. 함수 자체를 실행하는 데 1.8초가 걸리고 호출 스택을 실행하는 데 나머지 시간이 소요됩니다.
첫 번째 백분율 열은 (*compressor).deflate 함수가 총 실행 시간의 57%를 사용하고 있음을 보여줍니다. 두 번째 열은 (*compressor).deflate 또는 관련 호출 스택의 함수가 실행되는 데 총 실행 시간의 89%를 사용하고 있음을 보여줍니다.
마지막으로 개수 열에는 (*compressor).deflate 함수를 호출하는 시퀀스가 3개 있다고 나와 있습니다.
프로필을 비교할 때 포커스 목록의 콘텐츠는 다릅니다. 자세한 내용은 비교 포커스 지정을 참조하세요.
필터 표시줄 사용
필터 표시줄에서 프로필 데이터 필터 추가라는 회색 텍스트를 클릭한 후 Focus:와 포커스를 지정할 함수를 식별하는 문자열을 입력합니다. 패키지 프리픽스 또는 전체 이름이 포함된 하위 문자열을 사용할 수 있습니다. 명확하지 않은 문자열을 제공하면 이 문자열과 가장 일치하는 함수가 선택됩니다.
원하는 경우 필터를 클릭하고 포커스를 선택한 후 식별 문자열을 입력할 수 있습니다.
선택한 함수가 여러 호출 스택을 통해 호출될 수 있으면 각 호출 스택이 Flame 그래프에 표시됩니다.
포커스 필터 삭제
포커스 필터를 삭제하려면 필터에서 닫기 close를 클릭합니다.