リリース日: 2026-09-19 / Chromium: 153.0.8010.36 / 言語: 日本語 | English
レンダリングエンジンを Chromium 153 に更新しました。
GtkWidget *a = blink_web_view_new_with_profile("tab1");
GtkWidget *b = blink_web_view_new_with_profile("tab2");これまでは 1 プロセスの全 WebView が profile と cache
を共有していました。同じ URL を
複数の view で開くと、2
つ目以降はキャッシュに当たるため、実際の読み込みは 1
回しか
起きません。view
を増やしたときのコストを測る用途では、そのままでは測れませんでした。
- _ のみですprofiles/<name>/Cache に置きます。blink_web_view_new())
はこれまでどおりメモリ上ですblink_gtk_get_profile_path() が返す値は変わりません
(プロセスの profile)permission-request シグナルの種別名が 13 種から
40 種になりました。これまで
"unknown" で届いていた 27
種に名前が付き、アプリが何の許可かを見て判断できます。
読書アプリが実際に使うものが含まれます —
screen-wake-lock (読書中に画面を消させない)
/ local-fonts / persistent-storage /
automatic-fullscreen / pointer-lock。
execute_javascript の結果が NULL
になりうるとヘッダに書いていましたが、"null" の 4
文字ですblink_gtk_set_gpu_mode() を
blink_gtk_init()
の前に呼ぶと、その経路で
起動します。
blink_gtk_set_gpu_mode(BLINK_GPU_MODE_EGL); /* init より前 */
blink_gtk_init(&argc, &argv);blink_web_view_get_gpu_mode()
は初期化の後、実際に動いている経路を返します。
起動完了のログにも「描画経路=
blink_web_view_new_with_gpu_mode() で EGL
を指定しても、経路は切り替わって
いませんでした。外部利用者からのご報告で分かりました。
描画経路はエンジンの初期化中に確定し、GPU
プロセスへ渡す起動フラグもそこで
決まります。WebView を作る時点ではもう変えられないため、この API
が行う
環境変数の設定は効きません。起動ログはどちらの場合も EGL
と表示するので、
指定が効いているかを外から確かめる手段もありませんでした。
同じ compositor・同じページで測った配送の件数です。
| 書き方 | EGL の配送 | CPU 経由 |
|---|---|---|
環境変数 BLINKGTK_GPU_MODE=egl のみ |
5 | 0 |
new_with_gpu_mode(EGL) + 環境変数 |
5 | 0 |
new_with_gpu_mode(EGL) のみ |
0 | 5 |
環境変数を併用していない場合、EGL を指定したつもりで CPU
ピクセル経路で
動いていました。ゼロコピーの経路とは性能特性が異なります。
blink_web_view_new_with_gpu_mode()
は初期化より前に呼ぶ場合はこれまでどおり
使えます。初期化の後に別の経路を指定した場合は警告を出します
— 黙って
別の経路で描くことはしません。
Virtio GPU を使う環境 (仮想機械など) で、GPU 描画
(BLINKGTK_GPU_MODE=egl) の
画面が最初から最後まで白いままでした。外部利用者からのご報告です。
エンジンは「この画面は空だ」と判定するために、描かれた画像を CPU
側から読んで
います。ところがこの種の GPU
では描画が機械の外側で行われるため、読み取り側
には何も見えません。中身はあるのに空と判定し、表示を見送っていました。
動きのないページほど当たりやすい形です。起動直後は数枚しか描かれないため、
その数枚がすべて見送られると、開いたまま白が続きます。動き続けるページは
途中から出ていました。
全部がゼロに見える状態は「空」ではなく「こちらからは確かめられない」として
扱い、表示を止めるのは本当に真っ白なときだけにしました。
同じ device id の GPU
を持つ環境を用意して再現し、直したあとに出ることを
確認しています。 実 GPU
の環境では、判定も表示も従来と変わりません。
これまでは、アプリを起動した時点でスクリーンリーダが動いていないと
アクセシビリティの木が出ませんでした。読み上げを使い始めたときには手遅れで、
アプリを開き直す必要がありました。
起動後に支援技術が現れたことを受け取って、そこから木を出すようにしました。
環境変数での明示 (BLINKGTK_A11Y=1)
も従来どおり使えます。
ページの読み込みが終わる前に窓を閉じると落ちていました。
本を開いた直後に
閉じる、といった普通の操作で当たります。読み終わったあとに閉じる場合は
起きないため、気付きにくい形でした。
原因は当方の作りにあります。ページの入れ物を壊す途中で「読み込みが終わった」
という通知が配られるのですが、その通知の受け口が、既に手放したものを見て
いました。受ける前に受け口を外すようにしました。
利用者側の回避 (閉じる前に読み込みの完了を待つ) は、もう要りません。
外部利用者からのご報告です。待ち時間を 50 ミリ秒から 3 秒まで
9 通りに
変えて、すべて正常に終わることを確認しています。
同じ引き金で別の落ち方 (異常終了の通知が出る形)
もありましたが、こちらも
同じ修正で起きなくなりました。
EGL で描画するとき、当方は buffer
の中身が空かどうかを検査しています。
その記録が、9
枚目以降のフレームについて「表示しない」と書きながら、
実際には表示していました。
利用者がこの記録を根拠に不具合を切り分けようとすると、正しく読むほど
誤った結論に導かれます。実際に 1
か月ほど、そうなっていました。
測った結果と、それを受けて何をしたかを、別の語で書くようにしました。
これまで当方の記録で分かるのは「buffer を送った」ところまでで、
それが実際に画面に出たのかは分かりませんでした。
この版から、Wayland の presentation-time という仕組みを使って、
compositor に問い合わせます。1 回の提出につき「出た (時刻つき)」か
「出なかった」のどちらかが必ず返ります。
BJGX commit t=391 buf=36 submit=2 op=attach+viewport w=861 h=553 ...
BJGX discard t=399 buf=36 submit=2
「中身は空だった」と「中身はあったが画面に出なかった」は別の事象です。
これまでの記録では区別できず、原因の取り違えが起きていました。
既定では 1 行も出ません。
BLINKGTK_GX_LOG=1 を指定したときだけ出ます。
指定しない通常の実行では、描画も表示の判定も一切変わりません。
書式は外部利用者と事前に取り決めたもので、1 行 1
事象・key=value のみ・
区切りは = のみです。buffer
の識別子と提出の連番で、行どうしを結び付けられます。
Windows 版 / MIU Darwin 版の作業に合わせて、画面まわりの実装に
環境非依存の名前を与えました。共通部分のコードから環境ごとの分岐が消えます。
利用者から見える変化はありません。
同梱していたリリースノートに誤りがありました。build1
の記述で「前版の回避を
取り除いた」としていましたが、取り除いていません。この版でも入ったままです。
記述を実物に合わせました。プログラムの中身は build1
と同じで、組版の結果は
変わりません (版数を名乗る文字列だけが 1.2.2-build2
になります)。
縦書きで閉じ括弧が行末に来ると、行が途中で切れる現象がありました。
35 文字入る行に 17 文字しか入らず、しかも
text-align: justify が残りを
引き伸ばすため、字間が倍 (16px → 33.5px)
に開きます。読み手には、
そこだけ間延びした行として見えます。
この版で解消します。同じ条件で 35 文字すべてが 1 行に収まります。
横組みでは起きません。
縦組みに固有の現象です。ただし縦組みの中では
条件を選ばず、書体を変えても (serif / sans-serif / Noto Serif CJK JP
/
Noto Sans CJK JP)、ルビを併用しても、line-height: normal
でも同じように
起きていました。13 通りの設定のうち 8
通りで発生し、この版ではすべて
解消しています。
字間が開くのは text-align: justify
を指定している場合です。指定が無ければ
字間はそのままで、行が途中で終わります。どちらも行が半分で切れる点は同じです。
この現象は当方から上流へ報告し (crbug 542686223)、Chromium
側で修正されました。
修正は Chromium 153 に入っています。
前版 (1.2.1 / Chromium 152) では、当方が独自の回避を入れて
17 文字 → 34 文字まで改善していました。ただし 1
文字は次の行へ落ちたままで、
完全ではありませんでした。この版にもその回避は入ったままです。上流の修正が
効いている状態では、当方の測定範囲でこの回避は結果を変えていません。
測ったのは 1 行に入る文字数です。縦書き 1 段落 (35
文字) を、高さ 544〜564px の
範囲で 1px 刻みに変えながら、1 行目に何文字入るかを数えました。書体は 4
種、
text-align: justify あり、ソフトウェア描画です。
列の充填は測っていません。
段組みで列末にどれだけ余地が残るか (もう 1 行
入る余りがあるか)
は別の量で、この版で改善したとは言えません。段組みの列が
最後まで埋まらない件は別途扱っています。
同梱のデモが --version
に応じます。不具合を報告する際は、この 1 行を貼れば
版が一意に決まります。
$ blinkgtk_browser --version
BlinkGTK 1.2.2-build6 (Chromium 153.0.8010.36)
--help で使い方と、開く URL の指定方法を表示します。
Chromium 153 では、ほかに EventTimingMatchingHTML
(イベント計時の対象判定)
などが既定で有効になりました。BlinkGTK
の利用者が直接触れる範囲での変更は
上記の縦組みが中心です。
blink_gtk_get_version_full()
/blink_gtk_get_build())
は前版で追加したもので、この版でも同じように使えます