modest02 freetype2 on fx-3.6 win32

33
2010/2/20 Mozilla 勉強会@大阪 freetype2 on fx-3.6 win32 by ABE Hiroki aka hATrayflood

Upload: hatrayflood

Post on 07-Jul-2015

1.155 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

freetype2 onfx-3.6 win32

by ABE Hi rok i aka h ATrayf lood

Page 2: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

フォント描画にfreetype2を使ってみた

by ABE Hi rok i aka h ATrayf lood

Page 3: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

試作品配布中↓http://rayflood.org/mozilla/パッチもあるよ!

by ABE Hi rok i aka h ATrayf lood

Page 4: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

効果がよくわかるページ・Mozilla Japan 全般・ニコニコ動画・VLゴシック、梅フォントなど

by ABE Hi rok i aka h ATrayf lood

Page 5: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

ビルドする・configure/make・Direct X

by ABE Hi rok i aka h ATrayf lood

Page 6: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

configure/make・--enable-tree-freetype・ソース/Makefileの修正・libpixman DLL化

by ABE Hi rok i aka h ATrayf lood

Page 7: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

Direct X・モジュールの依存関係 thebe→cairo→freetype2+DX widget→DX(freetype2有効時)

by ABE Hi rok i aka h ATrayf lood

Page 8: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

Direct X・もともとWinCE向け実装 →マクロが非互換(次ページ)・ddraw.lib(=DX SDK)が必要

by ABE Hi rok i aka h ATrayf lood

Page 9: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

IDirectDrawSurface::Lock DX 9.0 CE 6.0DX 9.0 CE 6.0

DDLOCK_WAIT DDLOCK_WAITNOTBUSYDDLOCK_DISCARDCONTENTSDDLOCK_DISCARD

IDirectDrawSurface::Blt DX 9.0 CE 6.0DX 9.0 CE 6 .0

DDBLT_WAITDDBLT_WAITNOTBUSY

多分合ってるはず…

by ABE Hi rok i aka h ATrayf lood

Page 10: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

独自に手を加えた箇所・太字処理・メイリオ斜体

by ABE Hi rok i aka h ATrayf lood

Page 11: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

太字処理・フォントそのものに boldがないと太字にならない・斜体も同様だがこっちは 字体を変形させて表示してる

by ABE Hi rok i aka h ATrayf lood

Page 12: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

しかし…・freetype2自体には 太字処理が存在する→フォントにboldがない場合は freetype2に太字させればいい

by ABE Hi rok i aka h ATrayf lood

Page 13: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

・cairo-types-private.h:117struct _cairo_font_options { cairo_antialias_t antialias; cairo_font_slant_t font_ slant; cairo_font_weight_t fon t_weight; cairo_subpixel_order_t subpixel_order; cairo_hint_style_t hint_style; cairo_hint_metrics_t hint_metrics;};

by ABE Hi rok i aka h ATrayf lood

Page 14: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

・gfxFT2Fonts.cpp:866PRBool needsEmbolden = (!aFontEntry->IsBold() && (aStyle->weight > FONT_WEIGHT_NORMAL));if (needsEmbolden) { const double width = 1.03125; const double widthByStyle = (aStyle->size + 1.0) / aStyle->size; cairo_matrix_t identityStyle; cairo_matrix_init_scale(&identityStyle , (width > widthByStyle) ? width : widthByStyle, 1.0); cairo_matrix_multiply(&identityMatrix, &identityMatrix , &identityStyle); cairo_font_options_set_f ont_weight(fontOptions , CAIRO_FONT_WEIGHT_BOLD);}

by ABE Hi rok i aka h ATrayf lood

Page 15: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

・cairo-ft-font.c:1567// ついでにビットマップフォント禁止scaled_font->ft_options.load_flags |= FT_LOAD_NO_BITMAP;if (options->font_weight == CAIRO_FONT_WEIGHT_BOLD) { scaled_font->ft_options.extra_flags |= CAIRO_FT_OPTIONS_EMBOLDEN;}

by ABE Hi rok i aka h ATrayf lood

Page 16: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

メイリオ斜体・メイリオにはitalicが含まれてる・しかし、実際に斜体になってるのは 英数のみ。日本語は斜体じゃない →メイリオフォントで斜体を表示

by ABE Hi rok i aka h ATrayf lood

Page 17: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

つまり…・アプリはitalicのつもりでも 実際には斜体じゃない ものが描画される

by ABE Hi rok i aka h ATrayf lood

Page 18: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

しかし…・italicが含まれてない場合は 変形させて斜体に見せてくれるので・メイリオのitalicを読み込まなければ 自動的に斜体に変形してくれる

by ABE Hi rok i aka h ATrayf lood

Page 19: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

・gfxFT2Fonts.cpp:175if (!strcmp("Meiryo" , aFace->family_name)&& (aFace->style_flags & FT_STYLE_FLAG_ITALIC)) { FT_Done_Face(aFace); return nsnull;}

