Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

Page 1/1: 1

Fennecの構造 - Jun 19, 2009

Fennecのどんなところがマズいわけ?という話の中で、canvasがどうしてそこででてくるのか、Fennecって実際どんな作りになってるんだ、というツッコミを受けた。なので簡単に解説してみる。

しばらくソースを見るとだんだん分かってくるんだけど、要約するとこんな風になってる。

<window>
  <html:canvas id="browser-canvas"/>
  <box id="browsers" hidden="true">
    <browser/>
    <browser/>
    ...
  </box>
</window>

Firefoxのtabbrowser要素に相当する物は主にJavaScriptで実装されている。canvasは現在フォーカスされているタブに対応するbrowser要素の内容を描画するための物で、1つだけしか存在しない。パンスクロールやズームは全てこのcanvasの再描画でまかなわれてる。ユーザの目に見えているのはこのcanvas要素で、実際のページの内容は画面外の非表示のbrowser要素の中に置かれている。

  • ページの読み込みが完了した時→browser要素の内容をdrawWindow()でcanvasに描画する。
  • パンスクロールする時→canvasを制御するコントローラにあたるJavaScriptオブジェクトが保持している座標情報を変更して、canvasに描画する範囲を変更する。
  • ズームする時→canvasに描画する内容のズーム率を変える。
  • ユーザがリンクをクリックした時→canvas上の座標、パンスクロールの位置、ズーム率の3つから、browser要素内の実際のページにおけるクリック位置を算出して、nsIDOMWindowUtilsの機能でマウスイベントを実際のページに送出する。
  • アニメーション等で再描画が発生した時→browser要素の中にあるページ上で、再描画された箇所の座標情報を持ったMozAfterPaintイベントが発行される。それをFennecのイベントハンドラが検知して、パンスクロールの位置とズーム率を元に「再描画された箇所に対応するcanvas上の座標」を計算し、必要最低限の領域だけ再描画を行う。

何故こうなっているかというと、ズームとスクロールのパフォーマンスの問題かららしい。具体的には、Firefox 3以降のフルズームを使った場合、ズーム率を変えるごとにreflow(ボックスの位置等の計算)が発生してしまうなどのせいでパフォーマンスが落ちてしまうため、使い物にならない。そこで、高速な再描画ができるcanvasが使われることになったということのようだ。

だから現状では、FirefoxでcanvasとdrawWindow()を使った時に起こる問題が全部未解決のまま積み上がってる。例えばFlashなどのプラグインによって描画される箇所はスッポリ抜けるし、select要素のように独自の「ウィンドウ」を形成する物は見当違いの場所にポップアップが出る。そういった問題は当然解決されるべきだ(そして実際、Gecko 1.9.2以降で修正することを目指しているらしい)けれども、それって却って遠回りなんじゃないの? というのが、自分の率直な感想。

Fennec合宿の成果まとめ - Jun 16, 2009

bugzilla上での活動?としてはこんな感じでした。

成果らしい成果は……パッチが1つだけreview+をもらえたチェックインされたことくらいでしょうか。

コメントも何もしてないけど、目を付けたバグ。

感想。Fennecが実用レベルになるのはまだまだまだまだまだまだまだ先だなあ。

というか今Fennecという名前で開発されているブツは、Mozilla Labsが作る新しいUIデザインのモックアップに過ぎない、という風な位置づけのように感じられる。バックエンドで使ってるXULRunnerはモバイル向けの調整が施されていなくて、印刷関係の機能とか、明らかに不要な物がてんこ盛りになっている。中野さん達と色々話したけど、「実用になる製品」の開発を目指すんだったら、僕がこういう風に手出しできるレイヤでゴチャゴチャと小賢しいことをするんじゃなくて、中野さんに書いて貰ったパッチのように、XULRunner自体の方にもっともっと手を入れていく必要があるのだろう。HTML Canvasを描画に使ってるせいで色々酷いことになってるのも、Canvasに手を入れるかDocShellに手を入れるかして、ネイティブ寄りの所で実現するようにすればずっとマシになるはずなのに。とかなんとかそういう「うわぁ……」な現状が色々見えてきたのが、今回の合宿の一番の成果だったのかもしれない。

Fennec for Windows Mobileの実機動画 - May 17, 2009

会社ブログ(みんなで書いてる)でそろそろ実機動画公開していいんじゃないすかねー」「まあもうそろそろ公開しても大丈夫そうな品質になってきたかなー」という感じのことを社内で言ってた(僕は横で見てただけですが)んだけど、本家に先を越されてしまいました。

まあこれ見て分かる通り、春のOSCのバージョンに比べればだいぶ現実的な速度で動くようになってます。池添さん曰く、エミュレータより実機の方が快適じゃん!(まだ遅いけど)とのことでした。今は画面を毎回キッチリ再描画してるからスクロールが遅いけど、モバイル向けに描画キャッシュ的な物を使うようにするとかの手直しをすればもっと速くなる(逆に言うと、今はスクロール中もアニメーションGIFとかが動いてたりして、それでこの速度が出るんだからある意味スゴイとも言える)という風な話も聞きました。

横で見てて思うけど、Windows Mobile(Windows CE)対応は結構基礎の所から見直して頑張ってる感じですね。「アドオンに対応」のバグも、調べてみたらnsIFileとかの物凄く基盤な部分がWindows CE向けにはまだ実装されてなかったせいだった、とかそんな感じで……XULやJavaScriptの話しか分からない僕には、手伝いたくてもまだ手が出せない感じです。

Page 1/1: 1

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード