Geckoと仲良くなりたい人主催 FxOS Gecko勉強会
Gecko入門 - Introduction to Gecko –
Masahiro Hidaka / @mhidaka
ABOUT.ME(); Hello, Everyone
自己紹介
• 日高 正博 / @mhidaka
– Embedded Engineer, 7年目。今年、関西→関東
– Android, Linux, RTOS。 Firefox OSは最近!
• コミュニティ活動
– 執筆、勉強会
– techbooster.org
• Android ,Mobile技術
お知らせ:絶賛発売中
Effective Android 進撃の火狐
ABOUT.GECKO(); Hello, Firefox OS ;)
なぜ今、Gecko勉強会なのか
• これのせい。
発表は昨日、ソースコードを落として読んだ内容を元にしてます。ある意味、最新情報ですが、うそを言う可能性が微レ存。 その場合は優しく訂正してください。優しく。 # WebにGeckoの情報なさ過ぎてビビる
Geckoを知る意義
• Firefox OSの重要なブロックの1つ
– プラットフォームとして理解するうえで避けては通れない。
• GeckoはWeb技術との接点
– HTML5による実装
– Google Chrome OSも同様の方向性
WebApp Based OS
• Web標準技術が中心に • 両方ともブラウザがベース
• chrome OS
– AndroidのタイミングではHTML5は時期尚早
– ラップトップのローレンジへの展開
• Firefox OS – Anroidが既にあった – モバイルのローレンジへの展開 – シンプルな構成でパフォーマン
スを得る(Javaやネイティブなどの両サポートに比べると)
ARCHITECTURE(); Hello, Firefox OS :p
Firefox OS
アプリケーション開発と密接に関わる
UIコンポーネント、Home,SystemAppの提供
HTML,CSS,JavaScriptで記述、描画等も担当。
Gaia
Gecko
Gonk
https://developer.mozilla.org/ja/docs/Mozilla/Firefox_OS/Platform/Architecture
カーネル、ライブラリ層。デバイス制御機能を提供
Linuxカーネル, init.rc / ほぼAndroidと同じ仕組み
システムプロセスであるchrome(b2g)プロセスが存在。
Web標準技術の実装(アプリが動くために必要なもの全て)
レイアウト、JavaScriptエンジン、ネットワーク、グラ
フィックスタック。ブラウザそのもの。
B2G(Boot to Gecko): Firefox OSプロジェクト全体のコードネーム
Firefox OSの肝はGaiaとGecko
• Gaia – Webアプリではあるが特別な権限を
もったシステムアプリとして振る舞う – SystemUI like
• Gecko – PC版Firefoxブラウザのノウハウが生
きている(その分、複雑…) – OSのもつデバイス制御を可能にして
いる
※ざっくりとした理解ですよ
Gaia
Gecko
Gonk
Web アプリ
Web ブラウザ
ソースコードを確認する
$ git clone git://github.com/mozilla-b2g/B2G.git $ ./config.sh nexus-4 # ./config.sh galaxy-nexus はリポジトリが死んでた。つらい。 # ./config.sh で対応デバイスを確認できる
以下のスライドは2013.09.30 時点の情報をもとに作成
B2Gディレクトリ
device external frameworks gaia gecko
gonk-misc hardware libcore libnative helper
ndk
prebuilts rilproxy scripts system tools
abi bionic bootable build dalvik
GECKO.INNER(); Hello, Firefox OS :)
geckoディレクトリ
browser chrome
content dom
hal
xpcom
view
xulrunner
dom Web APIの提供 xulrunner レンダリングエンジン xpcom Mozillaのコンポーネント化技術 Chrome chromeプロセス用コード content domへローレベルAPI提供(Canvas等) view 基本的なview管理機構 layout 画面に表示するレイアウト要素 table,sytle hal geckoのHAL層 (Sensor, Switch, FMRadio, EventPolling )
layout …more
gecko/hal/gonk/GonkHal.cpp
class BatteryObserver : public IUeventObserver, public RefCounted<BatteryObserver> { … 省略 … virtual void Notify(const NetlinkEvent &aEvent) // バッテリー変化の通知 { // this will run on IO thread NetlinkEvent *event = const_cast<NetlinkEvent*>(&aEvent); const char *subsystem = event->getSubsystem(); // e.g. DEVPATH=/devices/platform/sec-battery/power_supply/battery const char *devpath = event->findParam("DEVPATH"); if (strcmp(subsystem, "power_supply") == 0 && strstr(devpath, "battery")) { // aEvent will be valid only in this method. NS_DispatchToMainThread(mUpdater); } }
他にもバイブレータ、明るさ、 スクリーン、時刻設定など
基本的な制御シーケンス
DOM (API , DOM)
Content Layout Hal XPCOM…
WebApp Gaia
Gecko
Linux
GECKO.READ(); Hello, Firefox OS :)
gecko/hal/gonk/GonkHal.cpp
SetLight(hal::LightType light, const hal::LightConfiguration& aConfig) { light_state_t state; InitLights(); … 省略 … memset(&state, 0, sizeof(light_state_t)); state.color = aConfig.color(); state.flashMode = aConfig.flash(); state.flashOnMS = aConfig.flashOnMS(); state.flashOffMS = aConfig.flashOffMS(); state.brightnessMode = aConfig.mode(); sLights[light]->set_light(sLights[light], &state); sStoredLightState[light] = state; return true; }
明るさを設定するコード
明るさ設定のCall Graph
gaia/apps/system/js/settings.js
gecko/dom/base/Navigator.cpp / nsIDOMNavigator.idl (バインディング)
gecko/dom/power/PowerManager.cpp
gecko/hal/sandbox/SandboxHal.cpp
gecko/hal/gonk/GonkHal.cpp –SetScreenBrightness
gecko/hal/gonk/GonkHal.cpp – setLight
navigator.mozPower.screenBrightness = parseFloat(value);
Navigator::GetMozPower(nsIDOMMozPowerManager** aPower)
PowerManager::SetScreenBrightness(double aBrightness, ErrorResult& aRv)
Hal()->SendSetScreenBrightness(brightness);
hal::SetLight(hal::eHalLightID_Backlight, aConfig);
GaiaからGeckoへの コールグラフ
PPT.FINISH(); Hello, Firefox OS :)
おや?Geckoの様子が?
これであなたも Geckoが読めるようになりましたよね? Geckoが仲良くなりたそうにこちらを見ている!! 仲良くしますか? → はい いいえ
ご清聴ありがとうございました
そういえば https://wiki.mozilla.org/B2G/Hacking っていう ページがあってHackの仕方が書いてあるぽいんだけど誰か?
FAQ
• ソースコードの接頭子のNSは何の略? – Netscapeのこと。NextStepではない。S
• 時折みる接頭子のMozはどういう意味? – 独自実装されたもの(Web標準化前を含む) – o(opera)とか色々あるが、最近のトレンドとしてconfigや開発
者版のみなど使える環境を限定してたくさん接頭子が乱立しないように工夫した上で接頭子を使わないケースもある
• IDLってバインディングに使ってるんじゃない? – 実は3種類ある!S – JSのバインディング、FirefoxのAPI(XPCOM)、プロセス間通
信(pidl)
Top Related