앱 개발자에게 가장 어려운 문제 중 하나는 매끄럽고 결함과 버벅거림이 없는 애니메이션을 보장하는 것입니다. 특히, 시스템에서 리소스를 많이 사용하는 백그라운드 작업도 실행 중인 경우 디버깅이 어렵습니다. 버벅거림이 앱이나 시스템으로 인해 발생하는지 쉽게 확인할 방법은 없습니다. 하지만 잘못된 동작의 가능한 원인을 식별하는 데 도움이 되는 프로파일러 도구가 있습니다.
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 키를 사용하여 타임라인을 확대/축소하고 축소합니다.