2011-04-28 2 views
3

나는 opengl를 사용하여 3D 아케이드 게임이 될 나의 첫 안드로이드 게임을 만들고 있습니다. 나는 오랫동안 그것을 작업 해 왔는데, 주로 미래를위한 유연성을 위해 엔진을 최적화했습니다.게임 android 프로파일 링 및 최적화

어쨌든 지금은 완전히 게임 기능과 모든 멋진 것들로 끝났지 만, 그것은 내 디버그 전화가 아닌 휴대폰에서 뒤 떨어진다. 이 게임은 모바일 게임을위한 꽤 높은 품질의 그래픽을 가지고 있으므로 약간의 지연이 예상되지만, Nexus S에서 게임을 실행하고 MyTouch 4G에서 게임을 실행하는 것의 성능 차이는 엄청납니다. 이 게임은 LG Optimus (게임은 실행되지만 편안하게 게임하기에는 고르지 못함)와 같은 저가형 휴대 전화에서도 재생할 수 없습니다. 내 넥서스 SI에서는 거의 고르지 못한 움직임 (게임에서 프레임 속도 독립 운동을 구현했습니다)은 거의 없지만 MyTouch 4G에서는 게임이 여전히 재생 가능하지만 훨씬 일반적입니다 .... 그러나 성가신

저는 데스크톱 게임 개발 배경에서 왔으며 최적화는 전에 저에게 관심 있었던 주제가 아니 었습니다. 게임 속도를 높이려면 무엇을 권하고 싶습니까?

가능한 한 코드를 최적화하려고 시도했지만 성능이 크게 향상되었지만 내가 놓친 부분이나 간과되는 부분이있는 것 같습니다. 가득한 엔진과 제비 뽑기와 많은 부호와 더불어 그 거대한 게임.

나는 모든 할당을 추적하고 재생 중에 GC가 실행되지 않도록 런타임에 할당을 취소하거나 잊어 버리지 않았 음을 확인했습니다. 그게 전부 내가 생각할 수있는 기본적으로 모두, 나는 그 밖에 걸림돌을 만들 수있는 다른 무엇인지 모르겠다

그리고 나는 고품질이기는하지만 그것이 게임의 옵션을 추가했기 때문에 그 메쉬의 폴리 카운트를 의심한다. 컴퓨터 게임에서와 같이 Low, Medium 및 High에서 그래픽 품질을 선택할 수 있으며 Low와 High의 차이는 600-900 사이입니다. 내가 알게 된 유일한 개선점은로드 시간입니다. 또한 특별한 후 처리 효과, 조명, 쉐이더, 실시간 SSS 또는 그 중 어떤 것도 없습니다. 그냥 질감이 얼굴 : P

또한 내가 "reggering"reffering은 무작위 동결 있습니다. 나는 그들이 GC다고 확신하지만, 내가 이후로 뭔가 다른 것일 수있다. 생각하다. 나는 모든 할당을 발견하고 제어했다. (많이있다.) 내 게임은 프레임 속도와 무관하므로 해제 할 때마다 플레이어와 적과 모든 것이 앞으로 나아가고 앞으로 나아가고 있습니다. 그러면 이미 어려운 게임이 훨씬 어려워집니다!

저는 프로파일 링과 최적화에 익숙하지 않습니다. 안드로이드 디버그 도구 (또는 다른 타사 도구)를 사용하여 런타임 중에 내 게임이 어떻게 수행되는지, 언제/왜 멈춰서 내가 고칠 수 있는지에 대한 더 나은 그림을 얻을 수 있습니다.

ALSO, 보너스 질문 :) 실제로 휴대 전화를 가지고 있거나 아는 사람들을 모르고 다른 휴대 전화에서 어떻게 작동 하는지를 볼 수있는 방법이 있습니까? 마찬가지로, 얼마나 빨리 그것은 내가 드로이드 X가없는도 사람 나는 모두가 내가하고 생각할 수있는 기본적이다

