Android Studio Profiling (Android Game Developer Summit 2018)

프란체스코 카르 키 : 제 이름은 프란체스코입니다 저는 이전 게임 개발자입니다

몇 년 동안 약 15 년 동안 참호에있었습니다 빌 (Bill)이 언급했듯이 도구는 중요합니다 적어도 나를 위해 게임은 도구만큼이나 훌륭합니다 당신은 그것을 만들기 위해 사용합니다 내가 말했듯이, 도구를 기다리는 데 너무 많은 밤을 보냈다

무언가 또는 프로파일 러를 기다리는 것 내가 좋은 도구를 얻지 못하면 게임을하는 것은 참기 힘든 일입니다 그리고 프로파일 링, 디버깅, 자산을 만들 때, 술집에서 보낼 수있는 시간이 길어지고, 네가 영국 출신이라면 나는 거기에서 일한다 – 또는 당신은 게임을 연마하는 데 쓸 수있다 그것은 아마 시간의 더 나은 사용 일 것입니다 우리는 이것을 얻는다 Google에서 Google 툴을 통해 많은 노력을 기울이고있는 이유입니다

많은 시간을 문자 그대로 사무실에서 보냈습니다 이리저리– 우리는 좋은 도구가 필요합니다 우리는 좋은 도구가 필요합니다 우리는 좋은 도구가 필요합니다 사람들은 이것에 질려합니다

그러나 결과 중 하나는 우리가 지금 가지고있는 것입니다 닥쳐 – 우리는 이제 Android Studio에 기본 프로파일 러를 가지고 있습니다 네이티브 C ++ 프로파일 러 그것은 당신이 아는 모든 프로파일 러와 같은 프로파일 러입니다 현재로서는 Android Studio에 존재합니다

우리는 또한 System Trace를 가지고 있습니다 실행중인 전체 시스템에 대해보다 전체 론적 인 시각을 가지고 있습니다 프로세스를 볼 수 있습니다 우리는이 예를 보게 될 것입니다 이제 시스템 추적이 존재합니다

그러나 명령 행에서 그것을 사용하여 행운을 빕니다 이제 Android Studio에 추가했습니다 훌륭한 UI와 통합되었습니다 그리고 그것은 내가 가장 좋아하는 것입니다 우리는 그것을 가지고있다

Google API 디버거가 아닌 그래픽 API 디버거 그래픽에 관한 것이지, Google에서의 생활에 관한 것이 아닙니다 물론 OpenGL에서 모든 그리기 호출을 볼 수 있습니다 Vulkan에서 재생할 수 있습니다 그것은 굉장

그리고 그것은 제가 가장 좋아하는 도구입니다 이제 언급했듯이 네이티브 C ++ 스레드를 샘플링 할 수 있습니다 유일한 제한은 API 26, 즉 Android 8에서 작동합니다 그것은 큰 문제가 아닙니다 그것이 작동하는 방식입니다

이제 코드를 작성하고 일부 디버깅 로그를 남겼습니다 내부 루프에서 디버깅 코드를 남기지 않은 경우 손을 들어주세요 당신의 안쪽 루프 나는 너를 믿지 않아

글쎄, 그건 내가 버튼을 클릭했을 때, 일이 조금 느려졌습니다 디버거 가자 자바 코드에서 뭔가 이상하게 보입니다 돼지, 제 신청서 돼지 제 아이 때문에요

그리고 나는 그를 따라 이름을 짓는다 버튼과 CPU를 어떻게 누를 지 알 수 있습니다 바로 저기에 백업되어 있습니다 그리고 네가 예상했던대로, 많은 시간을 차가운 일을하기 위해 소비됩니다 그것은 내부 순환이었습니다

그것은 당신이 아는 다른 모든 프로파일 러와 마찬가지로 프로파일 러입니다 하지만 지금은 존재합니다 그리고 당신은 시간이 걸리는 이런 종류의 일을 할 수 있습니다 추측하려고 노력하는 대신 시스템 추적으로 돌아 가기 시스템 추적은 이벤트 기반 도구이며, 따라서 활성 프로파일 러로 샘플링하지 않습니다

시스템에서 해고 된 이벤트를 기반으로합니다 이 모든 이벤트를 기록한 다음 모든 이벤트를 표시합니다 공통 타임 라인에서 두 애플리케이션을 모두 볼 수 있습니다 및 시스템 프로세스 예

둘 이상의 경우 그리고 이것은 매우 흥미 롭습니다 시스템에서 어떤 것들이 실행되고 있는지를 볼 수 있습니다 그들이 어떻게 전체 론적 인 타임 라인에서 상호 작용하는지 그리고 느린 프레임을 매우 쉽고 빠르게 디버깅 할 수 있습니다

