Giter VIP home page Giter VIP logo

gecko-embedded's People

Contributors

ashie avatar dynamis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

myokoym zuiki

gecko-embedded's Issues

Wayland版Firefox: バグ修正

X11上ではGPUアクセラレーションが効かないボードが存在するため、これらのボードでも
GPUアクセラレーションを有効化するためにWayland対応を進めている。
しかしWayland版Firefoxはまだ安定しておらず、様々なバグが存在する。
切り分けがあまりできていないので、ひとまずメタissueとして上げておく。

Firefoxそのものの問題については、ここではなく https://bugzilla.mozilla.org で作業を進めるべき。
既にBugエントリが存在する場合はそこで進める。
無い場合は新しいBugを立ててそこで作業する。

関連Bug:

GTK+等の依存ライブラリの問題の場合は、それぞれのライブラリの最新版で修正されているか確認し、修正されていない場合は同様の対応を行う。最新版で対応されていて、バックポート等の対応が必要な場合はここに新たなissueを立てる。

なお、Wayland版FirefoxについてはPC上でも動くので、改善作業には必ずしも組み込みボードは必要無い。上記Bugで情報を拾って最新版をビルドするか、Firefox 45については以下にパッチをポーティングしたブランチを用意している。

i.MX6: Wayland版Firefoxのビルド

i.MX6向けにWayland版Firefoxをビルドして動作させたい。

RZ/G1E向けには以下のYoctoレシピでFirefoxのビルドおよびある程度の動作を確認できている。

i.MX6 Sabreボード向けにはまだビルドできていない。上記は完全にはX依存を排除できていないのに対して、i.MX6 SabreボードのデフォルトのWaylandレシピではX関係のライブラリがインストールされないため。

以下でX依存を完全排除する作業を進めているが、まだ完了していない。

あるいはレシピ側でX関係のライブラリを追加インストールして一度ビルドを通してしまうという手もあるかもしれない。

Firefox ESR 52対応

現在のポーティング対象バージョンは45ESRとしているが、最新版も常にビルドは通るようにしておきたい。48については途中まで作業した版を以下に置いてある。

https://github.com/mozilla-japan/meta-browser/tree/firefox-48-wip

libxulのリンク時にツールチェーンへのパスが通らなくなっており、まだビルドは成功していない。
49.0b1でも同様の状況。

    /bin/sh: 1: arm-linux-gnueabi-readelf: not found
    test "$(arm-linux-gnueabi-nm -g libxul.so | grep _NSModule$ | grep -vw refptr | sort | sed -n 's/^.* _*\([^ ]*\)$/\1/;1
    /bin/sh: 1: arm-linux-gnueabi-nm: not found
    NSModules are not ordered appropriately

Firefox 52ESR: X11でのビルド確認

Firefox 52ESRのレシピをX11でもビルド確認しておきたい。
以前少し試したときには、DISTRO_FEATURESx11waylandの両方が入っている場合には
wayland対応パッチが悪さをしてビルドエラーになっていた。
最近はWaylandしかいじっていないので、状況を確認できていない。

Waylandパッチが当たらない場合(DISTRO_FEATURESx11が無い)はほぼ素のFirefoxなので
ビルドできるはずだが...

Firefoxビルド用SDKの構築

https://github.com/mozilla-japan/meta-browser/wiki/Debug-RZ-G1E

上記手順で構築したSDKでFirefoxをビルドできない。

  • pythonモジュールが足りない
  • perlモジュールが足りない
  • alsa.pcが無い

alsa.pcに関しては、local.confで

IMAGE_INSTALL_append = " alsa-dev "

で解決した。devパッケージ扱いになっていない?
pythonモジュールに関しては

TOOLCHAIN_HOST_TASK_append = " nativesdk-python-modules "

で行けるかと思ったがダメだった。

i.MX6: H.264ハードウェアデコードのサポート

i.MX6でH.264のハードウェアデコードに対応させたい。
i.MX6でハードウェアデコードに対応させる方法としてベンダ独自のライブラリ(libfslvpuwrap)を使うか、GStreamerを使う方法があると理解している。
一方でGecko側の事情として最新版ではGStreamerサポートがドロップされているので、将来的なことを考えるとGStreamerを使うのは得策ではなさそう。Geckoに直接VPU対応コードを入れることを検討する。

Node と組み合わせて使えるようにする

