Más contenido relacionado La actualidad más candente (20) Similar a Firefox mobile for android internals (20) Firefox mobile for android internals2. 自己紹介
• 名前: 加藤 誠 / @makoto_kato
• Mozilla Committer
• Geckoの開発が始まった頃くらいからコードを書
き始める
• 初期のI18N関係はNetscapeの社員+自分のコード
• いろいろあって、Mozillaから離れる
• いろいろが終了したんで、Mozillaのコードをまた
書き始める
• 気付いたらMozilla Japan
4. About Fennec
• Fennec = モバイル版Firefoxのコードネーム
• XULRunner (Gecko) + Mobile UI
• UIをタッチデバイス用に最適化しもの
• Gecko (レンダリングエンジン)はそのまま
• UIはFirefox同様にXUL+JavaScriptで作成
13. Concept
• Browsing without borders
• デスクトップ版と”同じ”レンダリングエンジン
• Full Web stack
• HTML5/CSS3/SVG/WebGL
• モバイルのための機能
• Geo Location / Accelerometer / Touch
• 拡張機能
• モバイルでも同様にアドオンをサポート
14. 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
15. 対応OS
• Maemo 5 GTK+ or Qt (Nokia N900 only)
• Android
• MeeGo
• ハンドセット版には、QtバージョンのFennecが含
まれる
22. Full Web Stack
• デスクトップ版とコードベースはまったく一緒
• デスクトップ版でサポートされているものは基本
的にモバイル版でもサポート
• サポートが異なるものは以下の理由
• OSの違い
• プロセス分離(あとで話します)の影響
31. Add-ons support
• Mobile版でも当然作成可能
• デスクトップ版と作成方法は同じ
• まったく同じでは動かない
// in Firefox
alert(gBrowser.contentDocument.title);
// in Fennec
alert(Browser.selectedBrowser.contentDocument.title);
• 開発にはエミュレータを使うのを推奨
34. TraceMonkey
• Tracing + NanoJIT=TraceMonkey
• Tracing
• 実行回数が多いポイント(=ホットスポット)に対し
て効率的なコードを吐く手法
• Android 2.2のDalvikVMとかも同様のパターン
• JavaScriptのバイトコードからLIRを生成する
• NanoJIT
• LIRをネイティブコードにコンパイルするもの
• Flash (Action Script 3)でも利用している
• 昔Tamarinというプロジェクトがあったんだけど、それを捨て
て、彼らもMozilla製のコンパイラを利用
36. JaegerMonkey
• インタプリタで実行せずにすべてJIT化する
• TraceMonkeyでJIT不可なケースを拾うのが目的
• アセンブラからネイティブコードする部分のみ
JavaScriptCore (WebKit)のコードを利用
• どうアセンブラを生成するかについては、独自実
装
• インラインキャッシュ
• V8で先に採用している、動的に型を決める言語で
使われるテクニック
37. その他
• YARR (from JavaScriptCore/WebKit)
• 正規表現ライブラリ
• Mobile 4.0 Beta1ではDisable
• FastDtoa (from V8)
• 数字と文字列の変換
• Compartments GC
• ガーベージコレクション
39. 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
• コンテンツプロセスをクラッシュしてもブラウ
ザプロセスは保護される
44. NDK
• 現在はCrystaXのカスタム版を使用
• http://www.crystax.net/android/ndk.php
• Mozillaのコードベースはgcc4が基本
(WindowsとSolaris以外)
• 標準C++ライブラリがNDKというか、Bonic
libcだと中途半端すぎ
• ポーティングには実際向かない
45. Binaries
• サイズを節約するために、Thumb2を利用
• だからエミュレータ上では動作しない
• Android OS上のライブラリをほとんど利用し
ていないので、パッケージサイズは非常に大き
い
• nspr / nss / zlib / libbz2 / sqlite3 / freetype /
libpng / libjpeg / cairo / etc
46. 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
47. Graphics Rendering
• レンダリングは、OpenGL ES 2 or 直接ビデ
オメモリへの描画
• Skia (http://code.google.com/p/skia/) も使う
方法もあったけど、結果として今の方法を採用
• OpenGL ESのフル機能は利用していない
• Cairo (GeckoやAdobe AIRで採用しているグ
ラフィックライブラリ)でレンダリング結果の
画像を生成して描画
48. 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