Bromure 5 はブラウザに GPU を与える
Bromure Web は Chromium を Linux VM の中で動かすが、その VM には GPU がなかった。そのため WebGL のフレームも合成されるレイヤーも、すべて CPU が描いていた。macOS 27 では、Bromure 5 が各ブラウザ VM に Metal を裏で使う GPU を与える。3 つの WebGL ワークロードで、バッチ時間の中央値は 170、965、3,555 ms から 21、32、68 ms に下がった。同じ Mac のネイティブ Chrome と比べると、これらのワークロードでのバッチ完了時間は 7% から 61% 長い。
ブラウザの作り手は数字で速さを売る。Apple の Safari のページは Safari を「世界最速の ブラウザ」と呼び、Apple による 2026 年 8 月の テストをもとに、macOS 上の MotionMark で Chrome より 5.3x 速く描画すると主張する。 MotionMark は「グラフィック性能に 焦点を当てる」ベンチマークだ。Google は Speedometer で「2024 年 8 月以降 22% の 向上」を 報告し、1 日 10 分ブラウズするユーザーにとって 1 億 1,600 万時間の待ち時間の節約に なると見積もった。2026 年 6 月にはJetStream で 469、 Speedometer で 61 という 記録的スコアを発表した。 Microsoft は、バージョン 134 から「Microsoft Edge は Speedometer 3.0 ベンチマークで測定して 最大 9% 速い」と言う。 Blink、Gecko、WebKit の各チームは Speedometer 3.0 を 共同で作った。
あなたは Bromure Web をそうしたブラウザと比べる。だから Bromure Web はそれらに 遅れずについていかなければならない。
GPU のないブラウザ
Bromure Web は、あなたの Mac 上の使い捨ての Linux VM で Chromium を動かす。Bromure 5 まで、その VM には GPU がなかった。
Apple の ParavirtualizedGraphics フレームワークは「仮想マシンで動く macOS 向けに
ハードウェアアクセラレーションされたグラフィックを
実装する」。
これは macOS ゲストのためのサポートされた経路だ。Linux ゲスト向けには、Virtualization
フレームワークが、ディスプレイサイズを指定して構成する Virtio グラフィック
デバイス
を提供している。私たちの VM では、それは Chromium に画面を与えたが 3D アクセラ
レーションは与えなかった。そのため Chromium は、OpenGL を CPU で動かす Mesa の
llvmpipe にフォールバックし、GPU による合成をオフにした。ページは正しいピクセルを
描いたが、地図、canvas のグラフ、3D ビューア、デザインツールは這うように遅かった。
Bromure 5 はどうやって GPU を加えるか
macOS 27 では、アプリが VZCustomVirtioDeviceConfiguration で独自の Virtio
デバイスを実装できる。Bromure 5 はこれを使って標準の Virtio GPU(デバイスタイプ 16)
を見せるので、ゲストに独自のカーネルドライバは要らない。ゲストは Ubuntu 24.04 と
標準の virtio_gpu カーネルモジュールを使う。対応するブラウザイメージには、
バージョンを固定してパッチを当てたユーザー空間の Mesa と、ブラウザの動画統合も
含まれている。
WebGL のフレームは、いまでは次の経路をたどる。
- Chromium が ANGLE を通して Mesa の VirGL ドライバに描く。
- VirGL が OpenGL コマンドを Virtio GPU のキューで送る。
- Mac 上のレンダラーワーカーが、それを Metal 上の ANGLE で再生する。
- ブラウザのウィンドウが、完成したフレームを IOSurface として表示する。
- VM ごとにレンダラーが 1 つ。 各ブラウザ VM は、サンドボックス化された専用の レンダラープロセスを持つ。テストでは、2 つのワーカーが同じ識別子を使い回しても 互いに独立したサーフェスを保ち、1 つ目を閉じたあとも 2 つ目は動き続けた。
- ネイティブのカーソル。 ゲストが送るカーソル画像から、macOS がポインタを描く。
- H.264 はハードウェアで。 Bromure はゲストの動画デコーダを VideoToolbox に つなぐ。AV1 は引き続き Chromium がソフトウェアでデコードする。
- グラフィックのみ。 このデバイスが運ぶのは描画と動画デコードで、汎用の GPU 計算は運ばない。そのため VM 内のコードがあなたの GPU で機械学習の処理を動かす ことはできない。
数字
1 台の Mac で、1 つの WebGL ワークロードを 3 通りに動かした。新しいレンダラーを使う
Bromure VM 内の Chrome、同じ VM で Apple のグラフィックデバイスを使う(つまり
llvmpipe で動く)Chrome、そして macOS 上の Chrome だ。
| ワークロード | Bromure VM、Metal レンダラー | 同じ VM、Apple VZ グラフィック(ソフトウェア) | macOS 上のネイティブ Chrome |
|---|---|---|---|
| 64 × 64 で 2,048 回の描画 | 20.8 ms | 169.5 ms | 12.9 ms |
| 1,280 × 720 で 64 回の描画、シェーダー 32 反復 | 32.2 ms | 965.2 ms | 22.8 ms |
| 1,920 × 1,080 で 24 回の描画、シェーダー 128 反復 | 68.2 ms | 3,555.1 ms | 63.9 ms |
各数値は 5 回の試行の中央値で、GPU 処理のバッチ 1 つを終えるまでの実時間だ。小さい ほうが良い。

