BLINKGTK_GX_LOG) の読み方BLINKGTK_GX_LOG=1 を付けて起動すると、EGL 経路の配送を
1 行 1 事象で
出します。画面が出ないとき・表示が遅いときに、どこまで進んだかを外から
追うためのものです。
BJGX <事象> t=<起動からの ms> buf=<wl_buffer の wire id> submit=<通番> …
buf= は compositor 側の wl_buffer の wire idsubmit= は commit ごとに振る通番。buf=
と対にして 1 回の提出を指すsubmit= は常に数字とは限りません。
通番が振られなかった行は submit=-t= は BlinkGTK 内部の経過 ms。compositor
の時刻ではありません| 事象 | 行に出る項目 |
|---|---|
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 |
present と discard
は排他です。1 つの内容更新に、どちらか一方だけ来ます。
op= は commit
行にだけあります。 present 行には出ません。present 行にあるのは clk= (下記) ですop= に入りうる値は attach+viewport /
attach / destroy / nonecommit 行の後半は経路で変わります。dmabuf 経路は
stride= fmt= mod=、src=shm で stride=
fmt= mod= は出ませんclk= は present 行の tv=
がどの時計に基づくかを示す POSIX の clockid_t-present 行の有無で見てください。
content_present (probe#N=YES/BLANK)
は、buffer の中身を CPU から読んで
判定します。環境によっては原理的に読めません (仮想 GPU
など)。読めない
環境では UNKNOWN
のまま変わらないので、これを判定材料にすると
「表示できていない」と読み違えます。
present は compositor
からの返事なので、その環境でも成立します。
上の「事象と項目」は
release/scripts/gen-gx-log-format.sh
が実装の書式文字列
から生成しています。書き写した表は実装とずれるので、生成物にしてあります。