Gecko勉強会 その3

ブラウザの仕組みを教わった上で、サクサク動くWebアプリの作り方を話し合う会 http://atnd.org/events/47662
2
ひらとり (flatbirdH) @flatbirdH

リフロー減らす例。z-index 違う要素は無視できる。/ Gecko 勉強会 #fxos

2014-03-05 20:06:13
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Reflow(リフロー)ページの要素のサイズとか中身が変わったことでページ描画の再計算を行うこと。ページのコンテンツ全て再描画するのは重たい処理になるので、レイヤー内だけをリフローさせたりすることでリフロー範囲を減らしたりしている #fxos

2014-03-05 20:05:58
ひらとり (flatbirdH) @flatbirdH

フロー。DOM 要素に変更があったときに位置を再計算する処理。 / Gecko 勉強会 #fxos

2014-03-05 20:05:26
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Photoshopとかでレイヤー別に処理して重ねてるのと同じようにブラウザもみんなLayersあるいはCompositorと呼ばれる機能を実装していて、レイヤー間の合成とか移動とかはGPUに任せる #fxos

2014-03-05 20:04:08
ひらとり (flatbirdH) @flatbirdH

Android 酷いのでデバイス ID 見て異なるネイティブコードをロードしてる。/ Gecko 勉強会 #fxos

2014-03-05 20:02:23
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Androidも直接ハードを触るAPIをアプリが使うことはあまりないからか不安定なドライバの端末を出してくるメーカーが結構ある。仕方ないのでブラックリスト行きしたり、専用のコードを書いたりする羽目になっている #fxos

2014-03-05 20:02:06
dynamis (でゅなみす/レッサーパンダ) @dynamitter

いろんなグラフィックスAPIがOSに用意されているがデバイスドライバの出来によっては正しいコードを投げてもクラッシュするので不安定なグラフィックスカードについては諦めてブラックリスト入りしてGPU使った高速化を無効化する #fxos

2014-03-05 19:58:49
カメー @kamemoge

世の中にはバグがいっぱい! ドライバーもバグが複数あってクラッシュしたりする #fxos

2014-03-05 19:57:32
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Direct2Dはシェーダーを使って実装されていることでちゃんとGPU使った高速処理になってる #fxos

2014-03-05 19:55:34
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Moz2Dのバックエンドに使うAPIはDirect2D、CoreGraphics/Quartz、Skia/SkiaGL、Cairo、(nvpr)などが開発されている #fxos

2014-03-05 19:54:52
ひらとり (flatbirdH) @flatbirdH

Moz2D API の描画機能。Draw, Composition, Path, Gradient, Glyph Rendering (基本的に Path でレンダリング), Filter (CSS filter とか)。/ Gecko 勉強会 #fxos

2014-03-05 19:54:26
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Firefox OSのGonkのMoz2DはSkiaGLをバックエンドにした実装になっている #fxos

2014-03-05 19:53:44
dynamis (でゅなみす/レッサーパンダ) @dynamitter

ただし現状ではCanvas以外はまだMoz2Dを直接読んでおらず、Thebesを使ってるコードが内部でMoz2Dを使う形になっている。将来的にはThebesとか間のをなくしてよりパフォーマンス向上を図りたい #fxos

2014-03-05 19:53:08
ひらとり (flatbirdH) @flatbirdH

Moz2D。Gonk はバックエンドに SkiaGL を利用。/ Gecko 勉強会 #fxos

2014-03-05 19:52:26
dynamis (でゅなみす/レッサーパンダ) @dynamitter

ソフトウェアレンダリングになる場合は既存のCairoにまかせてMoz2Dはハードウェアアクセラレーションが効く、ブラウザに適したハイパフォーマンスAPI #fxos

2014-03-05 19:52:05
dynamis (でゅなみす/レッサーパンダ) @dynamitter

昔はOS毎のネイティブAPI使っててプラットフォーム差が大きかったのでThebesというプラットフォーム間の差を吸収するものを導入した。バックエンドはCairoとかを利用していたが、Canvasとかもより高速にするためGPUアクセラレーションがきくMoz2Dを導入 #fxos

2014-03-05 19:51:25
ひらとり (flatbirdH) @flatbirdH

Moz2D。Mozilla で作った 2D API。ブラウザに適した API を一から作り直した。/ Gecko 勉強会 #fxos

2014-03-05 19:51:06
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Off Main Thread CompositingとかAsynchronize Pan/Zoom Controllerなどと言われる技術でマルチコアなどを活用して描画高速化を進めている #fxos

2014-03-05 19:48:59
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Gecko側ではThebesというAPIを昔使っててAzureに移行を進めている #fxos

2014-03-05 19:48:02
dynamis (でゅなみす/レッサーパンダ) @dynamitter

もう少し上位ではGTK等で使われてるCairo (by RedHat, Intel...)や、Chromium等で使われてるSkia (by Google)といったところがある。 #fxos

2014-03-05 19:47:33
dynamis (でゅなみす/レッサーパンダ) @dynamitter

殆どのプラットフォームで動くGPU活用APIは3D向けのOpenGLだけ。2D向けにOpenVGってのは定義されてるけどOpenGLとの同時利用が怪しくハードウェアでちゃんと実装できているチップがない。 #fxos

2014-03-05 19:46:24
dynamis (でゅなみす/レッサーパンダ) @dynamitter

Moz2D、元Azureと呼ばれていたGeckoのグラフィックスAPI #fxos

2014-03-05 19:42:31