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)

Gecko入門 - Introduction to Gecko -