Web ブラウザからデバイス操作をする場合は

  • 各デバイス操作専用の WebAPI を WebIDL 書いて Gecko に実装してそれを操作する
  • 各デバイスを操作するローカルのアプリやサーバと Web 技術で通信して操作する
    という解があるが、後者の解として Node.js と組み合わせることは多いので対応したい。

具体的には meta-nodejs レイヤーがあるのでそれと組み合わせて使えるようにする。ハード制御などは Node 側で行ってブラウザの Web コンテンツ側からはローカルの Node と通信させる。

https://github.com/imyller/meta-nodejs
https://layers.openembedded.org/layerindex/branch/master/layer/meta-nodejs/

  • 現時点で用意されているバージョンは 4.6.0 と 6.8.0
    • v4 が現在の Active LTS なのでまずはそこから
    • v6 は 2016/10 以降に Active LTS に切り変わったら
      でしょうか。

note: 少なくとも Qt などと組み合わせて使ってる例はある様子
https://blog.qt.io/blog/2016/06/23/enabling-connectivity-embedded-product/

i.MX6: EGL有効化時に高負荷をかけるとフリーズすることがある

i.MX6でEGLを有効化すると、Canvas等で高負荷をかけたときに画面がフリーズすることがある。
現象再現時のcoreを取れたのでスタックトレースを貼り付けておく。

#0  0x76d2f2c0 in poll () at ../sysdeps/unix/syscall-template.S:81                                                [36/1868]
#1  0x712a8d54 in _xcb_conn_wait (c=c@entry=0x76a9f000, cond=cond@entry=0x76aa00e8, vector=vector@entry=0x7ef87bbc, 
    count=count@entry=0x7ef87bb8) at /usr/src/debug/libxcb/1.11-r0/libxcb-1.11/src/xcb_conn.c:459
#2  0x712a93f0 in _xcb_out_send (c=c@entry=0x76a9f000, vector=vector@entry=0x7ef87c10, count=count@entry=3)
    at /usr/src/debug/libxcb/1.11-r0/libxcb-1.11/src/xcb_out.c:393
#3  0x712a9484 in xcb_writev (c=c@entry=0x76a9f000, vector=vector@entry=0x7ef87c10, count=count@entry=3, 
    requests=requests@entry=127) at /usr/src/debug/libxcb/1.11-r0/libxcb-1.11/src/xcb_out.c:341
#4  0x7368869c in _XSend (dpy=0x76a9e000, data=0x0, size=<optimized out>)
    at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/xcb_io.c:495
#5  0x73688b7c in _XReply (dpy=dpy@entry=0x76a9e000, rep=rep@entry=0x7ef87c90, extra=2130214032, extra@entry=0, 
    discard=1937125988, discard@entry=1) at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/xcb_io.c:581
#6  0x73684a1c in XSync (dpy=0x76a9e000, discard=discard@entry=0)
    at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/Sync.c:44
#7  0x7381c830 in sync (display=0x6709c000, display=0x6709c000)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-xlib-surface-shm.c:461
#8  _cairo_xlib_surface_update_shm (surface=surface@entry=0x679db800)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-xlib-surface-shm.c:952
#9  0x7381d3d0 in _cairo_xlib_surface_get_shm (surface=surface@entry=0x679db800, overwrite=overwrite@entry=0)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-xlib-surface-shm.c:1045
#10 0x7381aa28 in _cairo_xlib_surface_acquire_source_image (abstract_surface=0x679db800, image_out=0x7ef88df0, 
    image_extra=<optimized out>) at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-xlib-surface.c:1394
#11 0x737eeaa8 in _cairo_surface_acquire_source_image (surface=0x679db800, image_out=<optimized out>, 
    image_extra=<optimized out>) at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-surface.c:1887
#12 0x737bc6b8 in _pixman_image_for_surface (iy=0x7ef88ef8, ix=0x7ef88ef4, sample=0x7ef895b4, extents=0x7ef89590, 
    is_mask=1352131440, pattern=0x7ef895d8, dst=0x679db800)
#13 _pixman_image_for_pattern (dst=dst@entry=0x5097e370, pattern=pattern@entry=0x7ef895d8, is_mask=is_mask@entry=0,[9/1868]
    extents=extents@entry=0x7ef89590, sample=sample@entry=0x7ef895b4, tx=tx@entry=0x7ef88ef4, ty=ty@entry=0x7ef88ef8)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-image-source.c:1124
