coding, photo, plant and demo

*webkitで紐解くhoneycombの大変革

tech android 20110223 200346
SDKが正式に公開されたAndroid 3.0ことHoneycombですが、ソースはまだ公開されていません。

と、思いきや一部のHoneycombブランチは見えてるようです。しかも結構前から。
僕が気づいたのはwebkitだけですが、これを眺めてみることにします。
http://android.git.kernel.org/?p=platform/external/webkit.git;a=summary

ひとまずcloneして手元でgingerbread->honeycombの差分を取ります。
$ git clone git://android.git.kernel.org/platform/external/webkit.git 

$ git diff --stat origin/gingerbread..origin/honeycomb
 18114 files changed, 1667748 insertions(+), 351392 deletions(-)

$ git diff --stat origin/gingerbread..origin/honeycomb -- WebCore
 5512 files changed, 603307 insertions(+), 212394 deletions(-)

$ git diff --stat origin/gingerbread..origin/honeycomb -- WebKit/android
 136 files changed, 13944 insertions(+), 2099 deletions(-)

$ git diff origin/gingerbread..origin/honeycomb -- WebCore/Configurations/Version.xcconfig
-MAJOR_VERSION = 533;
-MINOR_VERSION = 1;
+MAJOR_VERSION = 534;
+MINOR_VERSION = 13;
分かることは
  • コアのメジャーバージョンが534に上がっている
  • android固有のコードも大幅に変更がある
です。

webkitを知らない人には何のことやらと思いますが、
  • WebCore : platform依存のないコアの部分 *0
  • WebKit/android : android固有のコード
  • Version.xcconfig : 俗に言うWebKitのversionが書かれた場所
を頭に置いて見てください。

wikipediaに依れば、534はChrome6-10相当らしいです。webkit本家のtrunkですら今見たら534.22で、Safari 5.0.3branchは533.19ですから、honeycombのwebkitは相当新しいと言って良さそうです。

ちなみにfroyo->gingerbreadでは
$ git diff --stat origin/froyo..origin/gingerbread
 81 files changed, 3125 insertions(+), 735 deletions(-)

$ git diff --stat origin/froyo..origin/gingerbread -- WebCore
 52 files changed, 748 insertions(+), 213 deletions(-)

$ git diff --stat origin/froyo..origin/gingerbread -- WebKit/android
 19 files changed, 2228 insertions(+), 521 deletions(-)

$ git diff origin/froyo..origin/gingerbread -- WebCore/Configurations/Version.xcconfig
(差分なし)
この程度の差分です。いかにhoneycombの変更が巨大かが分かります。
追加された行で考えたら、1667748 / 3125 = 533 倍の変更量です。恐ろしいことになりました。

それから余談ですが、commit treeを見ると面白いことが分かります。
$ git log --pretty='%h %ci %cn %s' origin/gingerbread..origin/honeycomb
99b9746 2011-01-20 05:56:12 -0800 Android (Google) Code ReviewMerge "Do not reveal selection unless the focus controller is active." into honeycomb
(中略)
ac3440a 2010-03-26 14:30:27 +0000 Nicolas Roard Add checks to consider a fixed layer for compositing only if its dimensions are actually more than zero.
27ec2ee 2010-03-26 11:17:35 +0000 Steve Block Cherry-picks WebKit change 56105 to eliminate use of bzero in WebKit common code

$ git name-rev --name-only ac3440a                                                                              
honeycomb~1007^2
これが意味するところは、gingerbreadには入っていないがhoneycombには入っている、約1年前のcommitがある、ということです。 *1
つまり、honeycomb向けの開発はgingerとは別に1年前から始まっていたことが分かります。

ということで、コードの中身は全く追ってませんが、gitでlogを見るだけでも結構面白いですよ、というお話でした。
*0 : 実際にはplatform依存も混じってるけどねえ
*1 : git log --pretty='%H %ci %cn%s' origin/gingerbread..origin/honeycomb | git name-rev --stdin 等としたほうがもっと分かり易いかも