+0

당신이 이클립스에서 DDMS보기에서 힙 할당을 추적 적이 있습니까? GC가있을 때마다 새로 고침이 나타나므로 정지 메시지가 GC 호출과 상관 관계가 있는지 여부를 확인할 수 있습니다. 여기에서 실제 할당 된 것을 파고 들어갈 수 있습니다. 가장 가능성있는 할당 ('new'' Anything)이기 때문에 자연스럽게 모든 것을 앞에 할당하고 가능한 한 객체 풀을 활용하기를 원할 것입니다. – LeffelMania

+0

참고 : http://stackoverflow.com/questions/5626947/optimize-android-application-before-release – bigstones

답변

6

traceview로 코드를 프로파일 링 해 보셨습니까? 당신이 파일을 작성 완료 할 위치

Debug.stopMethodTracing(); 

다음에서 onCreate에서

Debug.startMethodTracing("myfile"); 

를 삽입 . 결과를 보려면 장치를 컴퓨터에 연결하고 실행

/path/to/android-sdk/platform-tools/adb pull /sdcard/myfile.trace 
/path/to/android-sdk/tools/traceview ./myfile.trace 

이 클래스는 더 많은 시간을 복용하고 어떤 표시됩니다. 더 느린 클래스를 최적화하고/또는 백그라운드 스레드로 이동할 수 있습니다.

일부 휴대 전화에서는 문제가 없다고 언급했는데, 16 메가 바이트/앱 한도 대신 24 메가 바이트/앱 한도를 사용하는 최신 휴대 전화일까요? 이클립스에서 Memory Analyzer을 시도해 보면 메모리 누수 또는 불필요한 대형 객체를 검사 할 수있다. 도움말로 이동 설치하려면 -> 소프트웨어를 설치하고 DDMS보기에서 디버깅하는 동안, 그리고

http://download.eclipse.org/mat/1.1/update-site/ 

를 사용, 선택 덤프 HPROF 파일 (빨간색 화살표와 함께 녹색 유리), 그것은 메모리 분석기를 열어야합니다 .

편집 - 그것은 당신이 here 설명 된대로, 이제 안드로이드 HPROF 파일을 변환해야 할 것 같다

.

+0

디버그 추적에 대한 메모이므로 WRITE_EXTERNAL_STORAGE 권한이 필요합니다. – Peanut

0

을 알고 않는 경우에도 드로이드 X에 갈 것입니다. 나는 그 밖에 무엇을 할 수 있는지 모른다. 지연을 만든다.

많은 사람들이 그렇게하며, 생각하는 것을 시도함으로써 최적화합니다. 그것은 부분적으로, 그러나 부분적으로, 특히 소프트웨어가 큰 경우에 당신을 데려 갈 것이다.

사실, 스냅 샷으로 검색하려면 expose themselves 시간이 걸릴 수 있습니다. 당신은 그것들을 생각할 필요가 없습니다. 그냥 프로그램에 표시하도록하십시오. Here's an example.

0

먼저 logcat이 무엇을 말하고 있는지 자세히 살펴보십시오. 어쩌면 원치 않는 지연 시작에 대한 답을 찾을 수 있습니다. 두 번째로, 메소드 실행이 DDMS를 사용하는 데 걸리는 빈도와 시간을 확인하고자하는 경우. 어떤 환경을 사용하고 있는지 알지 못하지만, Eclipse의 Perspective에는 "Start method profiling"옵션이 있습니다. 몇 초 기다렸다가 클릭을 해제하기 만하면됩니다. 잠시 후 압도적 인 보고서를 받게됩니다. 기기에서 문제가 발생합니다. "앱이 특정 기기에서 어떻게 작동하는지 알고 싶다면 해당 기기에서 테스트해야합니다." 에서 [1]

[1] http://developer.android.com/guide/practices/design/performance.html