このブログは「Accelerated 2D Canvas Benchmarks」を翻訳したものです。
この3部作の前編では、Qt Canvas Painterとその斬新な新機能についてご紹介しました。本記事では、2Dキャンバスのパフォーマンス向上の点に焦点を当て、パフォーマンスに対する私たちの包括的なアプローチがベンチマークでどのように表れるかを実証します。
まずは概要から始め、その後、実際にこれらの結果がどのように得られたのかについて説明していきましょう:
ここで、改めて必須の警告について触れておきましょう:
Qt Canvas Painterは、Qt 6.11におけるテクニカルプレビューです。つまり、現時点ではAPIやABIの安定性を保証するものではありません。
また、これらのベンチマークはQt 6.11.0 RCを使用して実施された点にも注目すべきです。Qtの高速化された2Dキャンバス機能の開発が進むにつれ、パフォーマンスはさらに向上する可能性が高いでしょう。
Qt Canvas Painterの主な目標の一つは、高いパフォーマンスを実現することであり、特にGPUを搭載したモバイル/組み込みデバイスにおいてそれを実現することです。これを検証するためには、当然ながら、実際のハードウェア上で、アクセラレーションされた2Dキャンバスに対する適切なベンチマークテストを行う必要があります。また、このベンチマークテストには、公平な比較を行うために、他の描画手法も含まれているべきです。
このため、Qt Canvas PainterとQPainterでまったく同じテストケースが実装されているQCPainterBenchアプリケーションを使用します。このアプリケーションには、個別に有効化または無効化できる以下の6つのテストが含まれています:
このアプリケーションを使えば、各テストケースを個別に有効にして結果を比較することで、個々の描画機能を比較することが可能になります。しかし、このブログ記事の目的としては、主に高速化された2Dキャンバス機能の平均的な予想パフォーマンスを大まかに把握したいと考えているため、そこまで詳細に掘り下げる時間はありません。そこで、デフォルトのテストが有効な状態でベンチマークを実行します。つまり、「Flower」以外のすべてのテストが有効になっている状態です。
包括的な結果を得るために、以下のシステムでテストを実施しています:
留意すべき点として、QPainter OpenGLのアンチエイリアシングは4倍MSAAを使用するように設定されています。これはパフォーマンスと品質のバランスが取れた設定であり、テストしたどのシステムにおいても、パフォーマンスの大幅な低下を引き起こすことはありません。Qt Canvas Painterは、独自の頂点ベースのアンチエイリアシングを使用しています。また、QSG_NO_VSYNC=1を使用してタイマーベースのレンダリングを強制しているため、結果はVSyncの影響を受けません。
こちらは、テスト対象の2台のタブレットでベンチマークアプリケーションが動作している様子を収めた短い動画です。
このテストでは、レンダリング回数を増やし(1回、2回、4回、8回など)、それが平均FPSにどのような影響を与えるかを測定しました。当初、レンダリング性能は画面の更新頻度によって制限されていましたが、レンダリング回数を増やし続けると、フレームが欠落するようになりました。
以下は、テスト対象となったすべてのシステムにおけるベンチマーク結果です。
上記の結果からは多くの結論が導き出されますが、私が特に興味深いと感じた点は以下の通りです:
パフォーマンスの数値をまとめると、このブログ記事の冒頭と同じ結論に達します:
一般的なPCでは、Qt Canvas PainterのパフォーマンスはOpenGLバックエンドを使用したQPainterと比較して約2倍、低スペックのAndroidタブレットでは約5倍、ハイエンドのAndroidタブレットでは約10倍高速です。
私たちは、高速化された2Dキャンバスについて、具体的かつ実用的なベンチマークと正確な結果を提供できるよう最善を尽くしました。しかし、これらの結果が検証され、さまざまなシステムでのさらなる結果が得られると大変ありがたいです。そこで、皆様には最新のQt 6.11(プレリリース版)をインストールし、ご自身の開発環境、あるいはできればターゲットシステム上でQCPainterBenchを実際に実行していただくことをお勧めします。結果は、こちらのコメント欄やQtフォーラムのスレッドに投稿していただくか、CanvasPainterコンポーネントに関するQtバグトラッカーのチケットを作成していただくことができます。