#14 0x737bcecc in _cairo_image_source_create_for_pattern (dst=0x5097e370, pattern=0x7ef895d8, is_mask=0, 
    extents=0x7ef89590, sample=0x7ef895b4, src_x=0x7ef88ef4, src_y=0x7ef88ef8)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-image-source.c:1169
#15 0x737eb714 in composite_aligned_boxes (boxes=0x7ef89300, extents=0x7ef89558, compositor=0x73878034 <spans>)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-spans-compositor.c:669
#16 clip_and_composite_boxes (compositor=compositor@entry=0x73878034 <spans>, extents=extents@entry=0x7ef89558, 
    boxes=boxes@entry=0x7ef89300) at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-spans-compositor.c:873
#17 0x737ebcd0 in clip_and_composite_boxes (compositor=0x73878034 <spans>, extents=0x7ef89558, boxes=0x7ef89300)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-spans-compositor.c:892
#18 0x737ebd8c in _cairo_spans_compositor_paint (_compositor=0x73878034 <spans>, extents=0x7ef89558)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-spans-compositor.c:974
#19 0x737ae048 in _cairo_compositor_paint (compositor=0x73878034 <spans>, surface=0x5097e370, op=<optimized out>, 
    source=<optimized out>, clip=0x0) at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-compositor.c:65
#20 0x737bd060 in _cairo_image_surface_paint (abstract_surface=<optimized out>, op=<optimized out>, 
    source=<optimized out>, clip=<optimized out>)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-image-surface.c:924
#21 0x737eec98 in _cairo_surface_paint (surface=0x5097e370, op=CAIRO_OPERATOR_OVER, source=0x7ef89838, clip=0x0)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-surface.c:2031
#22 0x737b4f84 in _cairo_gstate_paint (gstate=0x58d87020)
    at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo-gstate.c:1067
#23 0x737a8e24 in INT_cairo_paint (cr=0x58d87000) at /usr/src/debug/cairo/1.12.18-r0/cairo-1.12.18/src/cairo.c:1999
#24 0x74673d0c in mozilla::gfx::SourceSurfaceCairo::GetDataSurface() ()
   from /opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/firefox-45.2.0/libxul.so
#25 0x746e29c4 in mozilla::layers::BasicLayerManager::PaintLayer(gfxContext*, mozilla::layers::Layer*, void (*)(mozilla::la

96Boards で動かす

96Boards

DragonBoard 410c, HiKey どちらも技適マークあり。

Status

dragonboard-410c

GPU(EGL) Firefox 45ESR
X11 yes crash
Wayland (TBD) (TBD)

dragonboard-410c-32

GPU(EGL) Firefox 45ESR
X11 yes working
Wayland yes working

hikey

GPU(EGL) Firefox 45ESR
X11 no crash
Wayland yes crash

hikey-32

GPU(EGL) Firefox 45ESR
X11 no slow
Wayland yes working

Todo

9 月末あたりにミートアップイベント開催

7 月末に初回のミートアップをしてから少し空いてしまいましたが、2 ヶ月ぶりくらいでコミュニティミートアップをしましょう!

比較的集まりやすい人が多そうな、平日水曜日夜に 1.5 ~ 2 時間程度を想定しています。例えばこんな感じですが如何でしょう?

  • https://mozilla.doorkeeper.jp/events/52459
  • 日時: 9/28 (水) 19:00 ~ 21:00
  • 場所: Mozilla Japan オフィス
  • 内容:
    • プロジェクトアップデート by dynamis
    • Wayland サポートの進捗 by 足永さん
    • 96Boards で動かしてみた by 深海さん
    • ディスカッションタイム (今度こそ QA だけじゃなくて...)

WebRTCの有効化

現在のレシピではWebRTCを有効化してビルドしている。

以前WandboardでUVCデバイスを接続して試したところ、デバイスは認識してリストに表示されたが、映像を表示しようとするとクラッシュした。原因は調査していない。
ほぼ同一の設定でビルドしたPC上のLinuxでは動作した。

Graphene のビルド

Firefox ブラウザの UI などなしで Gecko エンジン上で直接 HTML コンテンツをロードするデスクトップランタイム Graphene をビルドして利用できるようにする。Firefox/Gecko の移植としては Firefox ブラウザで良いが、実際の組み込み製品では Graphene のようなビルドの方が理論上は望ましくなるため。

see: https://mykzilla.org/2016/08/30/graphene-on-gecko-without-b2g/

meta-browserをmasterベースに更新

