Firefox Mobile for Android
         Internals

       Makoto Kato
自己紹介

• 名前: 加藤 誠 / @makoto_kato
• Mozilla Committer
 • Geckoの開発が始まった頃くらいからコードを書
   き始める
   •   初期のI18N関係はNetscapeの社員+自分のコー...
MOBILE
About Fennec

• Fennec = モバイル版Firefoxのコードネーム
• XULRunner (Gecko) + Mobile UI
• UIをタッチデバイス用に最適化しもの
• Gecko (レンダリングエンジン)はそのま...
Fennec

• そもそもの始まりは、NokiaのInternet Tablet
  N770 (Maemo)
Maemo Browser

• 初代Internet TabletはOperaを採用
• 2世代目 (Nokia N800)から、Geckoベースの
  ブラウザを採用
• そこからMozilla独自のモバイル版の開発
MOBILE OS SHARE
Mobile OS Share by Web browsing
Mobile Browsers Share
May 2010 (netmarketshare.com)
ABOUT FENNEC
Concept

• Browsing without borders
 • デスクトップ版と”同じ”レンダリングエンジン
 • Full Web stack
   •   HTML5/CSS3/SVG/WebGL

• モバイルのための機能
...
Version History

• Version 1.0
 • 2010年1月リリース
 • Firefox 3.6ベース / Maemo only
• Version 1.1
 • 2010年8月リリース
 • Firefox 3.6ベー...
対応OS

• Maemo 5 GTK+ or Qt (Nokia N900 only)
• Android
• MeeGo
 • ハンドセット版には、QtバージョンのFennecが含
   まれる
Nightly build

• Nightlyは以下のURLからダウンロード
 • http://ftp.mozilla.org/pub/mozilla.org/mobile/
   nightly/latest-mobile-trunk/
...
Web Stack

• モバイル版であっても、Web Stacksはデスク
  トップ版と同等
 • HTML5
 • Device API
  •   GeoLocation

 • CSS3
 • SVG
 • WebGL
Full Web Stack

• デスクトップ版とコードベースはまったく一緒
 • デスクトップ版でサポートされているものは基本
   的にモバイル版でもサポート
