Gecko入門 - Introduction to Gecko -

Post on 23-Jun-2015

3.482 views 1 download

description

2013.9.30 Geckoと仲良くなりたい人主催 FxOS Gecko勉強会の資料「 Gecko入門」です。 Firefox OSのGeckoをまとめました。

Transcript of Gecko入門 - Introduction to Gecko -

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技術

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)