OSSystemsのmeta-browserにESR45が入ったので、ベースをこれに更新する。
単なるバグフィックスはpull requestを投げる(進行中: 一個はマージされた)。

GTK+更新レシピの整理

#1 でRZ/G1E用にGTK+その他を更新するレシピを実験的に作成したが、試行錯誤しながらだったので整理されていない。またmozilla-japan以下に移動した方が良いので、そのタイミングで整理し直す。

  • リポジトリ名は meta-gecko-embedded とする
    • meta-gemにしたいが、Rubyのgemと誤解されそうなので...
  • ドキュメントを用意する
  • ライセンスを明記する
  • https://github.com/ashie/meta-mozwayland のレシピはmeta-gecko-embedded以下にサブディレクトリを作ってそこに移動する。
    • pokyから拝借したレシピはmeta-pokyに移動。
    • RZ/G1依存のレシピはmeta-rz-g1に移動。
    • 他のボード向けにも追加レシピが必要な場合は、mera-rz-g1と同様のレイヤーを用意する
  • pokyから拝借したレシピは、Yocto-1.6でビルドできるように少し修正しているが、修正した版しかコミットしていなかったため、修正内容がわかりづらい。変更履歴がわかるように以下のようにコミットし直す。
    • まず無修正のものをコミットする。コミットメッセージに拝借元のレポジトリとリビジョンを明記する。
    • 必要な修正をコミットする

Dragon Board: Android Firefox との比較

96 Boards の Dragon Board ではデフォルトで Android (AOSP) がインストールされており、Firefox ブラウザまでバンドルされている。こちらと Yocto Linux 上でビルドしている Firefox とのパフォーマンス比較をしておきたい

RZ/G1E: H.264ハードウェアデコードのサポート

RZ/G1EでH.264のハードウェアデコードに対応させたい。
RZ/G1Eでは選択肢としてOpenMAXかGStreamer(gst-omx使用)があるようだが、Firefox側の事情として最新版ではGStreamerサポートがドロップされている。Firefox 45ESRではまだGStreamerを使えるものの、将来性を考えるとOpenMAXを使った方が良さそう。OpenMAXは現状ではAndroid版Firefoxでしか使えないようだが、Linuxで有効化できるか調査する。

あるいは根本的な方向性として

  • GStreamerサポートを復活させる
  • FFMpeg側でHWデコードに対応させる(Linux版FirefoxのデフォルトはFFMpeg)

などを考慮した方が良いという意見があれば、そちらも検討する。

ONVIF 対応

ネットワークカメラの標準である ONVIF に対応すると監視カメラのコントローラーや家庭用デバイスからのカメラの映像確認などの機能が簡単に実現できる。

ONFIV Spec はこちら:
http://www.onvif.org/specs/DocMap-16.06.html

ブックマークウィンドウを開くとクラッシュする

Wayland版で「履歴とブックマークの管理」ウィンドウを開くとクラッシュする。
実際にはクリップボード回りの問題のようだ。

#0  raise (sig=11) at ../sysdeps/unix/sysv/linux/pt-raise.c:38
#1  0xb500c024 in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) () from /usr/lib/firefox-52.2.0/libxul.so
#2  <signal handler called>
#3  wl_proxy_marshal (proxy=0x0, opcode=1) at /usr/src/debug/wayland/1.10.0-r0/wayland-1.10.0/src/wayland-client.c:679
#4  0xb4959c0c in nsRetrievalContextWayland::GetClipboardContent(char const*, int, nsIInputStream**, unsigned int*) () from /usr/lib/firefox-52.2.0/libxul.so
#5  0xb495ac4c in nsClipboard::GetData(nsITransferable*, int) [clone .part.127] [clone .constprop.244] () from /usr/lib/firefox-52.2.0/libxul.so
#6  0xb34483f8 in NS_InvokeByIndex () from /usr/lib/firefox-52.2.0/libxul.so
#7  0x00000000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

i.MX6: GLXの有効化

i.MX6ではEGLを使ってCompositorOGLを使うことができているが、GLXも有効化できるようにしたい。

現状では、GLXを有効化するとクラッシュする。

Program received signal SIGSEGV, Segmentation fault.
[Switching to LWP 1261]
0x76d82ce4 in strlen () from /lib/libc.so.6
(gdb) where
#0  0x76d82ce4 in strlen () from /lib/libc.so.6
#1  0x61e0ca44 in __glim_GetShaderiv (shader=1, pname=35716, params=0x6a252ce8) at gc_gl_shader.c:1143
#2  0x00005be2 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

