CPU 핫스팟 찾기

앱의 CPU 사용을 최적화하면 더 빠르고 원활한 사용자 환경 제공, 기기 배터리 수명 보존 등 많은 이점이 있습니다.

CPU 프로파일러를 사용하여 앱과 상호작용하는 동안 앱의 CPU 사용량 및 스레드 활동을 실시간으로 검사하거나 기록된 메서드 트레이스, 함수 트레이스, 시스템 트레이스의 세부정보를 검사할 수 있습니다.

CPU 프로파일러에서 기록하고 표시하는 정보의 구체적인 종류는 선택한 기록 구성에 따라 결정됩니다.

  • 시스템 트레이스: 앱에서 시스템 리소스와 상호작용하는 방법을 검사할 수 있는 세부정보를 캡처합니다.
  • 메서드 및 함수 트레이스: 앱 프로세스의 각 스레드에 관해 일정 기간 실행되는 메서드(자바) 또는 함수(C/C++) 및 각 메소드 또는 함수가 실행 중 사용하는 CPU 리소스를 확인할 수 있습니다. 메서드 및 함수 트레이스를 사용하여 호출자피호출자를 식별할 수도 있습니다. 호출자는 다른 메서드 또는 함수를 호출하는 메서드 또는 함수이고 피호출자는 다른 메서드 또는 함수에 의해 호출되는 메서드 또는 함수입니다. 이 정보를 사용하면 리소스 소모가 많은 특정 작업을 너무 자주 호출하는 메서드 또는 함수를 확인하고 앱의 코드를 최적화하여 불필요한 작업을 피할 수 있습니다.

    메서드 트레이스를 기록할 때 샘플링된 기록 또는 계측된 기록을 선택할 수 있습니다. 함수 트레이스를 기록하는 경우 샘플링된 기록만 사용할 수 있습니다.

각 트레이스 옵션의 사용 및 선택에 관한 세부정보는 기록 구성 선택을 참조하세요.

CPU 프로파일러 개요

CPU 프로파일러를 열려면 다음 단계를 따르세요.

  1. View > Tool Windows > Profiler를 선택하거나 툴바에서 Profile 을 클릭합니다.

    Select Deployment Target 대화상자에 메시지가 표시되면 프로파일링을 위해 앱을 배포할 기기를 선택합니다. USB를 통해 기기를 연결했지만 목록에 표시되지 않으면 USB 디버깅을 사용 설정했는지 확인하세요.

  2. CPU 타임라인의 아무 곳이나 클릭하여 CPU 프로파일러를 엽니다.

CPU 프로파일러를 열면 앱의 CPU 사용량 및 스레드 활동이 즉시 표시됩니다. 그림 1과 비슷한 화면이 표시됩니다.

그림 1. CPU 프로파일러의 타임라인

그림 1에 표시된 것처럼 CPU 프로파일러의 기본 뷰에는 다음과 같은 타임라인이 포함됩니다.

  1. 이벤트 타임라인: 앱이 수명 주기의 여러 상태를 통해 이행함에 따라 발생하는 앱내 활동을 표시하고, 화면 회전 이벤트 등 기기와 사용자의 상호작용을 나타냅니다. Android 7.1(API 레벨 25) 이하를 실행하는 기기에서 이벤트 타임라인을 사용 설정하는 데 대한 정보는 고급 프로파일링 사용 설정을 참조하세요.
  2. CPU 타임라인: 앱의 실시간 CPU 사용량을 이용 가능한 총 CPU 시간의 비율로 표시하고 앱에서 사용 중인 총 스레드 수를 표시합니다. 기타 프로세스(예: 시스템 프로세스 또는 다른 앱)의 CPU 사용량도 표시되므로 내 앱의 사용량과 비교할 수 있습니다. 타임라인의 가로축을 따라 마우스를 이동하여 이전의 CPU 사용량 데이터를 검사할 수 있습니다.
  3. 스레드 활동 타임라인: 앱의 프로세스에 속하는 각 스레드를 나열하고, 아래 나열된 색상을 사용하여 타임라인을 따라 각 스레드의 활동을 나타냅니다. 트레이스를 기록한 후 이 타임라인에서 스레드를 선택하여 트레이스 창에서 데이터를 검사할 수 있습니다.
    • 녹색: 스레드가 활성 상태이거나 CPU를 사용할 준비가 되었습니다. 즉, 실행 중이거나 실행 가능한 상태입니다.
    • 노란색: 스레드가 활성 상태이지만 작업을 완료하기 전에 디스크 또는 네트워크 I/O 등 I/O 작업을 기다리고 있습니다.
    • 회색: 스레드가 일시중지 상태이며 CPU 시간을 소비하고 있지 않습니다. 스레드에서 아직 이용할 수 없는 리소스에 액세스해야 할 때 이러한 경우가 종종 발생합니다. 필요한 리소스를 사용할 수 있게 될 때까지 스레드가 자발적으로 일시중지 상태에 들어가거나 커널이 스레드를 일시중지 상태로 전환합니다.

    CPU 프로파일러는 또한 JDWP, Profile Saver, Studio:VMStats, Studio:Perfa, Studio:Heartbeat 등 Android 스튜디오 및 Android 플랫폼이 앱 프로세스에 추가하는 스레드의 CPU 사용량도 보고합니다(스레드 활동 타임라인에 표시되는 정확한 이름은 다를 수도 있습니다). Android 스튜디오는 실제로 앱의 코드에 의해 스레드 활동 및 CPU 사용이 발생하는 시기를 식별할 수 있도록 이 데이터를 보고합니다.

