나는 Android 용 OpenGL 게임을 가지고 있습니다. 화면이 눌려지면 좋은 60fps로 실행됩니다. 손가락을 뗍니다. 약 30fps로 돌아갑니다. 터치 이벤트/릴리스가 스레드의 우선 순위를 올리거나 낮 춥니 다. 그렇다면 어떻게 이것을 복제하여 상수 60fps로 유지할 수 있습니까? 이것은 갤럭시 노트 2에 관한 문제 일뿐입니다.갤럭시 노트 2의 안드로이드 스레드 성능/우선 순위 화면이 눌려 졌거나 놓을 때
답변
난 당신이 및 setRenderMode(RENDERMODE_CONTINUOUSLY)
를 사용하는 가정합니다.
30, 60 FPS
는 의 구현 장치의 화면 새로 고침이라하고 있음을 나타냅니다. 대부분의 디스플레이는 60Hz로 새로 고침되어 60FPS를줍니다.갤럭시 노트 2는 화면에 아무런 감각이없는 경우를 30Hz로 화면 재생을 제한하는 몇 가지 절전 기능이 가능성이 높습니다. 이 기능을 사용 중지 할 수있는 방법이 있는지 확인하십시오.
AFAIK, OpenGL ES는 화면 새로 고침 빈도에 대한 표준을 지정하지 않으므로 FPS의 차이에도 불구하고 동일한 속도로 게임을 실행/느낄 수 있도록 조절 기능이 필요합니다.
예.
이 현상을 관찰 할 수있는 가장 좋은 방법은 활성화 "주파수"태그로 systrace을 사용하는 것입니다. 루팅 된 장치가 필요할 것이므로 systrace가 활성화 된 장치가 필요합니다.
systrace는 다양한 구성 요소에 대한 클록 주파수의 변화를 기록합니다. 장치마다 다르지만 보통 코어 당 CPU 클럭과 GPU 메모리 속도를 얻을 수 있습니다. 프레임 속도가 떨어지는 동시에 그 중 몇몇이 크게 떨어지는 것을 볼 수 있습니다.
이 작업을 수행하는 동기는 전원 요구 사항을 감소시키고 배터리 수명을 연장하는 것입니다. 당신의 손가락이 화면과 접촉하는 동안, 당신은 적극적으로 뭔가를하고 있고, 그 장치는 가능한 한 반응 적이어야한다는 가정이 있습니다. 잠시 후 시계는 현재 작업 부하에 적합한 수준으로 느려집니다. 느려지기를 기다리는 시간과 느려지는 시간을 결정하는 휴리스틱 스는 각 장치에 맞게 조정됩니다.
는 (이건 그냥 앉아 인위적으로 CPU의 클럭 속도를 지탱하는 방법으로 멀티 코어 장치에서 회전 스레드를 만드는 사람들 발생했습니다. 권장하지 않습니다. 또한 this answer을 참조하십시오.)바닥 이것은 스레드 우선 순위를 조정하는 간단한 문제가 아니라는 것입니다. 게임 속도가 느려지는 것을 인식하고 (게임 속도를 프레임 속도에 독립적으로 업데이트하여) 적응하거나 부드러운 애니메이션을 원할 때 장치를 더 높은 전력 모드로 유지하는 방법을 찾아야합니다.
(집에서 놀고 싶은 사람 : Grafika 사본을 만들고 "GL 앱 기록하기"활동을 시작하십시오. 화면에서 손가락을 드래그하면 모든 것이 잘되지만, 시작 수있는 몇 초 앱이 뒤 떨어지는 드롭 된 프레임 카운터가 상승. 넥서스 5, 넥서스 7 (2013), 그리고 다른 사람에 본 확인할 수 있습니다.)
초당 30 프레임을 나쁜 결과이 아니다. 인간은 초당 24 프레임을 볼 수 있습니다 :) –