落ちている箇所は以下

ドライバの問題と思われる。

上記を回避するようにすると起動することはできるが、表示が大きく乱れる。

RZ/G Starter Kit を起動後 3 時間以上使えない

RZ/G1E & RZ/G1M の Starter Kit は評価ボードという事でドライバも評価版らしく起動後 3 時間で終了してしまう制限がある。

見逃してしまうが次のようなブートログがさりげなく表示されている

boot:Thu Aug 25 01:46:22 2016: NOTE: This SGX library has the time limitation by reason of an evaluation module.

RZ/G1E: WebGLの有効化

RZ/G1EでWebGLを有効化できるようにする。

現状のコードでは、prefs.jsで以下の様にするとWebGLを有効化することができた。

user_pref("layers.acceleration.force-enabled", false);
user_pref("webgl.force-enabled", true);

layers.acceleration.force-enabledtrueにすると、WebGLコンテンツを表示したときに一瞬レンダリングされた後にクラッシュする。両方とも有効化できるようにしたい。

どうもWebGLに限らず複数モジュールでGPUを有効化すると落ちるように見える。Skiaも以下のようにすると落ちるが、SkiaだけでGPUを使うようにすると落ちない(今のところアクセラレーション効果はあまり見られないが)

user_pref("gfx.canvas.azure.backends", "skia");
user_pref("gfx.content.azure.backends", "skia");
user_pref("gfx.canvas.azure.accelerated", true);
user_pref("layers.acceleration.force-enabled", true);

RZ/G1E: Wayland版GTK+の更新

2016-07-25時点におけるRZ/G1EのYoctoレシピ( http://elinux.org/RZ-G/Boards/Yocto )でビルドされるGTK+は3.10。このバージョンのGTK+はWaylandバックエンドにおいてxdg_shellプロトコルをサポートしていない。このため、ウィンドウの移動・リサイズ・最大化等を行うことができない。これらをFirefox側で実装する手もあるが、できればGTK+側をなるべく新しいバージョンに更新したい。

i.MX6: WebGLの有効化

i.MX6(X11版/EGL使用)でWebGLを有効化したい。

以前試したときは、WebGLコンテンツ表示時にクラッシュした。RZ/G1E上のWaylandの場合(#21)とは異なり、一フレームも表示されず、layers.acceleration.force-enabledをfalseにしても改善しなかった。

そのときに採取したエラーメッセージおよびスタックトレース:

[Parent 797] ###!!! ABORT: Request 150.7: BadDrawable (invalid Pixmap or Window parameter): file /home/aho/Projects/wandboard-solo-bsp/build/tmp/work/cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi/firefox/45.0esr-r0/firefox-45.0esr/toolkit/xre/nsX11ErrorHandler.cpp, line 157
[Parent 797] ###!!! ABORT: Request 150.7: BadDrawable (invalid Pixmap or Window parameter): file /home/aho/Projects/wandboard-solo-bsp/build/tmp/work/cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi/firefox/45.0esr-r0/firefox-45.0esr/toolkit/xre/nsX11ErrorHandler.cpp, line 157
[Child 852] ###!!! ABORT: Aborting on channel error.: file /home/aho/Projects/wandboard-solo-bsp/build/tmp/work/cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi/firefox/45.0esr-r0/firefox-45.0esr/ipc/glue/MessageChannel.cpp, line 1861
[Child 852] ###!!! ABORT: Aborting on channel error.: file /home/aho/Projects/wandboard-solo-bsp/build/tmp/work/cortexa9hf-vfp-neon-mx6qdl-poky-linux-gnueabi/firefox/45.0esr-r0/firefox-45.0esr/ipc/glue/MessageChannel.cpp, line 1861
Segmentation fault (core dumped)
(gdb) where
#0  0x76f52ca8 in raise (sig=11) at ../sysdeps/unix/sysv/linux/pt-raise.c:36
#1  0x7585ce20 in nsProfileLock::FatalSignalHandler(int, siginfo_t*, void*) ()
   from /usr/lib/firefox-45.0/libxul.so
#2  <signal handler called>
#3  0x0000c84c in mozalloc_abort(char const*) ()
#4  0x7402959c in NS_DebugBreak () from /usr/lib/firefox-45.0/libxul.so
#5  0x75865aac in X11Error () from /usr/lib/firefox-45.0/libxul.so
#6  0x72d17cec in _XError (dpy=dpy@entry=0x76a9e000, rep=rep@entry=0x504f8040)
    at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/XlibInt.c:1463
#7  0x72d14cfc in handle_error (dpy=dpy@entry=0x76a9e000, err=0x504f8040, 
    in_XReply=in_XReply@entry=1)
    at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/xcb_io.c:213
#8  0x72d15e58 in _XReply (dpy=dpy@entry=0x76a9e000, rep=rep@entry=0x7e960140, 
    extra=2123759936, extra@entry=0, discard=1927217756, discard@entry=0)
    at /usr/src/debug/libx11/1_1.6.2-r0/libX11-1.6.2/src/xcb_io.c:699
