webdino / gecko-embedded Goto Github PK
View Code? Open in Web Editor NEWMain (meta) repository for Project GEM (Gecko Embedded)
Home Page: https://gecko-embedded.org
Main (meta) repository for Project GEM (Gecko Embedded)
Home Page: https://gecko-embedded.org
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をビルドして動作させたい。
RZ/G1E向けには以下のYoctoレシピでFirefoxのビルドおよびある程度の動作を確認できている。
i.MX6 Sabreボード向けにはまだビルドできていない。上記は完全にはX依存を排除できていないのに対して、i.MX6 SabreボードのデフォルトのWaylandレシピではX関係のライブラリがインストールされないため。
以下でX依存を完全排除する作業を進めているが、まだ完了していない。
あるいはレシピ側でX関係のライブラリを追加インストールして一度ビルドを通してしまうという手もあるかもしれない。
現在のポーティング対象バージョンは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 を移植して実際に動作させるデモコンテンツを作るが、まずはその方向性を検討する。
Firefox 52ESRのレシピをX11でもビルド確認しておきたい。
以前少し試したときには、DISTRO_FEATURES
にx11
とwayland
の両方が入っている場合には
wayland対応パッチが悪さをしてビルドエラーになっていた。
最近はWaylandしかいじっていないので、状況を確認できていない。
Waylandパッチが当たらない場合(DISTRO_FEATURES
にx11
が無い)はほぼ素のFirefoxなので
ビルドできるはずだが...
作る。
https://github.com/mozilla-japan/meta-browser/wiki/Debug-RZ-G1E
上記手順で構築したSDKでFirefoxをビルドできない。
alsa.pcに関しては、local.confで
IMAGE_INSTALL_append = " alsa-dev "
で解決した。devパッケージ扱いになっていない?
pythonモジュールに関しては
TOOLCHAIN_HOST_TASK_append = " nativesdk-python-modules "
で行けるかと思ったがダメだった。
プロトタイプが出来たらパフォーマンスを確認、最適化に進める
まずは Node から始めるので #9 から分離します (当面は放置)
i.MX6でH.264のハードウェアデコードに対応させたい。
i.MX6でハードウェアデコードに対応させる方法としてベンダ独自のライブラリ(libfslvpuwrap)を使うか、GStreamerを使う方法があると理解している。
一方でGecko側の事情として最新版ではGStreamerサポートがドロップされているので、将来的なことを考えるとGStreamerを使うのは得策ではなさそう。Geckoに直接VPU対応コードを入れることを検討する。
Web ブラウザからデバイス操作をする場合は
具体的には meta-nodejs レイヤーがあるのでそれと組み合わせて使えるようにする。ハード制御などは Node 側で行ってブラウザの Web コンテンツ側からはローカルの Node と通信させる。
https://github.com/imyller/meta-nodejs
https://layers.openembedded.org/layerindex/branch/master/layer/meta-nodejs/
note: 少なくとも Qt などと組み合わせて使ってる例はある様子
https://blog.qt.io/blog/2016/06/23/enabling-connectivity-embedded-product/
#2 (comment) より
Wayland版で ALT + ← or → が効いていない
10 月分が確定・告知済み #17 なので次回分の Issue を立てておく
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
DragonBoard 410c, HiKey どちらも技適マークあり。
GPU(EGL) | Firefox 45ESR | |
---|---|---|
X11 | yes | crash |
Wayland | (TBD) | (TBD) |
GPU(EGL) | Firefox 45ESR | |
---|---|---|
X11 | yes | working |
Wayland | yes | working |
GPU(EGL) | Firefox 45ESR | |
---|---|---|
X11 | no | crash |
Wayland | yes | crash |
GPU(EGL) | Firefox 45ESR | |
---|---|---|
X11 | no | slow |
Wayland | yes | working |
7 月末に初回のミートアップをしてから少し空いてしまいましたが、2 ヶ月ぶりくらいでコミュニティミートアップをしましょう!
比較的集まりやすい人が多そうな、平日水曜日夜に 1.5 ~ 2 時間程度を想定しています。例えばこんな感じですが如何でしょう?
R-Carスタータキット Pro(R-Car M3)を入手したので、ぼちぼちとFirefoxをビルドしてみる。
http://elinux.org/R-Car/Boards/M3SK
http://elinux.org/R-Car/Boards/Yocto-Gen3
現在のレシピではWebRTCを有効化してビルドしている。
以前WandboardでUVCデバイスを接続して試したところ、デバイスは認識してリストに表示されたが、映像を表示しようとするとクラッシュした。原因は調査していない。
ほぼ同一の設定でビルドしたPC上のLinuxでは動作した。
Firefox ブラウザの UI などなしで Gecko エンジン上で直接 HTML コンテンツをロードするデスクトップランタイム Graphene をビルドして利用できるようにする。Firefox/Gecko の移植としては Firefox ブラウザで良いが、実際の組み込み製品では Graphene のようなビルドの方が理論上は望ましくなるため。
see: https://mykzilla.org/2016/08/30/graphene-on-gecko-without-b2g/
OSSystemsのmeta-browserにESR45が入ったので、ベースをこれに更新する。
単なるバグフィックスはpull requestを投げる(進行中: 一個はマージされた)。
#1 でRZ/G1E用にGTK+その他を更新するレシピを実験的に作成したが、試行錯誤しながらだったので整理されていない。またmozilla-japan以下に移動した方が良いので、そのタイミングで整理し直す。
96 Boards の Dragon Board ではデフォルトで Android (AOSP) がインストールされており、Firefox ブラウザまでバンドルされている。こちらと Yocto Linux 上でビルドしている Firefox とのパフォーマンス比較をしておきたい
RZ/G1EでH.264のハードウェアデコードに対応させたい。
RZ/G1Eでは選択肢としてOpenMAXかGStreamer(gst-omx使用)があるようだが、Firefox側の事情として最新版ではGStreamerサポートがドロップされている。Firefox 45ESRではまだGStreamerを使えるものの、将来性を考えるとOpenMAXを使った方が良さそう。OpenMAXは現状ではAndroid版Firefoxでしか使えないようだが、Linuxで有効化できるか調査する。
あるいは根本的な方向性として
などを考慮した方が良いという意見があれば、そちらも検討する。
現在のレシピをWandboard向けにビルドしてみたところ、メニュー類のボタンを押してもメニューが表示されなくなっていた。
Dragon Board を使う際に HDMI ディスプレイなしで操作したい。
ネットワークカメラの標準である 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では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?)
落ちている箇所は以下
ドライバの問題と思われる。
上記を回避するようにすると起動することはできるが、表示が大きく乱れる。
Wayland版Firefox 52 on Yocto 2.0(GTK+-3.20に更新)でポップアップメニュー類は概ね動作するようになったが、タブのコンテキストメニューが表示されないことがある。厳密な再現条件は不明。
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を有効化できるようにする。
現状のコードでは、prefs.jsで以下の様にするとWebGLを有効化することができた。
user_pref("layers.acceleration.force-enabled", false);
user_pref("webgl.force-enabled", true);
layers.acceleration.force-enabled
をtrue
にすると、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);
2016-07-25時点におけるRZ/G1EのYoctoレシピ( http://elinux.org/RZ-G/Boards/Yocto )でビルドされるGTK+は3.10。このバージョンのGTK+はWaylandバックエンドにおいてxdg_shellプロトコルをサポートしていない。このため、ウィンドウの移動・リサイズ・最大化等を行うことができない。これらをFirefox側で実装する手もあるが、できればGTK+側をなるべく新しいバージョンに更新したい。
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 ?? ()
96Boards の aarch64 userland 環境 (rpb/rpb-wayland) では、 Firefox の起動後、ページがレンダリングされた直後に SEGV で落ちる。ネットワークに未接続などコンテンツが取得できない状態だと、少し経ってから落ちる。
(一度落ちると、 ~/.mozilla を消さない限り、ウィンドウが出る前に落ちる)
https://bugzilla.mozilla.org/show_bug.cgi?id=1304962 と同じ問題のように思えるが、パッチを適用しても直らなかった。 (要再確認)
#2 (comment) より
wayland版で終了時にクラッシュすることがある
現在のFirefox 45のレシピではWebRTCのビルドが通らなかったため、一時的にWebRTCのビルドを無効化してある。同一バージョンのIntel PC上ではビルド・動作を確認しているので、ARMでのビルドの問題。これは以下で直っている。
https://bugzilla.mozilla.org/show_bug.cgi?id=1252699
Firefox 45.2.0にも修正が入っている。
上記バージョンに上げるついでにWebRTCのビルドも有効化する。
重要性は高くないが要調査として Issue たてておきます
HDMI ディスプレイのない所で開発するとき、シェルは ssh 接続やシリアルコンソールから、Firefox は取り敢えずパソコン側から http://dragonboard-410c-32.local:3000/ もしくは IP アドレス指定でリモート接続して確認することが出来るが、実際の実機上で HDMI 出力したときの結果を再現するにはやはり X11 フォワーディングが使えるのが望ましい。
現状、ssh -X で接続して一応使えるが、firefox については激重&マウスの反応とかあやしく firefox http://localhost:3000/ などと URL 指定して読み込ませるところまでは出来ても操作まで確認できない。
ルネサスRZ/Gシリーズでgem-tanzanite を用いたデモを行うために手元でSDブートイメージを作成して使用しているが、現状ではレシピだけでは同環境を再現することができず、手動での設定も必要となっている。
meta-rzg-demosと同様に、bitbake一発でデモ環境を構築できるようにレシピを整備する。
http://www.iwavejapan.co.jp/product/renesas%20rz-g1m-dev2.html
RZ/G1E StartKitとほぼ同じ手順 (https://github.com/mozilla-japan/meta-browser/wiki/Build-RZ-G1E) でビルドできるが、少し修正が必要
bb.utils.contains_any
が使えない。レシピを修正するか、ビルド手順を変更する(contains_anyを使えるようにcherry-pick)Contentアクセラレーションの対応状況をメモしておく。
XRenderで対応済み。効果はそれほど大きくないが、切ると体感で分かる程度には性能が低下する。
XRenderのoff設定:
user_pref("gfx.xrender.enabled", false);
以下の設定でSkiaを有効化できるが、フォントの描画が欠けるなどの問題が発生する。
user_pref("gfx.canvas.azure.backends", "skia");
user_pref("gfx.content.azure.backends", "skia");
以下でGPUを有効化するとクラッシュする。
user_pref("gfx.canvas.azure.accelerated", true);
未対応。cairo-eglの実装を追加してみる?
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を高速に連続でクリックすると再現しやすい。
問題が起こると #48 でのコンテキストメニューと同様の見た目になる。
現状では一旦起こるとFirefoxの再起動しか解消の手段がない。
GNU/Linux版FirefoxはH.264のソフトウェアデコーダーとしてFFmpeg(libavcodec)を使用することが
できるが、映像は再生できるものの、音声(AAC)はノイズが乗って聞き取ることができない。
Wandboardおよびi.MX6 SABREで確認。PCでは特に問題ない。
デフォルトのビルドや Chromium などと比べても確実に高速化はできているが、前後の比較や他のプロダクトとの比較を明確な数値としては持っていないので何か用意したい。
比較という意味では
など考えられるが、比較より単に単体での性能を表すもので十分かも知れない。
Qt との比較についてはゲームなどあるかもだが実装依存だし GPU 性能そのままの WebGL よりも HTML や Web 技術の利点が生きる HMI 向けで比較したいが直接比較は難しいそう。何かアイデアあればコメントください。
note: PC 向けのブラウザベンチマークについては Benchmark ページ にメモしています
#20 より
RZ/G1でのWayland版の動作を改善するためにWestonのバージョンを上げているが、Yocto-1.6系の最新レシピを使用するとWestonがクラッシュする。現在はビルド手順でリビジョンを固定して対応している。
AM572x Evaluation Moduleが入手できそうなので、ビルドを試してみる。
SDKビルド手順: http://processors.wiki.ti.com/index.php/Processor_SDK_Building_The_SDK
現状 Project GEM のデザインとして GEM Design とかになってる気がするが専用のコードネームを選びたい。もちろん宝石名か関連用語。
現時点で Dragon Board 向けには 32bit ビルドに Firefox 45 と Node 4.6.x を組み合わせて使える環境ができているが、実際使ってみてのフィードバックを受けてもう少し使い易いビルドに更新していきたい。ひとまず現状でのチェックリストを Issue として立てておきます:
note:
RZ/G1でのH.264映像デコードは #3 でOpenMAX ILによる対応を行ったが、RZ/G1ではAACのOpenMAX ILコンポーネントが提供されないため、この方法では音声を再生することができない。
コンポーネントがあれば再生できると思われるが、モノがないため動作テストは行っていない。
FFmpegを有効化しておけばそちらのデコーダが使えるが、これについても #8 の問題があって再生することはできていない。
GStreamerを使う場合はfaadでデコードされているようだ(製品で使うのはライセンス上問題があると思うが)。
#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対応
を維持させることは必ずしも考えなくて良い。
9/28 の次は 10 月末から 11 月の何処かを想定中
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.