Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

창 전환 추적

WinScope는 창 전환 도중, 그리고 창 전환 이후의 WindowManager와 SurfaceFlinger의 상태를 기록하고 분석하는 인프라와 도구를 제공합니다. WinScope는 이와 관련된 모든 시스템 서비스 상태를 추적 파일로 기록하여 전환을 단계별로 다시 재생할 수 있습니다.

추적 캡처

userdebug 또는 eng 빌드를 실행하는 기기에서 빠른 설정 또는 adb를 통해 추적을 캡처할 수 있습니다.

빠른 설정

빠른 설정에서 추적을 캡처하려면 다음 단계를 따르세요.

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

추적은 /data/misc/wmtrace/wm_trace.pb/data/misc/wmtrace/layers_trace.pb에 기록되며 버그 보고서에도 포함됩니다.

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.pb wm_trace.pb

다양한 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.pb layers_trace.pb

다양한 SurfaceFlinger 추적 설정의 기본 로그 구성을 선택적으로 변경할 수 있습니다.

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

상태 덤프 생성

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

WindowManager

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

SurfaceFlinger

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

추적 분석

추적 파일을 분석하려면 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 아이콘으로 표시됩니다.
  • 속성 - 계층 구조에서 선택한 항목의 상태 정보가 표시됩니다.