#9  0x70fac330 in XF86DRICreateDrawable (dpy=0x76a9e000, screen=0, 
    drawable=drawable@entry=0, hHWDrawable=hHWDrawable@entry=0x52b55de4)
    at ../../../../driver/X/DRI/src/XF86dri.c:405
#10 0x70fa8a78 in gcoOS_CreateDrawable (localDisplay=0x5d069f10, Drawable=0)
    at ../user/gc_hal_user_dri.c:2886
#11 0x712168a4 in _CreateSurface (Thread=Thread@entry=0x5d0ca4b4, 
    Display=Display@entry=0x5e9c0d44, Surface=Surface@entry=0x51840804)
    at gc_egl_surface.c:2117
#12 0x71217bb8 in eglCreatePbufferSurface (Dpy=0x5e9c0d44, Config=0x33, 
    attrib_list=0x5040ed88) at gc_egl_surface.c:3440
#13 0x7467de60 in mozilla::gl::GLContextEGL::CreatePBufferSurfaceTryingPowerOfTwo(void*, unsigned int, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits>&)
    () from /usr/lib/firefox-45.0/libxul.so
#14 0x74684f20 in mozilla::gl::GLContextEGL::CreateEGLPBufferOffscreenContext(mozilla::gl::CreateContextFlags, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gl::SurfaceCaps const&) ()
   from /usr/lib/firefox-45.0/libxul.so
#15 0x74685028 in mozilla::gl::GLContextProviderEGL::CreateHeadless(mozilla::gl::CreateContextFlags) () from /usr/lib/firefox-45.0/libxul.so
#16 0x74685c60 in mozilla::gl::GLContextProviderEGL::CreateOffscreen(mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, mozilla::gl::SurfaceCaps const&, mozilla::gl::CreateContextFlags) () from /usr/lib/firefox-45.0/libxul.so
#17 0x74e5d9d0 in mozilla::CreateGLWithDefault(mozilla::gl::SurfaceCaps const&, mozilla::gl::CreateContextFlags, mozilla::WebGLContext*) ()
   from /usr/lib/firefox-45.0/libxul.so
#18 0x74e628e8 in mozilla::WebGLContext::CreateAndInitGLWith(already_AddRefed<mozilla::gl::GLContext> (*)(mozilla::gl::SurfaceCaps const&, mozilla::gl::CreateContextFlags, mozilla::WebGLContext*), mozilla::gl::SurfaceCaps const&, mozilla::gl::CreateContextFlags) () from /usr/lib/firefox-45.0/libxul.so
#19 0x74e62b38 in mozilla::WebGLContext::CreateAndInitGL(bool) ()
   from /usr/lib/firefox-45.0/libxul.so
#20 0x74e62e20 in mozilla::WebGLContext::SetDimensions(int, int) ()
   from /usr/lib/firefox-45.0/libxul.so
#21 0x74e36bcc in mozilla::dom::CanvasRenderingContextHelper::UpdateContext(JSContext*, JS::Handle<JS::Value>, mozilla::ErrorResult&) ()
   from /usr/lib/firefox-45.0/libxul.so
#22 0x74e38cac in mozilla::dom::CanvasRenderingContextHelper::GetContext(JSConte---Type <return> to continue, or q <return> to quit---
xt*, nsAString_internal const&, JS::Handle<JS::Value>, mozilla::ErrorResult&)
    () from /usr/lib/firefox-45.0/libxul.so
#23 0x74f084c0 in mozilla::dom::HTMLCanvasElement::GetContext(JSContext*, nsAString_internal const&, JS::Handle<JS::Value>, mozilla::ErrorResult&) ()
   from /usr/lib/firefox-45.0/libxul.so
