SlideShare una empresa de Scribd logo
1 de 49
Firefox Mobile for Android
         Internals

       Makoto Kato
自己紹介

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

 • いろいろあって、Mozillaから離れる
 • いろいろが終了したんで、Mozillaのコードをまた
   書き始める
 • 気付いたらMozilla Japan
MOBILE
About Fennec

• Fennec = モバイル版Firefoxのコードネーム
• XULRunner (Gecko) + Mobile UI
• UIをタッチデバイス用に最適化しもの
• Gecko (レンダリングエンジン)はそのまま
• UIはFirefox同様にXUL+JavaScriptで作成
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

• モバイルのための機能
 • Geo Location / Accelerometer / Touch
• 拡張機能
 • モバイルでも同様にアドオンをサポート
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
対応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/
• 自動アップデートサポート
 • Maemo (OSのパッケージマネージャ経由)
 • Android
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 & Drop
• 正式版までにどうするかはまだ決まってない
Add-ons support

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

// in Fennec
alert(Browser.selectedBrowser.contentDocument.title);

• 開発にはエミュレータを使うのを推奨
INTERNALS
JavaScript / SpiderMonkey

• JITは当然搭載
 • TraceMonkey
 • JaegerMonkey
• デスクトップ版と同等
• 問題がちょっとあって、Beta 1ではSamsung
  Galaxy SではJIT無効
TraceMonkey
• Tracing + NanoJIT=TraceMonkey
• Tracing
 • 実行回数が多いポイント(=ホットスポット)に対し
   て効率的なコードを吐く手法
   •   Android 2.2のDalvikVMとかも同様のパターン
 • JavaScriptのバイトコードからLIRを生成する
• NanoJIT
 • LIRをネイティブコードにコンパイルするもの
 • Flash (Action Script 3)でも利用している
   •   昔Tamarinというプロジェクトがあったんだけど、それを捨て
       て、彼らもMozilla製のコンパイラを利用
JaegerMonkey

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

• インタプリタで実行せずにすべてJIT化する
 • TraceMonkeyでJIT不可なケースを拾うのが目的
• アセンブラからネイティブコードする部分のみ
  JavaScriptCore (WebKit)のコードを利用
 • どうアセンブラを生成するかについては、独自実
   装
• インラインキャッシュ
 • V8で先に採用している、動的に型を決める言語で
   使われるテクニック
その他

• YARR (from JavaScriptCore/WebKit)
 • 正規表現ライブラリ
 • Mobile 4.0 Beta1ではDisable
• FastDtoa (from V8)
 • 数字と文字列の変換
• Compartments GC
 • ガーベージコレクション
Electrolysis (e10s)

• プラグインプロセスの分離 (Firefox 3.6)
 • プラグインのバグによるクラッシュの影響を少な
   くする
• コンテンツプロセスとブラウザプロセスの分離
  (Firefox Mobile 4)
 • レスポンシビリティ向上のため
• 通信には、Chromiumのipcライブラリを利用
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



• コンテンツプロセスをクラッシュしてもブラウ
  ザプロセスは保護される
クラッシュ例
ANDROID VERSION
Android Application

• AndroidはIntentなどのUIサービスにアクセス
  するために、Java(DalvikVM)を使わないとい
  けない(いけなかった)
 • アプリケーションはJavaで書く必要がある
• Firefox/Geckoの土台はC++で書かれている
 • だから移植無理
• 2009年の6月にNDKリリース
 • C++で書かれたコードを動かす方法が提供される
 • 引き続きJavaは必要だけど
NDK

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

• 現在はCrystaXのカスタム版を使用
 • http://www.crystax.net/android/ndk.php
• Mozillaのコードベースはgcc4が基本
  (WindowsとSolaris以外)
• 標準C++ライブラリがNDKというか、Bonic
  libcだと中途半端すぎ
 • ポーティングには実際向かない
Binaries

• サイズを節約するために、Thumb2を利用
 • だからエミュレータ上では動作しない
• Android OS上のライブラリをほとんど利用し
  ていないので、パッケージサイズは非常に大き
  い
 • nspr / nss / zlib / libbz2 / sqlite3 / freetype /
   libpng / libjpeg / cairo / etc
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
Graphics Rendering

