QtQuick のパフォーマンス:タイミングを考慮する
Performance Considerations And Suggestions の Timing Considerations を訳してみました。
タイミングを考慮する
アプリケーションの開発者であるみなさんは、Qt の描画エンジンが 60 フレーム毎秒のリフレッシュレートでコンスタントに描画ができるよう努力をしなければいけません。60 FPS というのは、フレーム間のおおよそ 16 ミリ秒以内に各処理が終了する必要があることを意味し、これには描画のプリミティブをグラフィックスハードウェアにアップロードする処理も含まれます。
実際にアプリケーション開発者がすべきことは以下のとおりです。
- 非同期のイベント駆動の処理を心がける
- 重い処理は別スレッドで行う
- イベントループを自分で回さない
- 数ミリ秒ブロックする処理をフレーム毎に行わない
これらが適切に守られない場合にはフレーム落ちが発生し、ユーザーの使い勝手に大きな影響がでます。
※注意: QML から実行される C++ のコード内で、処理をブロックしないように独自の QEventLoop を使用したり QCoreApplication::processEvents() を実行するのは危険です。シグナルハンドラの処理やバインディングの処理中にそのようなイベントループに入った場合でも QML エンジンは他のバインディングやアニメーション、トランジションなどの処理を続けます。これにより、両者のデータの整合性がとれなくなることがあります。