Expand description
フォント取得の非同期キュー(レンダリングをブロックしない)。
仕様は spec/resource_loading.md。
§なぜ必要か
CSS/JS/フォントは parse_and_layout の中から同期的に取得されており、
取得が終わるまでレイアウトが進まなかった。
実測で 5.3MB の Noto Sans JP のダウンロードが描画を止めていた
(画像だけは既に image_loader_thread + IMAGE_QUEUE で非同期化済み)。
§方針(不変条件 R-1〜R-5)
- R-1: 未取得でもレンダリングは先へ進む(内蔵フォントで描く)
- R-2: サイズを理由に打ち切らない。最後まで取得する
- R-3: 取得完了は次のレイアウトでキャッシュ経由で反映される
- R-4: 同一 URL の重複取得はキュー段階で排除する
- R-5: 結果は
/cache/browser/へ保存し、次回はネットワークを叩かない
Structs§
- Font
Queue 🔒 - 取得待ちのフォント URL。
Constants§
- MAX_
FONT_ 🔒WORKERS - 同時に走らせるフォント取得ワーカーの上限。
- MAX_
KEEPALIVE_ 🔒BATCH - 1 本の接続でまとめて取る最大件数。
Statics§
- FONTS_
UPDATED 🔒 - 【2026-07-31】取得完了を描画側へ知らせるフラグ(不変条件 R-3)。
- FONT_
QUEUE 🔒 - FQ_
CACHED 🔒 - キャッシュ命中で早期 continue した回数。
- FQ_
EXITS 🔒 - ワーカーが終了した回数。
- FQ_
FETCH 🔒 - 実際に取得へ進んだ回数。
- FQ_
IN_ 🔒FETCH - 取得(
https_get_binary_keepalive)の中に居るワーカー数。 - FQ_
ITERS 🔒 - ループを回った回数。
- FQ_
PENDING 🔒 - 直近に観測した
pendingの長さ。 - FQ_
PUMP_ 🔒BLOCKED - 溜まっている取得要求に対してワーカーを起こし直す。
- FQ_
SPAWNS 🔒 - ワーカーを起こした回数。
- FQ_
WORKERS 🔒 - 稼働中のフォントワーカー本数の写し。
- STYLE_
ARRIVE_ 🔒TICK - スタイルシートが届いた時刻(tick, 0 なら未到着)。
- STYLE_
ENQUEUE_ 🔒TICK - フォント取得を予約する。即座に戻る(R-1)。
Functions§
- diag_
line 🔒 - 観測値を 1 行で出す。
draw()の節目から呼ぶ。 - enqueue_
font 🔒 - enqueue_
kind 🔒 - 種別を指定して積む。取り出しは優先度の高い順(
fetch_limit::Kind)。 - enqueue_
kind_ 🔒deferred - 積むだけでワーカーを起こさない版。
- font_
loader_ 🔒thread - 背景でフォントを取得してキャッシュへ書く。
- in_
fetch_ 🔒count - pending_
higher_ 🔒than - pending_
len 🔒 - 取得待ちのフォント/CSS/JS 件数。待機判定(
[IDLE]行)から使う。 - pump 🔒
- spawn_
workers 🔒 - 溜まっているぶんに対してワーカーを起こす。
enqueue_kind_deferredと対で使う。 - store_
worker_ 🔒count - 稼働本数を写す。ロックを持っている側から呼ぶ。
- take_
fonts_ 🔒updated - 前回の確認以降にフォント取得が完了したか。確認したらフラグを下ろす (何度も再レイアウトを繰り返さないため)。
- worker_
count 🔒