2016-11-13 14 views
2

NativeActivityを使用してOpenGL ES 2アプリケーションを作成しました。これは、タッチ入力を使用してドラッグできる6つのテクスチャ付き三角形をレンダリングします。アプリは、レンダリング後にglClear()を前に、eglSwapBuffers()を呼び出して、できるだけ早くレンダリングしています。予想どおり、フレームレートは約60 fpsの表示周波数に制限され、シーンは円滑に動きます。ただし、しばらくして(10〜60秒)フレームレートが60 fpsのままであっても、動きがぎりぎりになります。私が使用しているデバイスはOnePlus 3です。Android OpenGL occasional stutter

最初は、バッテリーの節約モードであると思われましたが、調査ではCPUの周波数とスタッターの間に相関はないことが明らかになりました。

面白いことに気づいたけど、queueBuffer()実行時間が上がるとスタッターが始まります。

これはSYSTRACE 前スタッターです:これは前から後への移行時にSYSTRACEある After stutter ::これはSYSTRACE 後スタッターある Before stutter Transition

私はどのように停止しますアプリが吃音から?

+0

任意のコードを見ずに助けて非常に難しいが...ガベージコレクションの問題だろうか?各フレームに多くのオブジェクトを作成していますか? –

+0

NativeActivityを使用していますが、現在はJavaオブジェクトをまったく使用していません。 – gq3

答えて

0

私はまだ吃音の正確な原因はわかりませんが、回避策を見つけることができました。Choreographer.postFrameCallbackにフレームをレンダリングし、eglPresentationTimeANDROIDを将来2つのvsyncに設定してください。これにより、吃音の原因の1つと思われるバッファキューがいっぱいになるのを防ぎます。

ボーナスとして、タッチ入力レイテンシも少し改善されました。ここ

さらに詳しい情報:Minimize Android GLSurfaceView lag