Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Gecko入門 - Introduction to Gecko -

4,833 views

Published on

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

Published in: Technology
  • Be the first to comment

Gecko入門 - Introduction to Gecko -

  1. 1. Geckoと仲良くなりたい人主催 FxOS Gecko勉強会 Gecko入門 - Introduction to Gecko – Masahiro Hidaka / @mhidaka
  2. 2. ABOUT.ME(); Hello, Everyone 
  3. 3. 自己紹介 • 日高 正博 / @mhidaka – Embedded Engineer, 7年目。今年、関西→関東 – Android, Linux, RTOS。 Firefox OSは最近! • コミュニティ活動 – 執筆、勉強会 – techbooster.org • Android ,Mobile技術
  4. 4. お知らせ:絶賛発売中 Effective Android 進撃の火狐
  5. 5. ABOUT.GECKO(); Hello, Firefox OS ;)
  6. 6. なぜ今、Gecko勉強会なのか • これのせい。 発表は昨日、ソースコードを落として読んだ内 容を元にしてます。ある意味、最新情報です が、うそを言う可能性が微レ存。 その場合は優しく訂正してください。優しく。 # WebにGeckoの情報なさ過ぎてビビる
  7. 7. Geckoを知る意義 • Firefox OSの重要なブロックの1つ – プラットフォームとして理解するうえで避け ては通れない。 • GeckoはWeb技術との接点 – HTML5による実装 – Google Chrome OSも同様の方向性
  8. 8. WebApp Based OS • Web標準技術が中心に • 両方ともブラウザがベース • chrome OS – Androidのタイミングでは HTML5は時期尚早 – ラップトップのローレンジへの 展開 • Firefox OS – Anroidが既にあった – モバイルのローレンジへの展開 – シンプルな構成でパフォーマン スを得る(Javaやネイティブなど の両サポートに比べると)
  9. 9. ARCHITECTURE(); Hello, Firefox OS :p
  10. 10. 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プロジェクト全体のコードネーム
  11. 11. Firefox OSの肝はGaiaとGecko • Gaia – Webアプリではあるが特別な権限を もったシステムアプリとして振る舞う – SystemUI like • Gecko – PC版Firefoxブラウザのノウハウが生 きている(その分、複雑…) – OSのもつデバイス制御を可能にして いる ※ざっくりとした理解ですよ Gaia Gecko Gonk Web アプリ Web ブラウザ
  12. 12. ソースコードを確認する $ git clone git://github.com/mozilla-b2g/B2G.git $ ./config.sh nexus-4 # ./config.sh galaxy-nexus はリポジトリが死んでた。つらい。 # ./config.sh で対応デバイスを確認できる 以下のスライドは2013.09.30 時点の情報をもとに作成
  13. 13. B2Gディレクトリ device external frameworks gaia gecko gonk-misc hardware libcore libnative helper ndk prebuilts rilproxy scripts system tools abi bionic bootable build dalvik
  14. 14. GECKO.INNER(); Hello, Firefox OS :)
  15. 15. 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
  16. 16. 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); } } 他にもバイブレータ、明るさ、 スクリーン、時刻設定など
  17. 17. 基本的な制御シーケンス DOM (API , DOM) Content Layout Hal XPCOM… WebApp Gaia Gecko Linux
  18. 18. GECKO.READ(); Hello, Firefox OS :)
  19. 19. 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; } 明るさを設定するコード
  20. 20. 明るさ設定の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への コールグラフ
  21. 21. PPT.FINISH(); Hello, Firefox OS :)
  22. 22. おや?Geckoの様子が? これであなたも Geckoが読めるようになりましたよね? Geckoが仲良くなりたそうにこちらを見ている!! 仲良くしますか? → はい いいえ ご清聴ありがとうございました そういえば https://wiki.mozilla.org/B2G/Hacking っていう ページがあってHackの仕方が書いてあるぽいんだけど誰か?
  23. 23. FAQ • ソースコードの接頭子のNSは何の略? – Netscapeのこと。NextStepではない。S • 時折みる接頭子のMozはどういう意味? – 独自実装されたもの(Web標準化前を含む) – o(opera)とか色々あるが、最近のトレンドとしてconfigや開発 者版のみなど使える環境を限定してたくさん接頭子が乱立しな いように工夫した上で接頭子を使わないケースもある • IDLってバインディングに使ってるんじゃない? – 実は3種類ある!S – JSのバインディング、FirefoxのAPI(XPCOM)、プロセス間通 信(pidl)

×