Ubuntu12.04 (64bit)でGTK版のWebKitをビルドする時、libsecret-1-devをapt-getしようとしてもnot foundと言う事でインストール出来ない。
このライブラリはwebkit.orgでインストールを指定されているものであり、当然インストールされていない状況でWebKitをビルドしようとしても、以下の通り、エラーとなる。
> Tools/Scripts/build-webkit --gtk
.....
checking for LIBSECRET... no
configure: error: Package requirements (libsecret-1) were not met:
No package 'libsecret-1' found
.....
当然なければソースコードからインストールする必要があると言う事で、以下のサイトを参考にインストール。
http://git.gnome.org/browse/libsecret/
gitのアドレスが記載されているので、そのアドレスからソースコードを入手。
> git clone git://git.gnome.org/libsecret
その後はお決まりの手順でmake & install。
> cd libsecret
> ./autogen.sh
> make
> sudo make install
これでGTK版のWebKitはビルド出来る。
2012年11月23日金曜日
2012年9月23日日曜日
Skia for NaCl
最近、色々と事情があり調べなければ行けない事がコロコロと移り変わるので結構しんどい。で、今はSkiaについて。
SkiaのSource Codeを調べていると、どうもnacl関係のディレクトリが作られている。naclと言えばNative Clientの事だろう。つまりはnacl環境で使えるSkiaが開発されていると言う事か?とかなり期待。
この中のindex.htmlを見てみると、どうやらIntel系CPU向けのnaclでskiaを動かそうという試みらしい。
ChangeLogから色々情報を探してみると、どうも2週間程度前から開始されたプロジェクトの様で、まだ動作するには色々やる事がある様子。今の所、サンプルHTMLとサンプルサーバまでの様で、naclport内でskiaをビルドするのはまだ出来ていない。今後に期待ですね。
2012年3月11日日曜日
checking chromium processes structure
Linuxでプロセスを調べる場合にはpsコマンドを使うことがあるが、あんまり見やすいとは言い難い出力になる(少なくとも自分には)。
今回プロセスの親子関係を調べたいと思って調べたら"pstree"なるコマンドがLinuxにはあって、それを使うと、
init─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─19*[{chromium-brows}]
├─chromium-browse───chromium-browse───3*[{chromium-brows}]
/* 省略 */
みたいな感じでinitをルートとしたプロセスがきっちりと親子関係が分かりやすく出力してくれる(多分、上の例は等幅フォントじゃないとずれて見えると思うが)。
N*[...]で囲まれているのは、...がN個その階層に存在していることを意味し、{...}は...がスレッドであることを意味する。
つまり、上記の例で見ると1個目のchromium-browse(rが抜けている…文字制限か…)の下には1個の子プロセスと19個のスレッドがあり、2個目のchromiumは1個の子プロセスを持ち、その子プロセスには3個のスレッドがあるという事になる。
ちなみに上記例はchromium-browserを起動した直後の状態なので、Linux版chromiumは起動直後で既に4プロセス動いている訳だ。
ここでchromiumのタブを一つ追加して、再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─15*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。2個目のchromium-browseの子プロセスが2個に増えている事が分かる。よく見ると1個目のchromium-browserのスレッド数が19個から15個に減っているがこれだけでは理由は不明。
どちらにせよ1個目のchromium-browseがBrowser UIプロセスで、 2個目がRender Viewプロセスの様だ。おそらく親のプロセスは管理プロセスか何かではないかと推測。
またここで先ほど追加したタブを別ウィンドウとして切り離して再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─16*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。Browser UIプロセスと思われるchromium-browserのスレッド数が1個増えているが、Render VIewプロセスと思われるchromium-browserの子プロセスは増えていない。
どうやらchromium-browserは複数のタブをウィンドウに分離してもBrowser UIプロセスは増やさずに管理している様子。
今回プロセスの親子関係を調べたいと思って調べたら"pstree"なるコマンドがLinuxにはあって、それを使うと、
init─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─19*[{chromium-brows}]
├─chromium-browse───chromium-browse───3*[{chromium-brows}]
/* 省略 */
みたいな感じでinitをルートとしたプロセスがきっちりと親子関係が分かりやすく出力してくれる(多分、上の例は等幅フォントじゃないとずれて見えると思うが)。
N*[...]で囲まれているのは、...がN個その階層に存在していることを意味し、{...}は...がスレッドであることを意味する。
つまり、上記の例で見ると1個目のchromium-browse(rが抜けている…文字制限か…)の下には1個の子プロセスと19個のスレッドがあり、2個目のchromiumは1個の子プロセスを持ち、その子プロセスには3個のスレッドがあるという事になる。
ちなみに上記例はchromium-browserを起動した直後の状態なので、Linux版chromiumは起動直後で既に4プロセス動いている訳だ。
ここでchromiumのタブを一つ追加して、再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─15*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。2個目のchromium-browseの子プロセスが2個に増えている事が分かる。よく見ると1個目のchromium-browserのスレッド数が19個から15個に減っているがこれだけでは理由は不明。
どちらにせよ1個目のchromium-browseがBrowser UIプロセスで、 2個目がRender Viewプロセスの様だ。おそらく親のプロセスは管理プロセスか何かではないかと推測。
またここで先ほど追加したタブを別ウィンドウとして切り離して再度pstreeを実行すると
/* 省略 */
├─chromium-browse─┬─chromium-browse
│ └─16*[{chromium-brows}]
├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]
/* 省略 */
と出力される。Browser UIプロセスと思われるchromium-browserのスレッド数が1個増えているが、Render VIewプロセスと思われるchromium-browserの子プロセスは増えていない。
どうやらchromium-browserは複数のタブをウィンドウに分離してもBrowser UIプロセスは増やさずに管理している様子。
2012年2月22日水曜日
How to invoke v8 engine on chromium
少しWebKitから外れて、chromiumの調査をしてみる。
気になっていたのはchromiumのWebKitとv8の関係。WebKitはJavaScriptCoreを持っているのだが、一部を流用してv8が動いているのか、それともv8単体でJavaScriptを実現しているのか。そして、WebKitとv8の繋ぎはどうなっているのか。
とりあえずWebKitとv8の繋ぎをコードを追っかけてみた結果が下のシーケンス図。
WebCoreのScriptElementからScriptControllerのevaluate()を実行しているが、このScriptControllerはv8用とjs用の2種類が用意されていて、chromiumではv8用のコードがビルド時に使われ、そのままv8に流れて行く事になる。
次にV8Proxyでv8のライブラリを呼び出してv8の機能でプリコンパイル、コンパイル、実行、と処理を行っている。最終的な実行はi:Executtionで行っている様子。この構成を見る限り、v8は単独でJavaScriptを実現している様だ。まあ、v8のスタンドアローン版もある訳だし、敢えてブラウザの場合だけJavaScriptCoreと連動するってのも変な構成だし、至極当たり前な流れだ。
次はv8はJITコンパイラな訳だから、ネイティブコンパイルする条件を調べたい。
(2/22追記)
chromiumのコードにprintf()を追加してビルドしてみて分かったのだが、どうもV8Proxyから左側はchromiumのビルド時にターゲットから外れている様子。調べ直しだな。。。
(2/23追記)
v8はJITコンパイルするけれど、Firefoxのとは違って全て初回実行時にネイティブビルドすると言う事が分かった。全て初回ビルドか。。。
気になっていたのはchromiumのWebKitとv8の関係。WebKitはJavaScriptCoreを持っているのだが、一部を流用してv8が動いているのか、それともv8単体でJavaScriptを実現しているのか。そして、WebKitとv8の繋ぎはどうなっているのか。
とりあえずWebKitとv8の繋ぎをコードを追っかけてみた結果が下のシーケンス図。
次にV8Proxyでv8のライブラリを呼び出してv8の機能でプリコンパイル、コンパイル、実行、と処理を行っている。最終的な実行はi:Executtionで行っている様子。この構成を見る限り、v8は単独でJavaScriptを実現している様だ。まあ、v8のスタンドアローン版もある訳だし、敢えてブラウザの場合だけJavaScriptCoreと連動するってのも変な構成だし、至極当たり前な流れだ。
次はv8はJITコンパイラな訳だから、ネイティブコンパイルする条件を調べたい。
(2/22追記)
chromiumのコードにprintf()を追加してビルドしてみて分かったのだが、どうもV8Proxyから左側はchromiumのビルド時にターゲットから外れている様子。調べ直しだな。。。
(2/23追記)
v8はJITコンパイルするけれど、Firefoxのとは違って全て初回実行時にネイティブビルドすると言う事が分かった。全て初回ビルドか。。。
ラベル:
Browser,
chromium,
JavaScript,
v8,
WebKit
2012年2月21日火曜日
WebKitGtk Build on Ubuntu11.10 Part 2
pixmanが取得出来ない問題は時間帯を変えると、すんなり通った。。。
しかし、pixbufで以下のエラーが。。。
(追記)
すべて正常にインストールが完了した様子。
明日はようやくWebKit本体のビルドが出来る。
しかし、pixbufで以下のエラーが。。。
make[4]: *** `all-am' に必要なターゲット `GdkPixbuf-2.0.typelib' を make するルールがありません. 中止.加えてlibsoupでも
make[2]: *** ターゲット `/usr/share/gobject-introspection-1.0/Makefile.introspection' を make するルールがありません. 中止.
at-spi2-coreでも
make[2]: *** `Atspi-2.0.gir' に必要なターゲット `/usr/bin/g-ir-scanner' を make するルールがありません. 中止.
こんなエラーでmakeが失敗する。。。
少なくとも/usr/share/gobject-introspection-1.0なるディレクトリは存在しない。
> sudo apt-get install gobject-introspectionとかやってみるとインストールが始まる。。。make時のログ出力を確認すると
checking for gobject-introspection... yes
と出力されているが、うまくチェック機構が動作していないのだろうか。。。
とりあえず、状況を変更したので再度
> Tools/Scripts/update-webkitgtk-libsを実行してみると、何故かpixbufもうまくmakeできる様になった。成功するのは良いんだけれども、原因が分からないまま成功するのは気持ちがいいモノではないなあ。その勢いで今までconfigureすら動かなかったものまで動作し始めて、また完了まで時間がかかりそうなので、今日はここまで。
(追記)
すべて正常にインストールが完了した様子。
明日はようやくWebKit本体のビルドが出来る。
2012年2月18日土曜日
WebKitGtk Build on Ubuntu11.10 Part 1
Gtk版のWebKitが欲しいので、ビルドしようとトライしていたのだが、Ubuntu10.04では必要なライブラリをインストール出来ず(正確にはインストールできるが色々な物を破壊してしまう。。)挫折。Ununtu11.04でもやってみて何とかウィンドウが表示される所までは行ったのだが、何故かページロードが出来ないし、裏では色々とエラー吐き撒くっているので、ちょっと微妙。と言う訳でビルドが出来ないのはUbuntuのバージョンが古いからという勝手な理由付けで、今回はUbuntu11.10で再チャレンジ(本当はもっとLinuxについて調べておくべきだとは思うんだが、時間がない)。
Install the base WebKitGTK+ dependencies
ここもapt-getはエラーなく完了。Ubuntu10.04でもエラーは出なかった筈。
(追記)
と思ったが、並行してnightly buildから取ってきて残りの手順を実施してみる。
Firefox on Ubuntu11.10で該当URLにアクセスしてみてもやはりダウンロードできない。Chrome on MBAでもcairographics.orgにアクセス出来ず。
他のチェックアウトは成功するので、サーバメンテでもしているのだろう。あとで、pixmanのためにやり直さないと。。。
とりあえず、時間がないのでここまで。
ビルド環境となるUbuntu11.10は以下の通りVirtualBox上で実行。
- Ubuntu11.10 on VirtualBox on MacBookAir (Mac OS X 10.6.8)
ここの内容に従って環境構築。
apt-getはUbuntu10.04では色々とインストール出来なかったのだが、今回は特にエラーも出ずに全てインストール成功。
Install the jhbuild module dependenciesここもapt-getはエラーなく完了。Ubuntu10.04でもエラーは出なかった筈。
ここでGitをインストールしていない、WebKitのソースコードを取得していない(^^;)のでインストールとチェックアウト。
> sudo apt-get install git-core
> cd webkit
> git clone git://git.webkit.org/WebKit.git WebKitチェックアウトに時間がかかるので取り敢えずここまで。
(追記)
と思ったが、並行してnightly buildから取ってきて残りの手順を実施してみる。
> Tools/Scripts/update-webkitgtk-libsどうもpixmanのwgetで応答がないので再試行を繰り返している。。。cairographics.orgにはアクセス出来ている様なのだが、ダウンロードが出来ない様子。
Firefox on Ubuntu11.10で該当URLにアクセスしてみてもやはりダウンロードできない。Chrome on MBAでもcairographics.orgにアクセス出来ず。
他のチェックアウトは成功するので、サーバメンテでもしているのだろう。あとで、pixmanのためにやり直さないと。。。
とりあえず、時間がないのでここまで。
WebKit Page Cache I - The Basics 抄訳
WebKit Page Cache I – The Basics
Page Cacheの内部動作を調べる必要があったので、上記記事を読んでみた。ざっと見ただけで内部動作については書かれていない事は分かったが、取り敢えずちょこっとピックアップして和訳。
Page Cache Overview
- Page Cache=Firefoxの"Back-Forward Cache"、"bfcache"、Operaの"Fast History Navigation"と呼ばれる。
- WebKitの"Back/Forward List"と"Page Cache"は違う(らしい)。
- Page Cacheはウェブをよりスムーズに移動出来る様にするためのエンドユーザ向けの機能。
- "HTTP sense"、"disk cache"、"memory cache"における"cache"とは異なる。
- Page Cacheは「あるページを移動する時に"一時停止"し、そのページに戻ってきた時に"再生"する」機能。
- 新しいページに遷移する場合、前のページのDOM、JavaScript、プラグイン、画像等はクリアされてしまうと、戻るボタンで戻ってくると再度これらリソースをネットワーク上から取得して、ページを再構築しなければならず、非効率。
- 以前のページのリソースを(戻るボタンを押された場合のために)解放せずに維持しておくのがPage Cache。
Why Wouldn't Work?
- Page Cacheがそんなに素晴らしいものならば、新しいページに遷移する時にWebKitは常にPage Cacheを使わないのか?
Some Pages aren't Interesting
- ページロードが未完了、もしくはエラーの場合や、他のURLにリダイレクトするページの場合にはPage Cacheは動作しない。
Some Pages are Complicated
- ウェブページはPage Cacheされる事を想定されていないかも知れないため、"一時停止"する事が難しい場合もある。WebKitが"一時停止"できないネイティブコードを持つプラグインを持つ場合や、WebKitが履歴上キャッシュ管理していない複数フレームを持つページ等があげられる。
Some Pages are Secure
- WebKitは全てのHTTPSサイトをPage Cacheから展開する事を許可していない。
Planned Improvements
- revision 48036では主要な制約が解消され、フレームを持ったページのPage Cacheが可能。
- Plug-inサポートは計画中改善の中の大きなアイテム。
Unload Handlers
- unloadイベントは、ユーザがページをクローズした時にページにcleanup処理をさせるために設計されたもの。
- Page Cache内にページを移動させる前に、ブラウザはunloadイベントを発火させる事ができない。
- もしブラウザがunloadイベントを行わずにPage Cacheにページを移動させるならば、そのページは"一時停止"されて隠れている間にブラウザによって解放されるかも知れず、その場合cleanup処理は決して動作しない。
- unloadイベントの目的はページが閉じられる時の重要な処理を許可する事であり、全ての主要ブラウザはそのようなページをPage Cacheに移動する事を拒絶しており、ユーザ操作上のインパクトに繋がる。
ラベル:
Browser,
Page Cache,
Web,
WebKit
登録:
投稿 (Atom)