ソフトウェア描画と比べて、新しい経路は 8.1x、30.0x、52.1x 速く、ピクセルの処理量が 増えるほど差は広がった。ネイティブ Chrome と比べると、VM は 1.61x、1.41x、1.07x の 時間がかかった。最もコストが高いのは小さな描画呼び出しを大量に行う場合で、最も重い シェーダーでは VM はネイティブとの差が 7% 以内に収まった。
構成: Apple M5 Pro(CPU 18 コア、64 GB)上の Bromure 5.0.1、macOS 27.0.1。VM は Ubuntu 24.04 ARM64、Mesa 25.2.8、9 vCPU、4 GB。3 つの経路すべてで Chrome 154.0.8037.57 を使った。各サンプルはまずウォームアップし、最後に GPU に処理を 終えさせる 1 ピクセルの読み戻しを行う。そのため計測時間にはブラウザ、ドライバ、 読み戻しが含まれ、シェーダーのコンパイルは含まれない。
フレームを画面に届ける
フラッシュで公開する。 Virtio GPU のゲストは、まずスキャンアウトのリソースを 指定し、中身の準備ができてからフラッシュする。最初の版はスキャンアウトの時点で 公開していたので、描きかけのサーフェスを表示することがあった。いまの Bromure は フラッシュでウィンドウを更新する。
リサイズ中は上限つきで保持する。 新しいサイズでの最初のフレームは、ページが 再描画される前なので、ほぼ黒だったり穴だらけだったりすることが多い。リサイズ中、 新しいフレームが描かれていないように見える間は、Bromure は直前に描かれたフレームを 上限つきの時間だけ画面に残し、ホストとゲストが歩調を合わせてリサイズを進める。この 判定は保持する側に倒してあるので、暗いページではリサイズ中に一瞬遅れることがある。 リサイズ以外のときは、フレームはすぐに表示される。
VM 4 台、タブ 24 個、サイト訪問 40 回のトレース付きの実行で、200 秒の録画 4 本に ほぼ黒のフレームは 1 つもなかった。
カーソルのアルファ。 Linux はカーソル画像をアルファチャンネルのない形式で確保し、 そのメモリをアルファ付きのカーソルとして使う。レンダラーはゲストが書いたアルファ値を 保つので、カーソルは透明なままだ。
バックプレッシャー。 ゲストは、ホストが再生するより速く 3D コマンドを送れる。 Bromure は 1 回の送信を 1 MiB に制限し、フレームのキャプチャには Metal のコマンド キューを 1 つ使い回す。
どうやって作ったか
実装はすべて Astra 6.1 が行った。Bromure の中で 2 つのエージェントとして動き、1 つは Mac 上、1 つは Linux 内にいた。私たちは要件を定め、結果をテストした。
- macOS のエージェントは、レンダラー、Virtio デバイス、表示と入力を作った。
- Linux のエージェントは、Mesa と VirGL のパッケージング、前提条件のチェック、 そして VM 内のポインタエージェントとリサイズ監視を作った。
- 独立した回帰テストとソースレビューが、途中で作業を確認した。
2 つのエージェントは同じ共有フィーチャーブランチで作業した。Bromure のエージェント メッセージングを通じて、2 つの環境の間でメッセージ、添付ファイル、依頼、テストの 証拠をやりとりした。ホストはメッセージを仲介し、検査し、記録し、添付ファイルを マシン間でコピーする。近く登場する Bromure Sidecar アプリはこの広い取り組みの 一部であり、出荷したときに説明する。
オンとオフの切り替え
Bromure 5 では、Metal レンダラーは各 Bromure Web プロファイルのパフォーマンスに ある。既存のプロファイルも含めて、デフォルトでオンだ。
- macOS 27 が必要だ。macOS 26 以前では、Bromure はソフトウェアでの描画を続ける。
- グローバル設定が引き続きマスタースイッチで、変更は新しいウィンドウに適用される。
- オフにしたプロファイルは、旧来のグラフィック経路を使う専用の VM を持つ。
- VM イメージには、私たちが新しいレンダラー向けに検証したことを示すマーカーが必要だ。 マーカーがなければ、Bromure はソフトウェアにフォールバックする。
旧来のグラフィック経路は macOS 27 で検証し、macOS 26 の Mac でもテストした。新しい コードには macOS 27 以降が必要だ。