앱 개발자에게 가장 어려운 문제 중 하나는 매끄럽고 결함이 없는 애니메이션을 만드는 것입니다. 특히 시스템에서 리소스를 많이 사용하는 백그라운드 작업을 실행 중인 경우에 디버깅하기가 어렵습니다. 글리치가 앱으로 인해 발생하는지 시스템으로 인해 발생하는지 확인하기 어려울 수 있습니다. 하지만 프로파일러 도구를 사용하면 잘못된 동작의 가능한 원인을 식별할 수 있습니다.
ChromeOS에서 렌더링
게임과 같이 미세 조정된 앱은 일반적으로 이중 버퍼링을 사용하여 사용자 응답 시간을 가능한 한 짧게 유지합니다. 하지만 성능을 저하시킬 수 있는 요소가 많습니다. 예를 들어 프레임을 렌더링하는 데 시간이 너무 오래 걸리면 렌더링된 결과가 다음 버퍼 스왑을 위해 준비되지 않아서 이전 프레임이 반복됩니다.
그러면 렌더러가 다음 프레임 렌더링을 시작할 수 없으므로 더 많은 문제가 발생합니다. 이 시나리오는 Android 모바일 개발자에게 익숙합니다. 앱이 ChromeOS에서 실행되는 경우 상황이 훨씬 더 복잡합니다.
데스크톱에서 실행 중인 앱은 화면의 디스플레이 프레임에 직접 렌더링되지 않습니다. 대신 데이터를 텍스처로 렌더링합니다. 일반적으로 그래픽을 텍스처로 렌더링하는 여러 앱이 있습니다. 시스템에서는 컴포지터로 모든 텍스처를 단일 데스크톱 이미지로 결합하여 화면의 뷰를 구성합니다.
컴포지터는 백그라운드에서 투명하게 작동하지만 GPU 파이프라인을 최대한 활용하기 위해 한 프레임 시간 지연을 도입했습니다. 이 지연은 시스템 성능 변동을 완화하고 비대칭 부하의 균형을 유지하는 데 도움이 됩니다.
OS가 열심히 작동하면 GPU가 압착되어 프레임이 렌더링되는 시점과 화면에 표시되는 시점 사이에 지연이 발생할 수 있습니다. 시스템에서 하드웨어에 따라 4중 버퍼링을 사용하여 보완할 수 있습니다. 버퍼링 수준이 더 깊어지더라도 그래픽 파이프라인에 여전히 결함이 있을 수 있습니다.
ARC 그래픽 추적기
ChromeOS에는 버퍼가 시스템에 침투하는 방식, 메모리 스왑이 발생하는 시기, CPU/GPU 사용량, 애플리케이션이 특정 시점에 실행하는 작업을 보여주는 프로파일링 도구가 있습니다(다음 이미지 참고).
프로파일러 설정
프로파일러를 사용하려면 M75 이상을 실행해야 합니다. 최상의 결과를 얻으려면 Intel 기기를 사용하세요.
프로파일러를 사용하기 전에 트레이스로 앱을 시드하세요.
trace를 포함할 위치의 코드에 Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);를 추가합니다. customTrace 접두사로 시작하는 Event를 사용합니다. 접두사는 트레이스 메시지에 표시되지 않습니다.
프로파일러를 설정하려면 다음 단계를 따르세요.
- 개발자 모드를 사용 설정합니다.
- Chrome 설정을 열고 ARC graphic buffers visualization tool(ARC 그래픽 버퍼 시각화 도구)을 사용 설정합니다.
chrome://arc-graphics-tracing로 이동합니다.
프로파일러 실행
- 글리치 시 중지를 선택합니다.
- Android 앱을 실행합니다.
- Android 앱이 활성 상태이고 포커스가 있으면
Control+Shift+G를 누릅니다.
글리치가 발생하면 브라우저 창이 팝업됩니다. 타임라인을 확대하고 축소하려면 W 및 S 키를 사용하세요.