Linux および Windows 用のポータブル GUI ツールキットに取り組んでいますが、パフォーマンスの問題が発生しています。いくつかのシステム (悪名高い Intel GMA 3650 をベースにした私のネットブックなど) では、インストールされているドライバーによって非常に大きな影響を受けます。
しかし、パラドックスとは何ですか。フォールバック VESA ドライバーがインストールされている場合、コードのパフォーマンスは、専用の専用ドライバーを使用する場合よりもはるかに高くなります。
一方、独自のドライバーでは、予想通り、コンピューターのパフォーマンスは非常に優れています。ハードウェア アクセラレーションは機能し、高解像度のビデオは問題なく再生されます。このようにして、私のコードだけがこの奇妙な逆の影響を受けます。
私のコードは、Xlib、Xft、pthread などの一般的なライブラリを使用しています。
Windows ポート (WinApi を使用) は、問題なく高速に動作します。ワインでも。別のパラドックスとして、Windows 用にコンパイルされ、WINE で実行されている同じプログラムは、Linux でコンパイルされたプログラムよりもはるかに高速に描画されます。
この効果の理由と、それを修正するためにどこを掘り下げるか.
ソースコードリポジトリは化石scmによって管理されています
1 つのテスト例はtrunk/freshlib/TestFreshLib.fpr
(単純な FASM コンパイル用freshlib/test_code0/TestLib.asm
)にあります。
これは移植可能な例であり、Windows および Linux 用にもコンパイルできます。
更新 1:いくつかの考えとコードの調査の後、私は仮説を立てました。ウィンドウにグラフィックを描画するために、2 つの異なる方法を使用しています。
- 線や四角形を描画するための XLib 描画関数の使用。
- Xft ライブラリを使用してテキストを描画します。
私がテストしているコントロールは、画像バッファがサーバー側のピックスマップであるダブルバッファリングを使用しています。
しかし、IIRC では、Xft はクライアント側で描画し、画像をビットマップ画像として X サーバーに送信しますが、XLib はサーバー側で直接描画します。
これら 2 つの方法 (およびハードウェア アクセラレーションとの接続) の間で競合が発生し、パフォーマンスが低下する可能性はありますか?