트레이스 기록

트레이스 기록을 시작하려면 CPU 프로파일러 상단의 드롭다운 메뉴에서 기록 구성을 선택하고 Record를 클릭하세요.

그림 2. CPU 프로파일러에는 진행 중인 기록의 상태, 기간 및 유형이 표시됨

앱과 상호작용한 다음 완료되면 Stop을 클릭하세요. 프로파일러에서 기록된 기간을 자동으로 선택하고 그림 3에 표시된 것처럼 트레이스 창에 추적 정보를 표시합니다. 다른 스레드의 트레이스를 검사하려면 스레드 활동 타임라인에서 스레드를 선택하세요.

그림 3. 메서드 트레이스를 기록한 후의 CPU 프로파일러

  1. 선택된 기간: 기록된 시간 중 트레이스 창에서 검사할 부분을 결정합니다. 처음으로 트레이스를 기록하는 경우 CPU 프로파일러가 CPU 타임라인에서 기록의 전체 길이를 자동으로 선택합니다. 기록된 기간의 일부분에 관한 트레이스 데이터만 검사하려면 강조표시된 영역의 가장자리를 드래그하세요.
  2. 타임스탬프: 프로파일러에서 CPU 사용량 정보를 수집하기 시작한 시점을 기준으로 기록된 트레이스의 시작 시간과 종료 시간을 나타냅니다. 기록 전체를 선택하려면 타임스탬프를 클릭하세요.
  3. 트레이스 창: 선택한 기간 및 스레드에 관한 트레이스 데이터를 표시합니다. 이 창은 트레이스를 하나 이상 기록한 후에만 표시됩니다. 이 창에서 각 스택 추적을 보는 방법(트레이스 탭 사용) 및 실행 시간을 측정하는 방법(시간 참조 드롭다운 메뉴 사용)을 선택할 수 있습니다.
  4. 트레이스 창 탭: 트레이스 세부정보를 표시하는 방법을 선택합니다. 각 옵션에 관한 자세한 내용은 트레이스 검사를 참조하세요.
  5. 시간 참조 메뉴: 다음 중 하나를 선택하여 각 호출의 타이밍 정보가 측정되는 방법을 결정합니다.
    • Wall clock time: 타이밍 정보가 실제 경과 시간을 나타냅니다.
    • Thread time: 타이밍 정보가 실제 경과 시간에서 스레드가 CPU 시간을 소비하지 않는 시간을 뺀 시간을 나타냅니다. 주어진 호출의 스레드 시간은 항상 실제 경과 시간보다 작거나 같습니다. 스레드 시간을 사용하면 주어진 메서드나 함수에 의해 소비되는 스레드의 실제 CPU 사용량을 더 효과적으로 파악할 수 있습니다.
  6. 필터: 함수, 메서드, 클래스 또는 패키지 이름을 기준으로 트레이스 데이터를 필터링합니다. 예를 들어, 특정 호출과 관련된 트레이스 데이터를 신속하게 식별하려면 Filter를 클릭하거나 Ctrl + F(Mac의 경우 Command + F)를 누르고 검색 필드에 이름을 입력하세요. Call chartFlame chart 탭에서 검색어와 일치하는 호출, 패키지 또는 클래스가 포함된 호출 스택이 강조됩니다. Top downBottom up 탭에 호출 스택이 다른 트레이스 결과보다 우선 표시됩니다. 검색 필드 옆의 체크박스를 선택하여 다음과 같은 옵션을 사용 설정할 수도 있습니다.
    • Regex: 검색에 정규 표현식을 포함하려면 이 옵션을 사용하세요.
    • Match case: 검색에서 대소문자를 구분하는 경우 이 옵션을 사용하세요.

