창 전환 트레이싱

WinScope는 창 전환 도중 및 이후 WindowManager 및 SurfaceFlinger 상태를 기록하고 분석하는 인프라와 도구를 제공합니다. WinScope는 전환을 재생하고 단계별로 실행하는 데 사용할 수 있는 트레이스 파일에 모든 관련 시스템 서비스 상태를 기록합니다.

트레이스 캡처

userdebug 또는 eng 빌드를 실행하는 기기에서 빠른 설정 또는 adb를 통해 트레이스를 캡처합니다.

빠른 설정

빠른 설정에서 트레이스를 캡처하려면 다음 단계를 따르세요.

  1. 개발자 옵션을 사용 설정합니다.
  2. 개발자 옵션 > 빠른 설정 개발자 타일로 이동합니다.
  3. WinScope 트레이스를 사용 설정합니다.
  4. 빠른 설정을 엽니다.
  5. Winscope 트레이스를 탭하여 트레이싱을 사용 설정합니다.
  6. 기기에서 창 전환을 실행합니다.
  7. 작업을 마친 후 빠른 설정을 열고 Winscope 트레이스를 탭하여 트레이싱을 중지합니다.

트레이스는 /data/misc/wmtrace/wm_trace.winscope/data/misc/wmtrace/layers_trace.winscope에 기록되며 버그 보고서에도 포함됩니다.

adb

adb를 통해 트레이스를 캡처하는 경우 WindowManager 및 SurfaceFlinger 트레이스를 개별적으로 캡처합니다.

WindowManager 트레이스

WindowManager 트레이스를 캡처하려면 다음 단계를 따르세요.

  1. 트레이스 사용 설정:
    adb shell cmd window tracing start
  2. 트레이스 사용 중지:
    adb shell cmd window tracing stop
  3. 트레이스 파일 가져오기:
    adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope

필요한 경우 다양한 WindowManager 트레이스 설정의 기본 로그 구성을 변경할 수 있습니다.

  • 트랜잭션 또는 프레임의 로그 빈도 설정:
    adb shell cmd window tracing [frame | transaction]
  • 로그 항목에 관한 상세 수준 구성:
    adb shell cmd window tracing level [all | trim | critical]
  • 최대 버퍼 크기를 KB 단위로 설정:
    adb shell cmd window tracing size size-value
  • 버퍼 상태, 로그 수준, 잔여 용량, 요소 수 덤프:
    adb shell cmd window tracing status

SurfaceFlinger 트레이스

SurfaceFlinger 트레이스를 캡처하려면 다음 단계를 따르세요.

  1. 트레이스 사용 설정:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. 트레이스 사용 중지:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. 트레이스 파일 가져오기:
    adb pull /data/misc/wmtrace/layers_trace.winscope layers_trace.winscope

필요한 경우 다양한 SurfaceFlinger 트레이스 설정의 기본 로그 구성을 변경할 수 있습니다.

  • 최대 버퍼 크기를 KB 단위로 설정:
    adb shell su root service call SurfaceFlinger 1029 i32 size-value
  • 로그 항목에 관한 상세 수준 구성:
    adb shell su root service call SurfaceFlinger 1033 i32 flags

트랜잭션

트랜잭션을 캡처하려면 다음을 실행하세요.

  1. 트레이스 사용 설정:
    adb shell su root service call SurfaceFlinger 1020 i32 1
  2. 트레이스 사용 중지:
    adb shell su root service call SurfaceFlinger 1020 i32 0
  3. 트레이스 파일 가져오기:
    adb pull /data/misc/wmtrace/transaction_trace.winscope

더 많은 트랜잭션 병합 파일은 `/data/misc/wmtrace/`에서 `transaction_merges_*.winscope`라는 이름으로 제공됩니다.

상태 덤프 생성

WinScope는 버그 보고서에서 WindowManager 및 SurfaceFlinger 상태의 스냅샷을 읽습니다. 버그 보고서는 상태를 별도의 proto 파일로 proto 폴더 내에 저장합니다. adb를 사용하여 상태 덤프를 생성하려면 다음 명령어를 실행합니다.

WindowManager

adb exec-out dumpsys window --proto > window_dump.winscope

SurfaceFlinger

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

트레이스 분석

트레이스 파일을 분석하려면 WinScope 웹 앱을 사용합니다. 소스에서 앱을 빌드하거나 사전 빌드된 디렉터리에서 앱을 여세요.

  1. Android 소스 저장소에서 사전 빌드된 아티팩트를 다운로드합니다.
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. 웹브라우저에서 다운로드한 아티팩트를 엽니다.
  3. WinScope가 열리면 파일 열기를 선택하여 트레이스 파일을 로드합니다.

WinScope 사용

WinScope에서 트레이스 파일을 열고 난 다음, 여러 방법으로 트레이스를 분석할 수 있습니다.

WinScope 스크린샷
그림 1. WinScope에서 트레이스 분석
  • 타임라인 - 트레이스 이벤트의 시퀀스를 표시합니다. 화살표 키를 사용하거나 각 항목을 클릭하여 타임라인을 탐색합니다.
  • 화면 - 화면에 표시된 모든 창을 시각적으로 표시합니다. 창을 클릭하여 계층 구조에서 소스 창을 선택합니다.
  • 화면 녹화 - 트레이스와 동기화된 기기 화면을 표시합니다. 타임라인과 함께 이동합니다.
  • 계층 구조 - 시스템에 알려진 각 창을 나타냅니다. 일부 창은 버퍼를 포함하지 않지만 창의 하위 요소에서 정책을 설정하기 위해 존재합니다. 표시되는 창은 V 아이콘으로 표시됩니다.
  • 속성 - 계층 구조에서 선택한 항목의 상태 정보를 표시합니다.