Skip to main content

Module font_queue

Module font_queue 

Source
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§

FontQueue 🔒
取得待ちのフォント 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 🔒