왜냐하면 그것들을 강조하기 때문입니다 프레임이 실행중인 경우 33 이상을 차지합니다 실행하려면 밀리 초, UI가 표시됩니다 이 UI에는 여기에 많은 정보가 있습니다 이 장치 듀얼 코어를 볼 수 있습니다

모든 스레드 스레드를 재정렬 할 수 있습니다 그것들은 공통이다 매우 유용합니다 이 쓰레드 역시 시각적으로 볼 수 있습니다

CPU가 많고 밝은 영역 매우 흥미로운 정보를 볼 수 있습니다 대부분의 CPU는 대부분의 CPU에서 발생합니다 시간은 CPU에서 코어 3에 소비됩니다 다른 코어는 상대적으로 가벼운 편입니다

그 정보를 어떻게 사용합니까? 글쎄, 그것은 당신이하려고하는 것에 달려 있습니다 그러나 예를 들어, 이것은 나에게 말할 것입니다 – 좋아 잠깐만 이 작업을 수행하면 조금 더 나은 프레임 속도를 얻을 수 있습니다 여러 스레드에 분산되어 있습니다

그러나 지금, 당신은 추측 할 필요가 없습니다 이것은 당신에게 말할 것입니다 이 렌더링 된 스레드를 살펴 보겠습니다 여기에서도 꽤 많은 CPU를 사용합니다 그리고 다른 작업도 볼 수 있습니다

병렬로 실행 중입니다 이것은 또 다른 재미있는 정보를 말하고 있습니다 렌더링 된 스레드가 있습니다 주 스레드와는 별도로 잘 했어 일반적으로하고 싶은 것

이제이 추적을 살펴 보겠습니다 일반 비트 맵,이 특정 스레드 많은 CPU를 사용하고 있습니다 좋아 괜찮아 하지만 한 코어에서 점프하고 있음을 알 수 있습니다

다른쪽에 다른 코어로 예정되어 있습니다 자, 이미 너는 상상해 보자 귀하의 프레임 속도를 치고 그래서 당신은 프레임 속도에 좋습니다

이 정보는 OK, 이 스레드에 대한 선호도를 느린 코어로 설정해 봅시다 그리고 배터리를 절약 할 수 있는지 봅시다 아니면 빠른 코어에 놓고 보자 이런 식으로 배터리를 절약 할 수 있다면 작품은 일찍 끝났기 때문에

그래서 모든 것이 더 빨리 잠들 수 있습니다 그냥 뛰어 다니는 대신에 그러나 그들이 원하는 테이크 아웃 추측하기보다는 시각적으로 볼 수 있습니다 그것은 우리가 전에하고 있었던 일입니다 빨간색 막대는 느린 프레임임을 나타냅니다

그리고 이것은이 프레임이 200 밀리 초가 걸리므로 33 이상이됩니다 이상한 일이 일어나고 있습니다 이는 일부 저작물이 이 프레임 동안 풀렸다 이상하게 보일 수 있습니다 그러나 다시, 당신은 그것을 시각적으로 봅니다

앞서 언급했듯이이 시스템은 이벤트를 기록합니다 이벤트를 삽입 할 수 있으며이를 기록 할 수 있습니다 예를 들어 그림자가 있다고 가정 해 봅시다 그림자 패스를보고 싶다 스레드가 실행 중이고 시스템의 나머지 부분과 비교하여 발생합니다

자, 사용자 정의 이벤트를 삽입 할 수 있습니다 그리고 나는 당신에게 훌륭한 조각 추적을 제공합니다 기능 시작 부분에 붙이십시오 그리고 거기에 있습니다 그 기능이 기록됩니다

앞으로 우리는 메인 UI, 또한 Vsyncs 당신이보기에 매우 흥미 롭습니다 시각적으로 스레드와 Vsync를 치고 있습니다 이제 초당 30 프레임과 60 프레임을 모두 지원합니다 레이싱 게임을하는 경우 30시에 뛰고 싶지 않아야합니다

제한 사항 API에는 제한 사항이 있습니다 API 23 이전입니다 현재는 단일 프로세스로만 실행됩니다 그러나 그것은 해제 될 것입니다

추적을 내보낼 수 있습니다 그러나 아직 추적을 가져올 수 없습니다 그것은 고쳐 져야합니다 이 시점에서 이상하게 보입니다 그것은 고쳐 져야합니다

