EGL 配送の診断ログ (BLINKGTK_GX_LOG) の読み方

BLINKGTK_GX_LOG=1 を付けて起動すると、EGL 経路の配送を 1 行 1 事象
出します。画面が出ないとき・表示が遅いときに、どこまで進んだかを外から
追うためのものです。

BJGX <事象> t=<起動からの ms> buf=<wl_buffer の wire id> submit=<通番> …

事象と項目

事象 行に出る項目
bind t= iface= name=
clock t= clk_id=
commit t= buf= submit= op= w= h= stride= fmt= mod=
t= buf= submit= op= w= h= src=
discard t= buf= submit=
present t= buf= submit= tv= refresh= msc= flags= flagnames= clk=
probe t= buf= submit= result= w= h= stride=
release t= buf= submit=
skip t= buf= submit= reason=

事象の意味

事象 いつ出るか
commit buffer を surface に付けて commit した
present compositor が「表示した」と返した
discard compositor が「表示しなかった」と返した
release compositor が buffer を返した (再利用してよい)
skip 送らなかった。reason= に理由
probe 中身の検査結果。result= に判定
bind Wayland の interface を掴んだ
clock 表示時刻の基準時計の id

presentdiscard は排他です。1 つの内容更新に、どちらか一方だけ来ます。

気をつけるところ

表示できているかを判定する

present 行の有無で見てください。

content_present (probe#N=YES/BLANK) は、buffer の中身を CPU から読んで
判定します。環境によっては原理的に読めません (仮想 GPU など)。読めない
環境では UNKNOWN のまま変わらないので、これを判定材料にすると
「表示できていない」と読み違えます。

present は compositor からの返事なので、その環境でも成立します。

この表は実装から起こしています

上の「事象と項目」は release/scripts/gen-gx-log-format.sh が実装の書式文字列
から生成しています。書き写した表は実装とずれるので、生成物にしてあります。