기록 구성 선택

트레이스 정보 기록을 시작하려면 캡처할 프로파일링 정보에 적절한 기록 구성을 선택하세요.

  • 자바 메서드 샘플링: 앱의 자바 기반 코드가 실행되는 동안 앱의 호출 스택을 자주 캡처합니다. 프로파일러는 캡처된 데이터 세트를 비교하여 앱의 자바 기반 코드 실행에 관한 타이밍 및 리소스 사용 정보를 얻습니다.

    샘플 기반 추적에 내재된 문제는 앱에서 호출 스택의 캡처 후에 메서드를 시작하고 다음 캡처 전에 메서드를 종료하는 경우, 해당 메서드 호출이 프로파일러에 의해 기록되지 않는다는 것입니다. 이렇게 수명 주기가 짧은 메서드를 추적하는 데 관심이 있으면 계측된 추적을 사용해야 합니다.

  • 자바 메서드 추적: 각 메서드 호출의 시작과 끝에서 타임스탬프를 기록하기 위해 런타임에 앱을 계측합니다. 타이밍 정보와 CPU 사용량 등 메서드 추적 데이터를 생성하기 위해 타임스탬프가 수집, 비교됩니다.

    각 메서드의 계측과 관련된 오버헤드가 런타임 성능에 영향을 미치며 프로파일링 데이터에 영향을 미칠 수도 있습니다. 수명 주기가 상대적으로 짧은 메서드의 경우 훨씬 더 두드러집니다. 또한, 앱에서 단기간에 많은 수의 메소드를 실행하는 경우 프로파일러가 빠르게 파일 크기 한도를 초과하고 더 이상 추적 데이터를 기록하지 못할 수도 있습니다.

  • C/C++ 함수 샘플링: 앱의 네이티브 스레드의 샘플링된 트레이스를 캡처합니다. 이 구성을 사용하려면 Android 8.0(API 레벨 26) 이상을 실행하는 기기에 앱을 배포해야 합니다.

    내부적으로 이 구성에서는 simpleperf를 사용하여 앱의 네이티브 코드를 추적합니다. 특정 기기 CPU를 샘플링하거나 샘플링 기간을 매우 정확하게 지정하는 등 simpleperf의 추가 옵션을 지정하려면 명령줄에서 simpleperf를 사용하세요.

  • 시스템 호출 추적: 앱에서 시스템 리소스와 상호작용하는 방법을 검사할 수 있는 자세한 세부정보를 캡처합니다. 스레드 상태의 정확한 타이밍과 기간을 검사하고, 모든 코어에서 CPU 병목 현상의 위치를 시각화하고, 분석할 맞춤 트레이스 이벤트를 추가할 수 있습니다. 성능 문제를 해결하는 경우 이러한 정보가 중요할 수 있습니다. 이 구성을 사용하려면 Android 7.0(API 레벨 24) 이상을 실행하는 기기에 앱을 배포해야 합니다.

    이 트레이스 구성을 사용하는 동안 코드를 계측하여 프로파일러 타임라인에서 중요한 코드 루틴을 시각적으로 표시할 수 있습니다. C/C++ 코드를 계측하려면 trace.h에서 제공하는 native tracing API를 사용하세요. 자바 코드를 계측하려면 Trace 클래스를 사용하세요. 자세한 내용은 앱 코드 계측을 참조하세요.

    이 트레이스 구성은 systrace를 기반으로 구축됩니다. systrace 명령줄 유틸리티를 사용하여 CPU 프로파일러에 제공된 것 이외의 옵션을 지정할 수 있습니다. systrace에서 제공하는 추가 시스템 레벨 데이터는 네이티브 시스템 프로세스를 검사하고 삭제되거나 지연된 프레임 문제를 해결하는 데 도움이 됩니다.

    Android 9(API 레벨 28) 이상을 실행하는 기기에서는 시스템 추적 시스템 앱을 사용하여 기기에서 시스템 트레이스를 기록할 수 있습니다.