우리가하는 모든 일과 같이 진행중인 작업입니다 내 세번째, 잘 했어 그래픽 디버거가 올바르게되었습니다 그리고 GAPID는 운이 좋은 사람들을 위해 선택을 사용하는 사람들을위한 것입니다 그것은 선택의 시작입니다

거기에 도착 추적, 추적 캡처, 시각적으로 추적을 검사하고 추적을 재생하십시오 같은 장치에 한계가 있습니다 그것은 Vulkan과 OpenGL 모두에서 작동합니다

Android, Mac 및 Windows에서 작동합니다 그것이 그 모습입니다 정말 끝내주는 군 그것이 나에 대해 매우 행복합니다 모든 [INAUDIBLE] 단일 화면을 볼 수 있습니다

프레임 버퍼를 사용하면 셰이더, 즉시 쉐이더를 변경하고 재생할 수 있습니다 장치에 GIF GAPID를 사용하는 것을 좋아하는 아티스트라면 아주 좋습니다 앞서 언급했듯이 OpenGL과 Vulkan에서 작동합니다 몇 가지 제한 사항이 있습니다

예를 들어, 정확하게 기억한다면, OpenGL은 중간 실행을 포착하지 못하게합니다 벌컨은 그렇다 몇 가지 제한 사항이 있습니다 그러나 이것 역시 진행중인 작업이며, 존재하는 것에 감사드립니다 그리고 그들은 그것을 향상시키고 있습니다

이러한 제한은 결국 해제 될 것입니다 그것 모두 사용할 수 있습니다 시스템 추적은 현재 사용할 수 있습니다 Canary에서 32로로드 할 수 있습니다

카나리아에 대한 링크가 있습니다 GAPID가 공개되면 10입니다 의견을 보내주십시오 그리고 이제 모두들 우리에게 피드백을주십시오

우리는 실제로 피드백을 요구합니다 이 일이 갭 (GAPID)에서 작동하지 않는다고 나에게 말하면, 나는 말 그대로 팀, 팀의 리더, 그리고 나는 그것이 고정 될 때까지 책상 위에서 두드리기 시작한다 그리고 그들은 그것을 했으므로 작동합니다 그것은 완전히 작동합니다 질문이 있으시면 언제든지

어서 관객 : 추적 [INAUDIBLE]에서 시작하고 멈출 수 있습니까 ?? FRANCESCO CARUCCI : 아닙니다 나에게 편지 해 관객 : 시작하고 멈출 수 있는지 궁금 해서요 Trace는 프로그래밍 방식으로, 우리가 큰 경기를 가지고 있기 때문에

때로는 특정 영역을보고 싶을 때도 있습니다 게임의 FRANCESCO CARUCCI : 아닙니다 내 이메일을 써라 그리고 나는 버그를 제기 할 것이다 그것에 대한 유스 케이스를 말해 줄 수 있습니까? 관객 : 네

많은 시간, 이러한 그래픽 시스템, 네가 오기 전에 그들은 기억이 다 떨어진다 심지어 당신이보고 싶은 게임 영역으로 FRANCESCO CARUCCI : 당신이 의미하는 바를 봅니다 예, 좋은 지적입니다 나에게 편지 해

관객 : 당신은 어떤 특색입니까? 시작하고 중지하려합니까? 시작하고 녹음하려고합니까? CPU 트레이스, 또는 메모리, 또는 – 아 관객 : [INAUDIBLE] FRANCESCO CARUCCI : 예, 이것은 여러 프레임을 캡처합니다 그건 그렇고 그러나 그것은 캡처하는 데 사용할 수 있습니다 – 개인적으로 저는 한 프레임 만 캡처하는 거대한 팬입니다 모든 사람이 이것에 대해 나와 동의하지 않습니다

나는이 것에 나 자신에 동의한다 관객 : 안녕하세요 나는 실제로 GAPID를 이겼다 현재 Vulkan의 경우 메타 실행 캡처를 수행 할 수 있습니다 따라서 게임에는 API가 없습니다

또는 사용할 수있는 API가 없습니다 프로그래밍 방식으로 시작하십시오 하지만 당신이 시작할 수있는 버튼이 있습니다 [INAUDIBLE] 네 입장 우리가해야 할 산산조각이 어느 정도 있습니다

따라서 오버 헤드가 있지만 전체 드라이버만큼 중요하지는 않습니다 부 GLES를 위해, 우리는 그것에 대해 연구하고 있습니다 API로 트리거하도록하려면 매우 쉽게 추가 할 수 있습니다 좋은

관객 : [INAUDIBLE] FRANCESCO CARUCCI : 나는 몰랐다 고맙습니다