プレスリリース一覧に戻る

メモリーとレンダリングのパフォーマンス

2026年03月12日(木) ·バージョン 0.3.4

Fog Panther v0.3.4 では、メモリー消費量を大幅に削減し、レンダリング性能を向上させる一連の内部最適化を行いました。特に大きなドキュメントや長時間の編集セッションで効果があります。

取り消し履歴の圧縮

取り消しシステムは、タイルのスナップショットを非圧縮のコピーではなく、zstd で圧縮したデータとして保存するようになりました。これまで 16 KB の生のタイル バッファーを保存していたブラシ ストローク、塗りつぶし、フィルターの適用は、すべて取得時に zstd レベル 1 で圧縮されます。このレベルはおよそ 500 MB/s で動作します。

その結果、タイルの内容に応じて、取り消し 1 ステップあたりのメモリーが 3 分の 1 から 10 分の 1 に減りました。これまで大きなブラシ ストロークを約 80 回分保持していた 256 MB 固定の取り消し容量で、実質的に 250 から 800 回分を保持できるようになりました。取り消しとやり直しは引き続き瞬時に行われます。タイル 1 つの展開にかかる時間はおよそ 11 マイクロ秒です。

ディスク上の FOG 形式はすでに zstd 圧縮を使用していたため、保存されたファイルに変更はありません。影響を受けるのはメモリー上の表現だけです。

表示サーフェスのキャッシュ

RGBA8 以外のピクセル形式 (RGBA16、CMYKA、グレースケール) では、画面表示に使う Cairo の ARGB32 サーフェスを作るために形式の変換が必要です。これまでは、この変換が毎フレーム、表示中のすべてのタイルで実行されていました。

タイルは最初の変換後に表示サーフェスをキャッシュするようになりました。このキャッシュは、タイルのデータが変更されるたびに自動的に無効化されます。表示中のタイルが 200 個ある 16 ビットのドキュメントでは、パンやズームの際に 1 フレームあたり 200 回の形式変換が不要になります。

タイル キャッシュの先行的な削減

これまでタイル キャッシュは、メモリー上限を超えてからエントリーを破棄していたため、一時的にメモリーが上限を超えていました。現在は容量の 90% で削減を始めて 85% まで減らすため、ヒステリシス幅が生まれ、次の挿入時に破棄が繰り返されることを防ぎます。

チェッカーボード パターンのキャッシュ

透明部分を示すチェッカーボード パターンは、毎フレームすべてのドキュメントの背後に描画されますが、これまではレンダリングのたびに作成と破棄を繰り返していました。現在は一度だけ作成され、プロセスが終了するまで再利用されます。

バグ修正

このリリースには、最適化作業のレビュー中に見つかったいくつかの正確性に関する修正も含まれています。

  • 表示キャッシュが、生データのアクセサーだけでなく、ピクセルを書き込むすべての関数で正しく無効化されるようになりました
  • 圧縮されたタイルが展開後に空 (void) になる場合に、履歴のシリアライズが不正なフラグ バイト列を書き込まなくなりました
  • 消去操作のやり直しで、空のタイルが正しく復元されるようになりました
  • キャッシュ済みのタイルを別のピクセル形式のタイルに置き換えた場合のタイル キャッシュのメモリー計算が正しくなりました
  • チェッカーボード パターンの初期化がスレッド セーフになりました