기록 구성 만들기, 수정 또는 보기

CPU 프로파일러 상단의 기록 구성 드롭다운 메뉴에서 Edit configurations를 선택하여 열리는 CPU Recording Configurations 대화상자에서 기록 구성을 만들고 수정하고 확인할 수 있습니다.

기존 기록 구성의 설정을 보려면 CPU Recording Configurations 대화상자의 왼쪽 창에서 선택하세요.

새 기록 구성을 만들려면 다음 단계를 따르세요.

  1. 대화상자의 왼쪽 상단에서 Add 를 클릭합니다. 그러면 기본 설정을 사용하여 새로운 구성이 만들어집니다.
  2. 구성의 이름을 지정합니다.
  3. Trace Technology를 선택합니다.
  4. 샘플링된 기록 구성의 경우 샘플링 간격을 마이크로초(μs) 단위로 지정합니다. 이 값은 앱의 각 호출 스택 샘플 사이의 시간을 나타냅니다. 더 짧은 간격을 지정할수록 기록된 데이터의 파일 크기 한도에 더 빠르게 도달할 수 있습니다.
  5. 연결된 기기에 기록되는 데이터의 파일 크기 한도를 메가바이트(MB) 단위로 지정합니다. 기록을 중지하면 Android 스튜디오가 이 데이터를 파싱하여 프로파일러 창에 표시합니다. 따라서, 한도를 늘리고 많은 양의 데이터를 기록하면 Android 스튜디오가 파일을 파싱하는 데 훨씬 더 오래 걸리고 응답하지 못하게 될 수도 있습니다.

    참고: Android 8.0(API 레벨 26) 이상을 실행하는 연결된 기기를 사용하는 경우 트레이스 데이터의 파일 크기에 제한이 없으며 이 값이 무시됩니다. 하지만 각 기록 후 기기에서 수집하는 데이터의 양에 주의해야 합니다. Android 스튜디오가 큰 트레이스 파일을 파싱하는 데 어려움이 있을 수 있습니다. 예를 들어, 앱에서 단기간에 많은 메서드를 호출하는 동안 샘플링 간격이 짧은 샘플링된 트레이스 또는 계측된 트레이스를 기록하는 경우 큰 트레이스 파일이 신속하게 생성됩니다.

  6. 변경사항을 수락하고 계속해서 다른 구성을 변경하려면 Apply를 클릭하세요. 적용된 모든 변경사항을 수락하고 대화상자를 닫으려면 OK를 클릭하세요.

Debug API를 사용하여 CPU 활동 기록

앱에서 Debug API를 사용하여 CPU 프로파일러에서 CPU 활동 기록을 시작하고 중지할 수 있습니다.

앱에서 startMethodTracing(String tracePath)을 호출하면 CPU 프로파일러가 기록을 시작하고 stopMethodTracing()을 호출하면 기록을 중지합니다. 이 API를 사용하여 트리거된 CPU 활동을 기록하는 동안, CPU 프로파일러는 Debug API를 활성 CPU 기록 구성으로 표시합니다.

Debug API를 사용하여 CPU 활동의 기록을 관리하려면 Android 8.0(API 레벨 26) 이상을 실행하는 기기에 계측된 앱을 배포하세요.

자세한 내용은 앱을 계측하여 트레이스 로그 생성을 참조하세요.

앱이 시작하는 동안 CPU 활동 기록

앱이 시작하는 동안 CPU 활동을 자동으로 기록하려면 다음 단계를 따르세요.

  1. Run > Edit Configurations를 선택합니다.
  2. Profiling 탭에서 Start recording a method trace on startup 옆의 체크박스를 선택합니다.
  3. 메뉴에서 CPU 기록 구성을 선택합니다.
  4. Apply를 클릭합니다.
  5. Run > Profile을 선택하여 Android 8.0(API 레벨 26) 이상을 실행하는 기기에 앱을 배포합니다.

트레이스 내보내기