• レンダリングは、OpenGL ES 2 or 直接ビデ
  オメモリへの描画
 • Skia (http://code.google.com/p/skia/) も使う
   方法もあったけど、結果として今の方法を採用
 • OpenGL ESのフル機能は利用していない
• Cairo (GeckoやAdobe AIRで採用しているグ
  ラフィックライブラリ)でレンダリング結果の
  画像を生成して描画
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
Any Question?

Más contenido relacionado

La actualidad más candente

Transnet.+ lunch mt #1
Transnet.+ lunch mt #1Transnet.+ lunch mt #1
Transnet.+ lunch mt #1
Ryota Tomomura
 
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
Hiroki Ito
 
Firefox 4 and Mobile
Firefox 4 and MobileFirefox 4 and Mobile
Firefox 4 and Mobile
Makoto Kato
 

La actualidad más candente (20)

Transnet.+ lunch mt #1
Transnet.+ lunch mt #1Transnet.+ lunch mt #1
Transnet.+ lunch mt #1
 
Introduction of Rhodes
Introduction of RhodesIntroduction of Rhodes
Introduction of Rhodes
 
解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 Update解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 Update
 
2150117 infrastructure.nagoya
2150117 infrastructure.nagoya2150117 infrastructure.nagoya
2150117 infrastructure.nagoya
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れる
 
その後のBash on windows
その後のBash on windowsその後のBash on windows
その後のBash on windows
 
Vagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみよう
 
サーバー&インフラ勉強会 Vol.1 いとー
サーバー&インフラ勉強会 Vol.1 いとーサーバー&インフラ勉強会 Vol.1 いとー
サーバー&インフラ勉強会 Vol.1 いとー
 
Firefox 4 and Mobile
Firefox 4 and MobileFirefox 4 and Mobile
Firefox 4 and Mobile
 
Vagrant+virtualboxを使ってみよう
Vagrant+virtualboxを使ってみようVagrant+virtualboxを使ってみよう
Vagrant+virtualboxを使ってみよう
 
いつでもどこでも .NET
いつでもどこでも .NETいつでもどこでも .NET
いつでもどこでも .NET
 
Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化
 
Native Extensionのビルドどうしてますか?
Native Extensionのビルドどうしてますか?Native Extensionのビルドどうしてますか?
Native Extensionのビルドどうしてますか?
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
究極のディストリビューションUbuntu
究極のディストリビューションUbuntu究極のディストリビューションUbuntu
究極のディストリビューションUbuntu
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
 
Rancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかRancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるか
 
Swift入門
Swift入門Swift入門
Swift入門
 
Windows Subsystem for Linux 2
Windows Subsystem for Linux 2Windows Subsystem for Linux 2
Windows Subsystem for Linux 2
 
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪
 

Destacado (8)

Raindrop
RaindropRaindrop
Raindrop
 
Mobile Web
Mobile WebMobile Web
Mobile Web
 
Mozillaのビルドインフラ
MozillaのビルドインフラMozillaのビルドインフラ
Mozillaのビルドインフラ
 
Think.next
Think.nextThink.next
Think.next
 
e10sとアプリ間通信
e10sとアプリ間通信e10sとアプリ間通信
e10sとアプリ間通信
 
Emoji
EmojiEmoji
Emoji
 
Active scripting
Active scriptingActive scripting
Active scripting
 
AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ
 

Similar a Firefox mobile for android internals

Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
dynamis
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
 
Web os最新動向20130209
Web os最新動向20130209Web os最新動向20130209
Web os最新動向20130209
Akira Sasaki
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Yuya Yamaki
 
OSC Tokushima 2013
OSC Tokushima 2013OSC Tokushima 2013
OSC Tokushima 2013
Yuya Adachi
 

Similar a Firefox mobile for android internals (20)

Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
FirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組みFirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組み
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Phone gap + monaca
Phone gap + monacaPhone gap + monaca
Phone gap + monaca
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
 
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
【Unite 2017 Tokyo】WebGL:ゲームプラットフォームとしてのWebと現在と未来
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 
Web os最新動向20130209
Web os最新動向20130209Web os最新動向20130209
Web os最新動向20130209
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
 
Electron early 2019
Electron early 2019Electron early 2019
Electron early 2019
 
OSC Tokushima 2013
OSC Tokushima 2013OSC Tokushima 2013
OSC Tokushima 2013
 
About WebRTC
About WebRTCAbout WebRTC
About WebRTC
 
Opa - Cloud Language
Opa - Cloud LanguageOpa - Cloud Language
Opa - Cloud Language
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 

Más de Makoto Kato (12)

Moz2D
Moz2DMoz2D
Moz2D
 
Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術
 
Openness, Innovation and Opptunity
Openness, Innovation and OpptunityOpenness, Innovation and Opptunity
Openness, Innovation and Opptunity
 
Mobile addon
Mobile addonMobile addon
Mobile addon
 
keep it real
keep it realkeep it real
keep it real
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
"Open"
"Open""Open"
"Open"
 
ブラウザの歴史
ブラウザの歴史ブラウザの歴史
ブラウザの歴史
 
CSS3の最新事情
CSS3の最新事情CSS3の最新事情
CSS3の最新事情
 
Web Technology features with Firefox 3.6 / Gecko 1.9.2 and later
Web Technology features with Firefox 3.6 / Gecko 1.9.2 and laterWeb Technology features with Firefox 3.6 / Gecko 1.9.2 and later
Web Technology features with Firefox 3.6 / Gecko 1.9.2 and later
 
Thunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズThunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズ
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
 

Último

Último (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Firefox mobile for android internals

  • 1. Firefox Mobile for Android Internals Makoto Kato
  • 2. 自己紹介 • 名前: 加藤 誠 / @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で作成
  • 6. Maemo Browser • 初代Internet TabletはOperaを採用 • 2世代目 (Nokia N800)から、Geckoベースの ブラウザを採用 • そこからMozilla独自のモバイル版の開発
  • 8. Mobile OS Share by Web browsing
  • 12.
  • 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が含 まれる
  • 16.
  • 17.
  • 18.
  • 19.
  • 20. Nightly build • Nightlyは以下のURLからダウンロード • http://ftp.mozilla.org/pub/mozilla.org/mobile/ nightly/latest-mobile-trunk/ • 自動アップデートサポート • Maemo (OSのパッケージマネージャ経由) • Android
  • 21. Web Stack • モバイル版であっても、Web Stacksはデスク トップ版と同等 • HTML5 • Device API • GeoLocation • CSS3 • SVG • WebGL
  • 22. Full Web Stack • デスクトップ版とコードベースはまったく一緒 • デスクトップ版でサポートされているものは基本 的にモバイル版でもサポート • サポートが異なるものは以下の理由 • OSの違い • プロセス分離(あとで話します)の影響
  • 24. Geo Location • GPSのみ • WiFiでの情報取得は現状未サポート (Android)
  • 27. CSS Transition • 現状はちょっとスムーズではないけど • https://developer.mozilla.org/samples/css ref/transitions/sample1/
  • 28. SVG
  • 29. WebGL
  • 30. 制限事項 • モバイル版ということではなくて、プロセス分 離の影響 • HTML5 Forms • required属性 • validation • WebSocket • モバイル的に無理かも • Drag & Drop • 正式版までにどうするかはまだ決まってない
  • 31. Add-ons support • Mobile版でも当然作成可能 • デスクトップ版と作成方法は同じ • まったく同じでは動かない // in Firefox alert(gBrowser.contentDocument.title); // in Fennec alert(Browser.selectedBrowser.contentDocument.title); • 開発にはエミュレータを使うのを推奨
  • 33. JavaScript / SpiderMonkey • JITは当然搭載 • TraceMonkey • JaegerMonkey • デスクトップ版と同等 • 問題がちょっとあって、Beta 1ではSamsung Galaxy SではJIT無効
  • 34. TraceMonkey • Tracing + NanoJIT=TraceMonkey • Tracing • 実行回数が多いポイント(=ホットスポット)に対し て効率的なコードを吐く手法 • Android 2.2のDalvikVMとかも同様のパターン • JavaScriptのバイトコードからLIRを生成する • NanoJIT • LIRをネイティブコードにコンパイルするもの • Flash (Action Script 3)でも利用している • 昔Tamarinというプロジェクトがあったんだけど、それを捨て て、彼らもMozilla製のコンパイラを利用
  • 35. JaegerMonkey • TraceMonkeyの弱点を補うもの • TraceMonkeyはネイティブコードを生成でき れば、現時点で最速のコードを叩きだす • 出来ない場合はインタプリタで実行しなおすので、 超遅い
  • 36. JaegerMonkey • インタプリタで実行せずにすべてJIT化する • TraceMonkeyでJIT不可なケースを拾うのが目的 • アセンブラからネイティブコードする部分のみ JavaScriptCore (WebKit)のコードを利用 • どうアセンブラを生成するかについては、独自実 装 • インラインキャッシュ • V8で先に採用している、動的に型を決める言語で 使われるテクニック
  • 37. その他 • YARR (from JavaScriptCore/WebKit) • 正規表現ライブラリ • Mobile 4.0 Beta1ではDisable • FastDtoa (from V8) • 数字と文字列の変換 • Compartments GC • ガーベージコレクション
  • 38. Electrolysis (e10s) • プラグインプロセスの分離 (Firefox 3.6) • プラグインのバグによるクラッシュの影響を少な くする • コンテンツプロセスとブラウザプロセスの分離 (Firefox Mobile 4) • レスポンシビリティ向上のため • 通信には、Chromiumのipcライブラリを利用
  • 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 • コンテンツプロセスをクラッシュしてもブラウ ザプロセスは保護される
  • 42. Android Application • AndroidはIntentなどのUIサービスにアクセス するために、Java(DalvikVM)を使わないとい けない(いけなかった) • アプリケーションはJavaで書く必要がある • Firefox/Geckoの土台はC++で書かれている • だから移植無理 • 2009年の6月にNDKリリース • C++で書かれたコードを動かす方法が提供される • 引き続きJavaは必要だけど
  • 43. NDK • 開発初期は、NDKへパッチを当てていた • というか、使うヘッダによってはビルド出来ない 物だった • だんだんパッチだけでは対処不可 • 現在はGoogleのNDKを実は利用していない
  • 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