사용자 정의보기 캔버스 드로잉 (postInvalidate()) 및 HardwareAcceleration이있는 간단한 2D 게임에서 작업중인 임. 몇 주 동안의 성능 분석을 통해 업데이트 및 드로잉 작업을 인터페이스 Choreographer.FrameCallback을 통해 VSYNC 펄스와 동기화하기로 결정했습니다. 생각하는 Im는 매끄러운 운동을 얻는 적당한 방법 thats이다.더블 버퍼링은 프레임 렌더링 속도를 늦춘다. systrace 분석
그러나 여전히 고르지 못한 움직임을 겪고 있습니다. 나는 systrace으로 분석했으며, 이는 BufferQueue와 관련이 있다는 것을 알게되었습니다. 이중 버퍼링이 설정되면 프레임 시간이 16ms를 초과합니다. 좀 설명 내 추적의 스크린 샷을했다 :
전체 그리기 작업은 자신의 새로운 빈 버퍼를 큐에서 제거 할 수있는 SurfaceFlinger의 (소비자)의 버퍼 출시를 기다립니다.
정상적인 행동인지 또는 그 원인이 될 수 있는지 알려주실 수 있습니까?
자세한 답변을 보내 주셔서 감사합니다. 나는 GLSurfaceView로 OpenGL ES 1 구현을하기로 결정했다. 이제 각 프레임에서 onDrawFrame() 메서드의 델타 시간을 측정합니다. 마지막 과거의 프레임 시간에 대한 보간법 (커다란 "stutter-jumps"제거)은 큰 발전이었습니다. 이제 내 게임은 매우 부드럽습니다! – methusa