CPU 프로파일러로 CPU 활동을 기록한 후 데이터를 .trace 파일로 내보내어 다른 사용자와 공유하거나 나중에 검사할 수 있습니다.

CPU 타임라인에서 트레이스 파일을 내보내려면 다음 단계를 따르세요.

  1. CPU 타임라인에서 내보내려는 기록된 메서드 트레이스 또는 시스템 트레이스를 마우스 오른쪽 버튼으로 클릭합니다.
  2. 메뉴에서 Export trace를 선택합니다.
  3. 파일을 저장할 위치로 이동하여 파일 이름을 지정하고 OK를 클릭합니다.

Sessions 창에서 트레이스 파일을 내보내려면 다음 단계를 따르세요.

  1. Sessions 창에서 내보내려는 기록된 트레이스를 마우스 오른쪽 버튼으로 클릭합니다.
  2. 세션 항목의 오른쪽에 있는 Export method trace 또는 Export system trace 버튼을 클릭합니다.
  3. 파일을 저장할 위치로 이동하여 파일 이름을 지정하고 OK를 클릭합니다.

트레이스 가져오기

Debug API 또는 CPU 프로파일러로 만든 .trace 파일을 가져올 수 있습니다.

프로파일러의 Sessions 창에서 Start new profiler session 을 클릭하고 Load from file을 선택하여 트레이스 파일을 가져옵니다.

CPU 프로파일러에 가져온 트레이스도 CPU 프로파일러에서 직접 캡처한 트레이스와 마찬가지로 검사할 수 있습니다. 다음의 경우는 예외입니다.

  • CPU 활동은 CPU 타임라인을 따라 표시되지 않습니다.
  • 스레드 활동 타임라인은 각 스레드에서 트레이스 데이터를 사용할 수 있는 위치만 나타내며 실제 스레드 상태(예: 실행 중, 대기 중, 일시중지 중)를 나타내지는 않습니다.

트레이스 검사

CPU 프로파일러의 트레이스 창에는 기록된 트레이스의 정보를 보는 방법을 선택할 수 있는 탭이 있습니다.

메서드 트레이스와 함수 트레이스의 경우 Call Chart, Flame Chart, Top Down, Bottom Up 탭에서 선택할 수 있습니다. 시스템 트레이스의 경우 Trace Events, Flame Chart, Top Down, Bottom Up 탭에서 선택할 수 있습니다.

Call Chart 탭을 사용하여 트레이스 검사

Call Chart 탭에는 메서드 트레이스 또는 함수 트레이스가 그래픽으로 표시됩니다. 가로축에는 호출의 기간과 타이밍이 표시되고 세로축에는 피호출자가 표시됩니다. 시스템 API 호출은 주황색으로 표시되고, 앱 자체의 메서드 호출은 녹색으로 표시되고, 타사 API(자바 언어 API 포함) 호출은 파란색으로 표시됩니다. 그림 4에 호출 차트의 예 및 주어진 메서드 또는 함수의 Self 시간, Children 시간, Total 시간의 개념이 나와 있습니다. Top Down 및 Bottom Up을 사용하여 트레이스를 검사하는 방법에 섹션에서 이 개념을 자세히 알아보세요.

그림 4. 메서드 D의 Self 시간, Children 시간, Total 시간을 보여주는 호출 차트의 예

탑: 메서드 또는 함수의 소스 코드로 건너뛰려면 메서드 또는 함수를 마우스 오른쪽 버튼으로 클릭하고 Jump to Source를 선택하세요. 이 기능은 트레이스 창의 어느 탭에서나 작동합니다.

Flame Chart 탭을 사용하여 트레이스 검사

Flame Chart 탭에는 동일한 호출 스택을 집계하는 반전 호출 스택이 표시됩니다. 즉, 같은 호출자 순서를 공유하는 동일한 메서드 또는 함수가 수집되어 플레임 차트에 (호출 차트에 표시된 것처럼 짧은 막대 여러 개가 아니라) 긴 막대 하나로 표시됩니다. 따라서 어느 메서드 또는 함수가 가장 많은 시간을 소비하는지 더 쉽게 확인할 수 있습니다. 하지만, 가로축은 타임라인을 표시하지 않으며, 대신 각 메서드 또는 함수가 실행하는 데 걸리는 상대적인 시간을 나타냅니다.