• サポートが異なるものは以下の理由
 • OSの違い
 • プロセス分離(あ...
Canvas
Geo Location

• GPSのみ
• WiFiでの情報取得は現状未サポート
  (Android)
Workers
Web Fonts
CSS Transition

• 現状はちょっとスムーズではないけど
• https://developer.mozilla.org/samples/css
  ref/transitions/sample1/
SVG
WebGL
制限事項

• モバイル版ということではなくて、プロセス分
  離の影響
 • HTML5 Forms
  •   required属性
  •   validation

 • WebSocket
• モバイル的に無理かも
 • Drag &...
Add-ons support

• Mobile版でも当然作成可能
• デスクトップ版と作成方法は同じ
• まったく同じでは動かない
// in Firefox
alert(gBrowser.contentDocument.title);

...
INTERNALS
JavaScript / SpiderMonkey

• JITは当然搭載
 • TraceMonkey
 • JaegerMonkey
• デスクトップ版と同等
• 問題がちょっとあって、Beta 1ではSamsung
  Galaxy Sで...
TraceMonkey
• Tracing + NanoJIT=TraceMonkey
• Tracing
 • 実行回数が多いポイント(=ホットスポット)に対し
   て効率的なコードを吐く手法
   •   Android 2.2のDalv...
JaegerMonkey

• TraceMonkeyの弱点を補うもの
• TraceMonkeyはネイティブコードを生成でき
  れば、現時点で最速のコードを叩きだす
 • 出来ない場合はインタプリタで実行しなおすので、
   超遅い
JaegerMonkey

• インタプリタで実行せずにすべてJIT化する
 • TraceMonkeyでJIT不可なケースを拾うのが目的
• アセンブラからネイティブコードする部分のみ
  JavaScriptCore (WebKit)のコー...
その他

• YARR (from JavaScriptCore/WebKit)
 • 正規表現ライブラリ
 • Mobile 4.0 Beta1ではDisable
• FastDtoa (from V8)
 • 数字と文字列の変換
• Com...
Electrolysis (e10s)

• プラグインプロセスの分離 (Firefox 3.6)
 • プラグインのバグによるクラッシュの影響を少な
   くする
• コンテンツプロセスとブラウザプロセスの分離
  (Firefox Mobi...
e10s on Android

• org.mozilla.fennecというDalvikVM上で動く
  ブラウザプロセス
• plugin-containerというコンテンツプロセス
 app_44    28117 18481 2780...
クラッシュ例
ANDROID VERSION
Android Application

• AndroidはIntentなどのUIサービスにアクセス
  するために、Java(DalvikVM)を使わないとい
  けない(いけなかった)
 • アプリケーションはJavaで書く必要がある
•...
NDK

• 開発初期は、NDKへパッチを当てていた
 • というか、使うヘッダによってはビルド出来ない
   物だった
• だんだんパッチだけでは対処不可
• 現在はGoogleのNDKを実は利用していない
NDK

• 現在はCrystaXのカスタム版を使用
 • http://www.crystax.net/android/ndk.php
• Mozillaのコードベースはgcc4が基本
  (WindowsとSolaris以外)
• 標準C+...
Binaries

• サイズを節約するために、Thumb2を利用
 • だからエミュレータ上では動作しない
• Android OS上のライブラリをほとんど利用し
  ていないので、パッケージサイズは非常に大き
  い
 • nspr / n...
For DalvikVM

  • Javaを使う部分はAndroidのDalvikVM/Java
    API (JNI)を使うためのラッパー
  • Java使ってるのは、これだけ


-rw-r--r--   1   makoto   ...
Graphics Rendering

• レンダリングは、OpenGL ES 2 or 直接ビデ
  オメモリへの描画
 • Skia (http://code.google.com/p/skia/) も使う
   方法もあったけど、結果とし...
Resources
• Firefox Mobile
 • http://www.mozilla.com/en-US/mobile/
• How to build Android version
 • https://wiki.mozilla....
Any Question?
Firefox mobile for android internals
Firefox mobile for android internals
Firefox mobile for android internals
Firefox mobile for android internals
Firefox mobile for android internals
Upcoming SlideShare
Loading in …5
×

Firefox mobile for android internals

3,470 views
3,315 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,470
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Firefox mobile for android internals

  1. 1. Firefox Mobile for Android Internals Makoto Kato
  2. 2. 自己紹介 • 名前: 加藤 誠 / @makoto_kato • Mozilla Committer • Geckoの開発が始まった頃くらいからコードを書 き始める • 初期のI18N関係はNetscapeの社員+自分のコード • いろいろあって、Mozillaから離れる • いろいろが終了したんで、Mozillaのコードをまた 書き始める • 気付いたらMozilla Japan
  3. 3. MOBILE
  4. 4. About Fennec • Fennec = モバイル版Firefoxのコードネーム • XULRunner (Gecko) + Mobile UI • UIをタッチデバイス用に最適化しもの • Gecko (レンダリングエンジン)はそのまま • UIはFirefox同様にXUL+JavaScriptで作成
  5. 5. Fennec • そもそもの始まりは、NokiaのInternet Tablet N770 (Maemo)
  6. 6. Maemo Browser • 初代Internet TabletはOperaを採用 • 2世代目 (Nokia N800)から、Geckoベースの ブラウザを採用 • そこからMozilla独自のモバイル版の開発
  7. 7. MOBILE OS SHARE
  8. 8. Mobile OS Share by Web browsing
  9. 9. Mobile Browsers Share
  10. 10. May 2010 (netmarketshare.com)
  11. 11. ABOUT FENNEC
  12. 12. Concept • Browsing without borders • デスクトップ版と”同じ”レンダリングエンジン • Full Web stack • HTML5/CSS3/SVG/WebGL • モバイルのための機能 • Geo Location / Accelerometer / Touch • 拡張機能 • モバイルでも同様にアドオンをサポート
  13. 13. Version History • Version 1.0 • 2010年1月リリース • Firefox 3.6ベース / Maemo only • Version 1.1 • 2010年8月リリース • Firefox 3.6ベース / Maemo only • Version 4.0 • 2011年?月リリース • Firefox 4.0ベース / Maemo / Android
  14. 14. 対応OS • Maemo 5 GTK+ or Qt (Nokia N900 only) • Android • MeeGo • ハンドセット版には、QtバージョンのFennecが含 まれる
  15. 15. Nightly build • Nightlyは以下のURLからダウンロード • http://ftp.mozilla.org/pub/mozilla.org/mobile/ nightly/latest-mobile-trunk/ • 自動アップデートサポート • Maemo (OSのパッケージマネージャ経由) • Android
  16. 16. Web Stack • モバイル版であっても、Web Stacksはデスク トップ版と同等 • HTML5 • Device API • GeoLocation • CSS3 • SVG • WebGL
  17. 17. Full Web Stack • デスクトップ版とコードベースはまったく一緒 • デスクトップ版でサポートされているものは基本 的にモバイル版でもサポート • サポートが異なるものは以下の理由 • OSの違い • プロセス分離(あとで話します)の影響
  18. 18. Canvas
  19. 19. Geo Location • GPSのみ • WiFiでの情報取得は現状未サポート (Android)
  20. 20. Workers
  21. 21. Web Fonts
  22. 22. CSS Transition • 現状はちょっとスムーズではないけど • https://developer.mozilla.org/samples/css ref/transitions/sample1/
  23. 23. SVG
  24. 24. WebGL
  25. 25. 制限事項 • モバイル版ということではなくて、プロセス分 離の影響 • HTML5 Forms • required属性 • validation • WebSocket • モバイル的に無理かも • Drag & Drop • 正式版までにどうするかはまだ決まってない
  26. 26. Add-ons support • Mobile版でも当然作成可能 • デスクトップ版と作成方法は同じ • まったく同じでは動かない // in Firefox alert(gBrowser.contentDocument.title); // in Fennec alert(Browser.selectedBrowser.contentDocument.title); • 開発にはエミュレータを使うのを推奨
  27. 27. INTERNALS
  28. 28. JavaScript / SpiderMonkey • JITは当然搭載 • TraceMonkey • JaegerMonkey • デスクトップ版と同等 • 問題がちょっとあって、Beta 1ではSamsung Galaxy SではJIT無効
  29. 29. TraceMonkey • Tracing + NanoJIT=TraceMonkey • Tracing • 実行回数が多いポイント(=ホットスポット)に対し て効率的なコードを吐く手法 • Android 2.2のDalvikVMとかも同様のパターン • JavaScriptのバイトコードからLIRを生成する • NanoJIT • LIRをネイティブコードにコンパイルするもの • Flash (Action Script 3)でも利用している • 昔Tamarinというプロジェクトがあったんだけど、それを捨て て、彼らもMozilla製のコンパイラを利用
  30. 30. JaegerMonkey • TraceMonkeyの弱点を補うもの • TraceMonkeyはネイティブコードを生成でき れば、現時点で最速のコードを叩きだす • 出来ない場合はインタプリタで実行しなおすので、 超遅い
  31. 31. JaegerMonkey • インタプリタで実行せずにすべてJIT化する • TraceMonkeyでJIT不可なケースを拾うのが目的 • アセンブラからネイティブコードする部分のみ JavaScriptCore (WebKit)のコードを利用 • どうアセンブラを生成するかについては、独自実 装 • インラインキャッシュ • V8で先に採用している、動的に型を決める言語で 使われるテクニック
  32. 32. その他 • YARR (from JavaScriptCore/WebKit) • 正規表現ライブラリ • Mobile 4.0 Beta1ではDisable • FastDtoa (from V8) • 数字と文字列の変換 • Compartments GC • ガーベージコレクション
  33. 33. Electrolysis (e10s) • プラグインプロセスの分離 (Firefox 3.6) • プラグインのバグによるクラッシュの影響を少な くする • コンテンツプロセスとブラウザプロセスの分離 (Firefox Mobile 4) • レスポンシビリティ向上のため • 通信には、Chromiumのipcライブラリを利用
  34. 34. e10s on Android • org.mozilla.fennecというDalvikVM上で動く ブラウザプロセス • plugin-containerというコンテンツプロセス app_44 28117 18481 278064 60072 ffffffff afe0c9fc S org.mozilla.fennec app_44 28182 28117 113440 65136 ffffffff 8122f908 D /data/data/org.mozilla.fennec/plugin-container • コンテンツプロセスをクラッシュしてもブラウ ザプロセスは保護される
  35. 35. クラッシュ例
  36. 36. ANDROID VERSION
  37. 37. Android Application • AndroidはIntentなどのUIサービスにアクセス するために、Java(DalvikVM)を使わないとい けない(いけなかった) • アプリケーションはJavaで書く必要がある • Firefox/Geckoの土台はC++で書かれている • だから移植無理 • 2009年の6月にNDKリリース • C++で書かれたコードを動かす方法が提供される • 引き続きJavaは必要だけど
  38. 38. NDK • 開発初期は、NDKへパッチを当てていた • というか、使うヘッダによってはビルド出来ない 物だった • だんだんパッチだけでは対処不可 • 現在はGoogleのNDKを実は利用していない
  39. 39. NDK • 現在はCrystaXのカスタム版を使用 • http://www.crystax.net/android/ndk.php • Mozillaのコードベースはgcc4が基本 (WindowsとSolaris以外) • 標準C++ライブラリがNDKというか、Bonic libcだと中途半端すぎ • ポーティングには実際向かない
  40. 40. Binaries • サイズを節約するために、Thumb2を利用 • だからエミュレータ上では動作しない • Android OS上のライブラリをほとんど利用し ていないので、パッケージサイズは非常に大き い • nspr / nss / zlib / libbz2 / sqlite3 / freetype / libpng / libjpeg / cairo / etc
  41. 41. For DalvikVM • Javaを使う部分はAndroidのDalvikVM/Java API (JNI)を使うためのラッパー • Java使ってるのは、これだけ -rw-r--r-- 1 makoto users 3907 Oct 8 13:04 AlertNotification.java -rw-r--r-- 1 makoto users 18600 Oct 8 13:04 GeckoApp.java -rw-r--r-- 1 makoto users 20783 Oct 8 13:04 GeckoAppShell.java -rw-r--r-- 1 makoto users 7065 Aug 5 10:57 GeckoEvent.java -rw-r--r-- 1 makoto users 17950 Aug 25 13:58 GeckoInputConnection.java -rw-r--r-- 1 makoto users 10167 Oct 14 15:11 GeckoSurfaceView.java
  42. 42. Graphics Rendering • レンダリングは、OpenGL ES 2 or 直接ビデ オメモリへの描画 • Skia (http://code.google.com/p/skia/) も使う 方法もあったけど、結果として今の方法を採用 • OpenGL ESのフル機能は利用していない • Cairo (GeckoやAdobe AIRで採用しているグ ラフィックライブラリ)でレンダリング結果の 画像を生成して描画
  43. 43. Resources • Firefox Mobile • http://www.mozilla.com/en-US/mobile/ • How to build Android version • https://wiki.mozilla.org/Mobile/Fennec/Androi d • Firefox for mobile ideas Forum • http://firefoxformobile.uservoice.com/forums/ 70211-firefox-for-mobile-ideas • Extensions - e10s • https://wiki.mozilla.org/Mobile/Fennec/Extens ions/Electrolysis
  44. 44. Any Question?

×