by ABE Hi rok i aka h ATrayf lood

Page 20: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

性能測定・起動速度・メモリ消費量・描画速度・Peacekeeper

by ABE Hi rok i aka h ATrayf lood

Page 21: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

マシンスペック・FMV LOOX R A70N・Core 2 Duo SL7100 1.2GHz・メモリ4GB(実質3.25GB)・Windows XP Professional SP3

by ABE Hi rok i aka h ATrayf lood

Page 22: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

ビルドオプション・通常プロファイル最適化(PGO)あり--enable-jemalloc --disable-libxul--enable-optimize=-O2 -arch:SSE2 -GT・freetypeプロファイル最適化(PGO)あり--enable-jemalloc --disable-libxul--enable-optimize=-O2 -arch:SSE2 -GT--enable-tree-freetype

by ABE Hi rok i aka h ATrayf lood

Page 23: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

起動速度試行回数 1 2 3 4通常 0m9.329s 0m1.924s0m2.048s0m2.001sfreetype 0m14.774s0m4.986s0m4.922s0m5.001s

フォント読み込みは時間がかかる…測定方法は次ページ

by ABE Hi rok i aka h ATrayf lood

Page 24: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

起動時に以下のスクリプトを実行するアドオンを仕込みcygwinのtimeコマンドのreal値を測定window.addEventListener("load", function(){ window.removeEventListener("load" , arguments.callee, true); window.setTimeout(goQuitApplication, 1000);}, true)

by ABE Hi rok i aka h ATrayf lood

Page 25: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

http://nontroppo.org/timer/を20タブ開くメモリ消費量起動直後表示直後閉じた後通常 47,880kb 126,840kb65,736kbfreetype 90,648kb 152,268kb97,956kb

フォント読み込みにも相当メモリを喰う…ページ当たりの消費量は大して変わらない

by ABE Hi rok i aka h ATrayf lood

Page 26: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

http://nontroppo.org/timer/のDoc load試行回数 1 2 3 4通常 506ms418ms405ms411msfreetype 497ms430ms417ms411ms

描画速度は遅くはない

by ABE Hi rok i aka h ATrayf lood

Page 27: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

Peacekeeperの総合スコア試行回数 1 2 3 4通常 1835180018211818freetype 1829180018091808

ブラウザ全体のベンチマークも遅くはない

by ABE Hi rok i aka h ATrayf lood

Page 28: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

Peacekeeperの詳細スコア

項目 RenderingSocial

networkingComplexgraphics

通常 1696 2028 3114freetype1704 1949 3196

項目 DataDOM

operationsTextparsing

通常 3096 1287 1522freetype3060 1290 1563

詳細で見ても同様。有意な差はない

by ABE Hi rok i aka h ATrayf lood

Page 29: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

他ブラウザとの比較・描画方法・フォント名指定

by ABE Hi rok i aka h ATrayf lood

Page 30: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

描画方法 チェック用ページIE6 Win fx-3.0 Win?IE7 Win fx-3.5 Win?IE8 Win fx-3.6 Win?

Safari4 独自?fx-3.6

+freetype2freetype2

chrome4Win Opera10 Win

Win=WindowsネイティブWin?=アウトラインを使う場合がある

by ABE Hi rok i aka h ATrayf lood

Page 31: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

フォント名指定 チェック用ページIE6 日/英 fx-3.0 日/英IE7 日/英 fx-3.5 日/英IE8 日/英 fx-3.6 日/英

Safari4 日/英fx-3.6

+freetype2英のみ

chrome4日のみ Opera10 日のみ

※日本語英語両方の名前を持つフォントが対象

by ABE Hi rok i aka h ATrayf lood

Page 32: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

今後の課題・フォント日本語名・woffフォント

by ABE Hi rok i aka h ATrayf lood

Page 33: Modest02 freetype2 on fx-3.6 win32

2010/2/20 Mozi l l a 勉 強会@大阪

・リンク集IDirectDrawSurface::Lock DirectX 9.0http://msdn.microsoft.com/ja-jp/library/cc355921.aspxIDirectDrawSurface::Lock Windows Embedded CE 6.0http://msdn.microsoft.com/en-us/library/ee491248.aspxIDirectDrawSurface::Blt DirectX 9.0http://msdn.microsoft.com/ja-jp/library/cc355898.aspxIDirectDrawSurface::Blt Windows Embedded CE 6.0http://msdn.microsoft.com/en-us/library/ee491237.aspxメイリオフォントで斜体を表示http://laputa.cs.shinshu-u.ac.jp/~nakayama/others/meiryo.htmlPeacekeeper The Browser Benchmarkhttp://service.futuremark.com/peacekeeper/index.action描画方法 チェック用ページhttp://rayflood.org/diary-temp/fontrender.htmlフォント名指定 チェック用ページhttp://rayflood.org/diary-temp/aa-pgothic.html

by ABE Hi rok i aka h ATrayf lood