이 개념을 설명하려면 그림 5의 호출 차트를 이용해보세요. 메서드 D는 B를 여러 번 호출하며(B1, B2, B3), 그중 일부는 C를 호출합니다(C1 및 C3).

그림 5. 여러 메서드 호출에서 공통된 호출자 순서를 공유하는 호출 차트

B1, B2, B3은 동일한 호출자 순서(A → D → B)를 공유하므로, 그림 6에 표시된 대로 집계됩니다. 마찬가지로, C1과 C3도 동일한 호출자 순서(A → D → B → C)를 공유하므로 집계됩니다. C2는 호출자 순서(A → D → C)가 다르기 때문에 포함되지 않습니다.

그림 6. 같은 호출 스택을 공유하는 동일한 메서드 집계

집계된 호출은 그림 7에 표시된 것과 같은 플레임 차트를 만들기 위해 사용됩니다. 플레임 차트의 각 호출에 관해 CPU 시간을 가장 많이 소비하는 피호출자가 먼저 표시됩니다.

그림 7. 그림 5에 표시된 호출 차트를 표시하는 플레임 차트

Top Down 및 Bottom Up을 사용하여 트레이스 검사

Top Down 탭에는 메서드 또는 함수 노드를 확장하면 피호출자가 표시되는 호출 목록이 표시됩니다. 그림 8에는 그림 4의 호출 차트에 관한 하향식 그래프가 표시되어 있습니다. 그래프의 각 화살표가 호출자에서 피호출자로 연결됩니다.

그림 8에 표시된 대로 Top Down 탭에서 메서드 A의 노드를 확장하면 메서드의 피호출자, 메서드 B와 D가 표시됩니다. 그런 다음 메서드 D를 확장하면 메서드의 피호출자, 메서드 B와 C 등이 표시됩니다. Flame chart 탭과 마찬가지로, 하향식 트리는 같은 호출 스택을 공유하는 동일한 메서드에 관한 트레이스 정보를 집계합니다. 즉 Flame chart 탭에는 Top down 탭이 그래픽으로 표시됩니다.

Top Down 탭에는 각 호출에 사용된 CPU 시간을 설명하는 데 도움이 되는 다음과 같은 정보가 표시됩니다(시간은 선택된 범위에 관한 스레드의 총 시간의 비율로도 표시됩니다).

  • Self: 그림 4에 메서드 D에 관해 표시된 대로, 메서드 또는 함수 호출에서 피호출자의 코드가 아니라 자체 코드를 실행하는 데 사용한 시간.
  • Children: 그림 4에 메서드 D에 관해 표시된 대로, 메서드 또는 함수 호출에서 자체 코드가 아니라 피호출자를 실행하는 데 사용한 시간.
  • Total: 메서드의 SelfChildren 시간의 합. 그림 4에 메서드 D에 관해 표시된 대로, 앱에서 호출을 실행하는 데 사용된 총 시간을 나타냅니다.

그림 8. 하향식 트리

그림 9. 그림 8의 메서드 C에 관한 상향식 트리

Bottom Up 탭에는 메서드 또는 함수 노드를 확장하면 호출자가 표시되는 호출 목록이 표시됩니다. 그림 9에는 그림 8에 표시된 트레이스 예를 사용하여 메서드 C에 관한 상향식 트리가 표시됩니다. 상향식 트리에서 메서드 C의 노드를 열면 메서드 C의 각 고유 호출자, 메서드 B와 D가 표시됩니다. B가 C를 두 번 호출하지만 B는 상향식 트리에서 메서드 C의 노드를 확장할 때 한 번만 표시됩니다. 그런 다음 B의 노드를 확장하면 B의 호출자, 메서드 A와 D가 표시됩니다.

Bottom Up 탭은 CPU 시간을 가장 많이(또는 가장 적게) 소비하는 메서드 또는 함수를 정렬하는 데 유용합니다. 각 노드를 검사하여 어느 호출자가 해당 메서드 또는 함수를 호출하기 위해 CPU 시간을 가장 많이 사용하는지 확인할 수 있습니다. 하향식 트리와 비교하여, 상향식 트리에 있는 각 메소드 또는 함수의 타이밍 정보는 각 트리의 상단에 있는 메서드(최상위 노드)에 관한 것입니다. CPU 시간은 해당 기록 중 스레드의 총 시간의 비율로도 표시됩니다. 다음 표에서는 최상위 노드 및 그 호출자(하위 노드)의 타이밍 정보를 해석하는 방법을 설명합니다.

