23
Geckoと仲良くなりたい人主催 FxOS Gecko勉強会 Gecko入門 - Introduction to Gecko Masahiro Hidaka / @mhidaka

Gecko入門 - Introduction to Gecko -

  • Upload
    mhidaka

  • View
    3.490

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Gecko入門 - Introduction to Gecko -

Geckoと仲良くなりたい人主催 FxOS Gecko勉強会

Gecko入門 - Introduction to Gecko –

Masahiro Hidaka / @mhidaka

Page 2: Gecko入門 - Introduction to Gecko -

ABOUT.ME(); Hello, Everyone

Page 3: Gecko入門 - Introduction to Gecko -

自己紹介

• 日高 正博 / @mhidaka

– Embedded Engineer, 7年目。今年、関西→関東

– Android, Linux, RTOS。 Firefox OSは最近!

• コミュニティ活動

– 執筆、勉強会

– techbooster.org

• Android ,Mobile技術

Page 5: Gecko入門 - Introduction to Gecko -

ABOUT.GECKO(); Hello, Firefox OS ;)

Page 6: Gecko入門 - Introduction to Gecko -

なぜ今、Gecko勉強会なのか

• これのせい。

発表は昨日、ソースコードを落として読んだ内容を元にしてます。ある意味、最新情報ですが、うそを言う可能性が微レ存。 その場合は優しく訂正してください。優しく。 # WebにGeckoの情報なさ過ぎてビビる

Page 7: Gecko入門 - Introduction to Gecko -

Geckoを知る意義

• Firefox OSの重要なブロックの1つ

– プラットフォームとして理解するうえで避けては通れない。

• GeckoはWeb技術との接点

– HTML5による実装

– Google Chrome OSも同様の方向性

Page 8: Gecko入門 - Introduction to Gecko -

WebApp Based OS

• Web標準技術が中心に • 両方ともブラウザがベース

• chrome OS

– AndroidのタイミングではHTML5は時期尚早

– ラップトップのローレンジへの展開

• Firefox OS – Anroidが既にあった – モバイルのローレンジへの展開 – シンプルな構成でパフォーマン

スを得る(Javaやネイティブなどの両サポートに比べると)

Page 9: Gecko入門 - Introduction to Gecko -

ARCHITECTURE(); Hello, Firefox OS :p

Page 10: Gecko入門 - Introduction to Gecko -

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プロジェクト全体のコードネーム

Page 11: Gecko入門 - Introduction to Gecko -

Firefox OSの肝はGaiaとGecko

• Gaia – Webアプリではあるが特別な権限を

もったシステムアプリとして振る舞う – SystemUI like

• Gecko – PC版Firefoxブラウザのノウハウが生

きている(その分、複雑…) – OSのもつデバイス制御を可能にして

いる

※ざっくりとした理解ですよ

Gaia

Gecko

Gonk

Web アプリ

Web ブラウザ

Page 12: Gecko入門 - Introduction to Gecko -

ソースコードを確認する

$ git clone git://github.com/mozilla-b2g/B2G.git $ ./config.sh nexus-4 # ./config.sh galaxy-nexus はリポジトリが死んでた。つらい。 # ./config.sh で対応デバイスを確認できる

以下のスライドは2013.09.30 時点の情報をもとに作成

Page 13: Gecko入門 - Introduction to Gecko -

B2Gディレクトリ

device external frameworks gaia gecko

gonk-misc hardware libcore libnative helper

ndk

prebuilts rilproxy scripts system tools

abi bionic bootable build dalvik

Page 14: Gecko入門 - Introduction to Gecko -

GECKO.INNER(); Hello, Firefox OS :)

Page 15: Gecko入門 - Introduction to Gecko -

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

Page 16: Gecko入門 - Introduction to Gecko -

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); } }

他にもバイブレータ、明るさ、 スクリーン、時刻設定など

Page 17: Gecko入門 - Introduction to Gecko -

基本的な制御シーケンス

DOM (API , DOM)

Content Layout Hal XPCOM…

WebApp Gaia

Gecko

Linux

Page 18: Gecko入門 - Introduction to Gecko -

GECKO.READ(); Hello, Firefox OS :)

Page 19: Gecko入門 - Introduction to Gecko -

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; }

明るさを設定するコード

Page 20: Gecko入門 - Introduction to Gecko -

明るさ設定の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への コールグラフ

Page 21: Gecko入門 - Introduction to Gecko -

PPT.FINISH(); Hello, Firefox OS :)

Page 22: Gecko入門 - Introduction to Gecko -

おや?Geckoの様子が?

これであなたも Geckoが読めるようになりましたよね? Geckoが仲良くなりたそうにこちらを見ている!! 仲良くしますか? → はい いいえ

ご清聴ありがとうございました

そういえば https://wiki.mozilla.org/B2G/Hacking っていう ページがあってHackの仕方が書いてあるぽいんだけど誰か?

Page 23: Gecko入門 - Introduction to Gecko -

FAQ

• ソースコードの接頭子のNSは何の略? – Netscapeのこと。NextStepではない。S

• 時折みる接頭子のMozはどういう意味? – 独自実装されたもの(Web標準化前を含む) – o(opera)とか色々あるが、最近のトレンドとしてconfigや開発

者版のみなど使える環境を限定してたくさん接頭子が乱立しないように工夫した上で接頭子を使わないケースもある

• IDLってバインディングに使ってるんじゃない? – 実は3種類ある!S – JSのバインディング、FirefoxのAPI(XPCOM)、プロセス間通

信(pidl)