#24 0x74d6f594 in mozilla::dom::HTMLCanvasElementBinding::getContext(JSContext*, JS::Handle<JSObject*>, mozilla::dom::HTMLCanvasElement*, JSJitMethodCallArgs const&) () from /usr/lib/firefox-45.0/libxul.so
#25 0x74e11a78 in mozilla::dom::GenericBindingMethod(JSContext*, unsigned int, JS::Value*) () from /usr/lib/firefox-45.0/libxul.so
#26 0x75faf380 in js::Invoke(JSContext*, JS::CallArgs const&, js::MaybeConstruct) () from /usr/lib/firefox-45.0/libxul.so
#27 0x75fa4580 in Interpret(JSContext*, js::RunState&) ()
   from /usr/lib/firefox-45.0/libxul.so
#28 0x7e960b38 in ?? ()

Firefox 45ESR が aarch64 で crash する

96Boards の aarch64 userland 環境 (rpb/rpb-wayland) では、 Firefox の起動後、ページがレンダリングされた直後に SEGV で落ちる。ネットワークに未接続などコンテンツが取得できない状態だと、少し経ってから落ちる。
(一度落ちると、 ~/.mozilla を消さない限り、ウィンドウが出る前に落ちる)

https://bugzilla.mozilla.org/show_bug.cgi?id=1304962 と同じ問題のように思えるが、パッチを適用しても直らなかった。 (要再確認)

WebRTCの有効化

現在のFirefox 45のレシピではWebRTCのビルドが通らなかったため、一時的にWebRTCのビルドを無効化してある。同一バージョンのIntel PC上ではビルド・動作を確認しているので、ARMでのビルドの問題。これは以下で直っている。

https://bugzilla.mozilla.org/show_bug.cgi?id=1252699

Firefox 45.2.0にも修正が入っている。
上記バージョンに上げるついでにWebRTCのビルドも有効化する。

X11 フォワーディングで Firefox を使いたい

重要性は高くないが要調査として Issue たてておきます

HDMI ディスプレイのない所で開発するとき、シェルは ssh 接続やシリアルコンソールから、Firefox は取り敢えずパソコン側から http://dragonboard-410c-32.local:3000/ もしくは IP アドレス指定でリモート接続して確認することが出来るが、実際の実機上で HDMI 出力したときの結果を再現するにはやはり X11 フォワーディングが使えるのが望ましい。

現状、ssh -X で接続して一応使えるが、firefox については激重&マウスの反応とかあやしく firefox http://localhost:3000/ などと URL 指定して読み込ませるところまでは出来ても操作まで確認できない。

gem-tanzaniteデモ用レシピ作成

ルネサスRZ/Gシリーズでgem-tanzanite を用いたデモを行うために手元でSDブートイメージを作成して使用しているが、現状ではレシピだけでは同環境を再現することができず、手動での設定も必要となっている。

meta-rzg-demosと同様に、bitbake一発でデモ環境を構築できるようにレシピを整備する。

Content/Canvasアクセラレーション

Contentアクセラレーションの対応状況をメモしておく。

i.MX6(X11)

Cairo

XRenderで対応済み。効果はそれほど大きくないが、切ると体感で分かる程度には性能が低下する。

XRenderのoff設定:

user_pref("gfx.xrender.enabled", false);

Skia

以下の設定でSkiaを有効化できるが、フォントの描画が欠けるなどの問題が発生する。

user_pref("gfx.canvas.azure.backends", "skia");
user_pref("gfx.content.azure.backends", "skia");

以下でGPUを有効化するとクラッシュする。

user_pref("gfx.canvas.azure.accelerated", true);

RZ/G1(Wayland)

Cairo

未対応。cairo-eglの実装を追加してみる?

Skia

Compositorのアクセラレーションと同時に有効化するとクラッシュする。

user_pref("gfx.canvas.azure.backends", "skia");
user_pref("gfx.content.azure.backends", "skia");
user_pref("gfx.canvas.azure.accelerated", true);
user_pref("layers.acceleration.force-enabled", true);

Compositorのアクセラレーションを有効化しなければ動作するが、特にパフォーマンスが向上したようには見えない。
フォントの描画が欠けるなどの問題はI.MX6(X11)の場合と同様。

ポップアップウィンドウを出現させるUIを高速に連続でクリックするとポップアップが表示されなくなる

ポップアップウィンドウを描画するタイミングによっては内容が描画されず、グレーアウトしたままになる。
ポップアップウィンドウを出現させるUIを高速に連続でクリックすると再現しやすい。

