プロジェクト

全般

プロフィール

提案 #1417

完了

Photo ModelのGdkPixbufCacheの戦略を再検討する

Shibafu Midorino さんがほぼ5年前に追加. ほぼ5年前に更新.

ステータス:
終了
優先度:
通常
対象バージョン:
プラグイン名:

説明

TL;DR

オンメモリキャッシュを時限キャッシュからWeakrefに変えることで、実用上困らない範囲でメモリの節約ができるかも。

現在の問題

Photo ModelのGdkPixbuxCacheが、過剰にアイコンキャッシュを持つことが度々あります。
短時間の起動セッションであればあまり問題にはなりませんが、長時間起動していると不要である可能性のあるPixbufが蓄積され続けることとなります。

また、現在のキャッシュ戦略ではごく短時間に、または複数のTLで複数回出現したユーザーのアイコンは一気に生存期間が長くなります。
これは必要以上に生存するオブジェクトを増やしているおそれがあります。

もっとも、アイコン程度であればあまり大きなPixbufではないので、十分なメモリを持つ環境では無視できるとも言えます。

変更案

GdkPixbufCacheを現在の時限キャッシュから、Weakrefを用いて現在使用されているもののみ生かすようにする案が、mikutter Slackにて出ています。
頻繁にTLに出現するユーザーにフォーカスを当てたキャッシュ戦略であり、不要になったPixbufはすぐに捨てられるようになります。

また、ディスクキャッシュをもっと活用するように改良する案も上がっていて、これらを組み合わせることで
ネットワークに負荷をかけすぎることもなく、メモリの節約が期待できます。
(これは別チケットで良さそうです)

添付資料

常用環境においてキャッシュ戦略を変えることでメモリ消費がどのように変化するかを調査するため、以下の条件を基準として設定した。

  • mikutter 4.0.0 (27493b3d)
  • Pixbufの生成元を特定するため、Pixbufにタグ情報を追加できるようにするパッチを適用
  • 私の普段使いのプロファイル (プラグイン約60個)
    • moguno/mikutter-subparts-image
    • toshia/image-file-cache-ng
    • shibafu528/pixbuf_profiler (今回のPixbuf数のプロファイル記録用で作成したプラグイン)

そして、それぞれ以下の追加条件でプロファイルをとった。

  1. vanilla = 上記環境そのままで実行
  2. nocache = 上記環境のgtk_photo_pixbuf.rbをカスタマイズし、一切オンメモリキャッシュを使わないようにした状態で実行

現在の実装はキャッシュとしては機能を果たしているが、ほとんど減ることがなく増加し続けていることが分かる。


ファイル

mikutter-pixbuf-profile-20191229_vanilla.pdf (33.1 KB) mikutter-pixbuf-profile-20191229_vanilla.pdf Pixbufプロファイル (通常環境) Shibafu Midorino, 2020-01-02 18:01
mikutter-pixbuf-profile-20191229_nocache.pdf (31.3 KB) mikutter-pixbuf-profile-20191229_nocache.pdf Pixbufプロファイル (オンメモリキャッシュなし) Shibafu Midorino, 2020-01-02 18:01
mikutter-pixbuf-profile-20200107_vanilla.pdf (23.5 KB) mikutter-pixbuf-profile-20200107_vanilla.pdf Pixbufプロファイル (tag: 4.0.2) Shibafu Midorino, 2020-01-08 01:10
mikutter-pixbuf-profile-20200107_weakstorage.pdf (23.1 KB) mikutter-pixbuf-profile-20200107_weakstorage.pdf Pixbufプロファイル (WeakStorage化 102150e1) Shibafu Midorino, 2020-01-08 01:10

他の形式にエクスポート: Atom PDF