Winscope 실행

Winscope 추적은 Android 프레임워크의 일부입니다. 이 페이지에서는 Winscope 트레이스 뷰어를 로컬에서 다운로드, 빌드, 실행하는 데 필요한 단계를 간략히 설명합니다.

로컬에서 Winscope 빌드

Winscope 트레이서를 실행하도록 PC를 설정하려면 다음 단계를 따르세요.

  1. Android 소스 다운로드
  2. Winscope 폴더로 이동합니다.

    cd development/tools/winscope
    
  3. 다음을 사용하여 종속 항목을 설치합니다.

    npm install
    

    사용 가능한 명령어 목록을 보려면 npm run를 실행합니다.

  4. 다음을 사용하여 모든 프로덕션 및 테스트 타겟을 빌드합니다.

    npm run build:prod
    
  5. 다음을 사용하여 Winscope를 실행합니다.

    npm run start
    

별도의 부품 빌드

다음 명령어를 사용하여 Winscope의 개별 부분을 별도로 빌드할 수 있습니다.

명령어 설명
build:trace_processor
Perfetto의 trace_processor 최신 버전을 체크아웃하고 빌드합니다.
build:protos proto 정의를 다시 컴파일합니다.

테스트 실행

Winscope에는 단위 테스트와 엔드 투 엔드 테스트가 포함되어 있습니다. 실행하려면 npm run <command>를 사용하세요.

명령어 설명
test:unit:ci CI
또는 사전 제출 후크의 경우 덜 상세한 형식으로 단위 테스트를 실행합니다.
test:unit:dev 로컬 개발을 위해 더 상세한 형식으로 단위 테스트를 실행합니다.
이 모드는 변경사항을 감시하고 올바른 테스트를
자동으로 다시 실행합니다.
test:e2e
교차 도구 프로토콜과 같은 엔드 투 엔드 테스트를 실행합니다.
test:presubmit:quiet CI 또는 사전 제출 후크용으로 더 간결한 형식으로 모든 사전 제출 단위 테스트, 린터, 그래프
분석을 빌드합니다.
test:presubmit 로컬 개발을 위해 더 상세한 형식으로 모든 사전 제출 단위 테스트, 린터, 그래프 분석을 빌드합니다.

test:all 로컬 개발을 위해 모든 테스트 (단위 테스트 및 엔드 투 엔드 테스트), 린터, 그래프 분석을 더 상세한 형식으로 실행합니다.

@IntDef 매핑 업데이트

@IntDef는 Android에서 정수의 가능한 값을 제한하는 데 사용되는 주석입니다. Winscope는 이러한 주석의 매핑을 사용하여 정수 대신 값의 이름을 표시합니다.

@IntDef 매핑을 업데이트하려면 다음 단계를 따르세요.

  1. 주석 전처리기를 실행할 :framework-minus-apex-intdefs를 빌드합니다.

    mp :framework-minus-apex-intdefs
    
  2. 생성된 intDefMapping.json 파일을 사전 빌드 저장소에 복사합니다.

    $ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
    
  3. repo upload를 사용하여 Winscope에서 변경사항을 업로드합니다.

기타 명령어

Winscope 스크립트에는 빌드 및 테스트 외에도 표에 표시된 것과 같은 다른 기능이 포함되어 있습니다. 실행하려면 npm run command를 사용하세요.

명령어 설명
format:check prettier를 사용하여 코드 형식 지정 문제를 확인합니다.
format:fix prettier를 사용하여 코드 형식 지정 문제를 확인하고 자동으로 수정합니다.
eslint:check eslint를 사용하여 코드 형식 지정 문제를 확인합니다.
eslint:fix eslint를 사용하여 코드 형식 지정 문제를 확인하고 자동으로 수정합니다.
tslint:check tslint를 사용하여 코드 형식 지정 문제를 확인합니다.
tslint:fix tslint를 사용하여 코드 형식 지정 문제를 확인하고 자동으로 수정합니다.
deps_graph:check_cycles 순환 종속 항목에 대한 코드를 분석합니다.

문제 해결

다음 도움말을 사용하여 문제를 해결하세요.

  • 오류 ProtocolError: missing required '<FIELD>' 또는 TypeError: Cannot read property '<PROP>' of null

    • 이는 새 필수 필드가 포함된 새 proto 정의로 트레이스 파일이 생성된 경우에 발생합니다.

      1. 올바른 Winscope 버전(마스터, S, R)에서 트레이스를 열고 있는지 확인합니다.
      2. proto에서 새 필드를 만드는 경우 npm run build:protos를 사용하여 Winscope에서 proto를 다시 컴파일합니다.

  • 설치된 일부 종속 항목 버전이 잘못됨 (빌드 실패)

    • package.jsonpackage-lock.json의 변경사항을 되돌립니다. node_modules를 삭제합니다. npm install를 다시 실행합니다.
  • proto 파일 중 하나에 새 필드를 추가했습니다. 어떻게 표시하나요?

    • Winscope는 컴파일 시의 proto 정의가 사용되므로 새 필드는 기본적으로 표시되지 않습니다. 새 필드를 표시하려면 npm run build:protos를 사용하여 프로토를 다시 빌드합니다.