Self Children Total
상향식 트리의 상단에 있는 메서드 또는 함수(최상위 노드) 메소드 또는 함수에서 피호출자의 코드가 아니라 자체 코드를 실행하는 데 사용된 총 시간을 나타냅니다. 하향식 트리와 비교하여, 이 타이밍 정보는 기록 기간에 이 메소드 또는 함수의 모든 호출의 합을 나타냅니다. 메소드 또는 함수에서 자체 코드가 아니라 피호출자를 실행하는 데 사용된 총 시간을 나타냅니다. 하향식 트리와 비교하여, 이 타이밍 정보는 기록 기간에 이 메소드 또는 함수의 피호출자의 모든 호출의 합을 나타냅니다. Self 시간과 Children 시간의 합
호출자(하위 노드) 호출자에 의해 호출될 때 피호출자의 총 Self 시간을 나타냅니다. 예를 들어, 그림 9의 상향식 트리에서 메서드 B의 Self 시간은 B에 의해 호출될 때 메서드 C의 각 실행에 관한 Self 시간의 합과 같습니다. 호출자에 의해 호출될 때 피호출자의 총 Children 시간을 나타냅니다. 예를 들어, 그림 9의 상향식 트리에서 메서드 B의 Children 시간은 B에 의해 호출될 때 메서드 C의 각 실행에 관한 Children 시간의 합과 같습니다. Self 시간과 Children 시간의 합

참고: 주어진 기록에 관해 프로파일러가 파일 크기 한도에 도달하면 Android 스튜디오에서 새로운 데이터 수집을 중지합니다(하지만 기록이 중단되지는 않습니다). 계측된 트레이스에서는 샘플링된 트레이스보다 짧은 기간에 더 많은 데이터를 수집하므로 이 유형의 추적을 수행하는 경우 일반적으로 이러한 일이 훨씬 더 빠르게 발생합니다. 검사 시간을 한도에 도달한 후 발생한 기록 기간으로 확장해도, 사용 가능한 새로운 데이터가 없으므로 트레이스 창의 타이밍 데이터가 변경되지 않습니다. 또한 사용 가능한 데이터가 없는 기록 부분만 선택하는 경우 트레이스 창에 타이밍 정보로 NaN이 표시됩니다.

Trace Events 탭을 사용하여 트레이스 검사

시스템 트레이스를 검사할 때 Trace Events 탭을 사용하여 각 스레드에서 발생한 이벤트의 세부정보를 확인할 수 있습니다.

스레드의 세부정보를 확인하려면 Threads 창에서 스레드를 선택하세요. 이렇게 하면 각 CPU 코어에서의 스레드 활동이 Kernel 창에 강조표시되고 스레드에 관한 이벤트가 Trace Events 탭에 표시됩니다. Trace Events 탭에서 이벤트 위로 마우스 포인터를 가져가면 이벤트 이름과 각 상태에 사용된 시간을 볼 수 있습니다.

예를 들어, 그림 10에서는 Threads 창에서 RenderThread가 선택되고 Kernel 창에 CPU 0과 CPU 1에서의 스레드 활동이 강조표시되고 Trace Events 탭에 특정 이벤트에 사용된 시간이 표시되었습니다.

그림 10. 렌더 스레드의 CPU 활동 및 트레이스 이벤트 보기

시스템 트레이스 정보 검사에 관한 자세한 내용 systrace 문서의 UI 성능 문제 조사 섹션을 참조하세요.

프레임 렌더링 데이터 검사

앱이 기본 스레드 및 RenderThread에서 각 프레임을 렌더링하는 데 걸리는 시간을 검사하여 UI 이상 및 프레임 속도 저하를 유발하는 병목 현상을 조사할 수 있습니다.

프레임 렌더링 데이터를 보려면 시스템 호출을 추적할 수 있는 구성을 사용하여 트레이스를 기록하세요. 트레이스를 기록한 후 그림 11에 표시된 대로 FRAMES 섹션에서 각 프레임에 관한 정보를 찾아보세요.

그림 11. 16ms보다 오래 걸리는 각 프레임은 빨간색으로 표시됨