問題が起こると #48 でのコンテキストメニューと同様の見た目になる。
現状では一旦起こるとFirefoxの再起動しか解消の手段がない。

FFmpeg(libavcodec)でのH.264動画再生時に音声ノイズ

GNU/Linux版FirefoxはH.264のソフトウェアデコーダーとしてFFmpeg(libavcodec)を使用することが
できるが、映像は再生できるものの、音声(AAC)はノイズが乗って聞き取ることができない。
Wandboardおよびi.MX6 SABREで確認。PCでは特に問題ない。

ベンチマークの検討

デフォルトのビルドや Chromium などと比べても確実に高速化はできているが、前後の比較や他のプロダクトとの比較を明確な数値としては持っていないので何か用意したい。

比較という意味では

  • Firefox で GPU アクセラレーションの有無
    • CSS Animations/Transitions などをメインとしたベンチマーク
  • Firefox での GPU ビデオデコードの有無
    • 再生可能なビデオ解像度、同時再生数やその時の CPU 使用率などを記録
  • 既存 Firefox (meta-browser) ビルド (出来る場合) との比較
  • 既存 Chromium (meta-browser) ビルド (出来る場合) との比較
  • Qt Blink との比較
  • Qt Native (QML) との比較

など考えられるが、比較より単に単体での性能を表すもので十分かも知れない。

Qt との比較についてはゲームなどあるかもだが実装依存だし GPU 性能そのままの WebGL よりも HTML や Web 技術の利点が生きる HMI 向けで比較したいが直接比較は難しいそう。何かアイデアあればコメントください。

note: PC 向けのブラウザベンチマークについては Benchmark ページ にメモしています

RZ/G1: Yocto-1.6系最新版でWeston-1.6が動作しない

#20 より

RZ/G1でのWayland版の動作を改善するためにWestonのバージョンを上げているが、Yocto-1.6系の最新レシピを使用するとWestonがクラッシュする。現在はビルド手順でリビジョンを固定して対応している。

Dragon Board 向けビルドのアップデート

現時点で Dragon Board 向けには 32bit ビルドに Firefox 45 と Node 4.6.x を組み合わせて使える環境ができているが、実際使ってみてのフィードバックを受けてもう少し使い易いビルドに更新していきたい。ひとまず現状でのチェックリストを Issue として立てておきます:

  • Node を 6.9.x LTS にアップデート
    • ECMAScript 2015 が使えるように
    • Node 4.6.x の LTS を使いたいケースもあるとすれば ipk などで追加インストール可能になると良いかも (ビルドの過程で作られているのが使えるかも?)
  • git コマンド
    • サンプルスクリプトを GitHub から直接取得・更新したい
  • wget コマンドが nossl なので SSL 使えるように
    • WiFi 経由での SSH ログインを可能にした上でいろんなファイルを DL して scp するのが結構面倒
  • USB Serial 対応
    • Serial 通信デバイスも使えるように

note:

  • BLE については事前ビルドせずとも必要に応じてボード上で npm install noble するだけで何とかなりそう
  • オプショナルなものは opkg で追加インストール可能な ipk ファイルとかに出来ると良さそうだが...

RZ/G1: AAC音声デコード

RZ/G1でのH.264映像デコードは #3 でOpenMAX ILによる対応を行ったが、RZ/G1ではAACのOpenMAX ILコンポーネントが提供されないため、この方法では音声を再生することができない。
コンポーネントがあれば再生できると思われるが、モノがないため動作テストは行っていない。

FFmpegを有効化しておけばそちらのデコーダが使えるが、これについても #8 の問題があって再生することはできていない。

GStreamerを使う場合はfaadでデコードされているようだ(製品で使うのはライセンス上問題があると思うが)。

meta-gecko-embeddedのYocto2.0対応

#20 でRZ/G向けにGTK+を更新するために meta-gecko-embedded というレイヤを作成したが、
これは renesas-rzg/meta-renesas の Yocto-1.6 向けだった。
meta-renesas に yocto_2.0 ブランチが出来ているので、meta-gecko-embededdedをこちらに
対応させる。
#2 に書いた通りWayland関係の問題を修正するには少しでも新しいWaylandおよびGTK+を使用
した方が良く、Yocto-1.6のままではこれらをアップデートすることが難しいため、Yocto-1.6対応
を維持させることは必ずしも考えなくて良い。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.