WinScope는 창 전환 도중 및 이후 WindowManager 및 SurfaceFlinger 상태를 기록하고 분석하는 인프라와 도구를 제공합니다. WinScope는 전환을 재생하고 단계별로 실행하는 데 사용할 수 있는 트레이스 파일에 모든 관련 시스템 서비스 상태를 기록합니다.
트레이스 캡처
userdebug 또는 eng 빌드를 실행하는 기기에서 빠른 설정 또는 adb
를 통해 트레이스를 캡처합니다.
빠른 설정
빠른 설정에서 트레이스를 캡처하려면 다음 단계를 따르세요.
- 개발자 옵션을 사용 설정합니다.
- 개발자 옵션 > 빠른 설정 개발자 타일로 이동합니다.
- WinScope 트레이스를 사용 설정합니다.
- 빠른 설정을 엽니다.
- Winscope 트레이스를 탭하여 트레이싱을 사용 설정합니다.
- 기기에서 창 전환을 실행합니다.
- 작업을 마친 후 빠른 설정을 열고 Winscope 트레이스를 탭하여 트레이싱을 중지합니다.
트레이스는 /data/misc/wmtrace/wm_trace.winscope
와 /data/misc/wmtrace/layers_trace.winscope
에 기록되며 버그 보고서에도 포함됩니다.
adb
adb
를 통해 트레이스를 캡처하는 경우 WindowManager 및 SurfaceFlinger 트레이스를 개별적으로 캡처합니다.
WindowManager 트레이스
WindowManager 트레이스를 캡처하려면 다음 단계를 따르세요.
- 트레이스 사용 설정:
adb shell cmd window tracing start
- 트레이스 사용 중지:
adb shell cmd window tracing stop
- 트레이스 파일 가져오기:
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 트레이스를 캡처하려면 다음 단계를 따르세요.
- 트레이스 사용 설정:
adb shell su root service call SurfaceFlinger 1025 i32 1
- 트레이스 사용 중지:
adb shell su root service call SurfaceFlinger 1025 i32 0
- 트레이스 파일 가져오기:
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
트랜잭션
트랜잭션을 캡처하려면 다음을 실행하세요.
- 트레이스 사용 설정:
adb shell su root service call SurfaceFlinger 1020 i32 1
- 트레이스 사용 중지:
adb shell su root service call SurfaceFlinger 1020 i32 0
- 트레이스 파일 가져오기:
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 웹 앱을 사용합니다. 소스에서 앱을 빌드하거나 사전 빌드된 디렉터리에서 앱을 여세요.
- Android 소스 저장소에서 사전 빌드된 아티팩트를 다운로드합니다.
curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
- 웹브라우저에서 다운로드한 아티팩트를 엽니다.
- WinScope가 열리면 파일 열기를 선택하여 트레이스 파일을 로드합니다.
WinScope 사용
WinScope에서 트레이스 파일을 열고 난 다음, 여러 방법으로 트레이스를 분석할 수 있습니다.
- 타임라인 - 트레이스 이벤트의 시퀀스를 표시합니다. 화살표 키를 사용하거나 각 항목을 클릭하여 타임라인을 탐색합니다.
- 화면 - 화면에 표시된 모든 창을 시각적으로 표시합니다. 창을 클릭하여 계층 구조에서 소스 창을 선택합니다.
- 화면 녹화 - 트레이스와 동기화된 기기 화면을 표시합니다. 타임라인과 함께 이동합니다.
- 계층 구조 - 시스템에 알려진 각 창을 나타냅니다. 일부 창은 버퍼를 포함하지 않지만 창의 하위 요소에서 정책을 설정하기 위해 존재합니다. 표시되는 창은
V
아이콘으로 표시됩니다. - 속성 - 계층 구조에서 선택한 항목의 상태 정보를 표시합니다.