Processing on Leopard – 描画の高速化
2008 BLOG
Recent Posts
先日もお伝えしたように、つい先日、新しいMacBook Pro (= Leopard)に開発環境を乗り換えた。ピンチイン/ピンチアウトや回転などの新しいマルチタッチのインタフェースを一通り試してから、さて開発に取りかかろうかといつも通りTextMateとProcessing IDEを立ち上げた。ところが…
Photoshopなどのベンチマークでは、以前のMacBook Proに比べて、1.5倍程度の処理速度がでていたので、Processingの描画もさぞさくさく動いてくれるだろうとわくわくしながら、ここ数ヶ月作っているシステムを動かしてみて驚いた。Tigerをつかっていた以前のMacBookProに比べて、Leopard搭載の新しいマシンでは、描画が極端に遅い! 二次元の描画、特にPImageを使った画像の描画で顕著な違いが出た。CPU, GPU, メモリともに高速化/大容量化しているはずなのに、昔のマシンの方が速いというのはどういうこと?? 考えられる原因としてはOSの違いということになる。
そこで調べてみたところ、ありましたありました。 (というか、こんな肝心な情報を見逃していたのも問題だ…)
Leopardに搭載されているJ2SE 5.0 (1.5.0_13_b05)から、デフォルトの2DのレンダリングエンジンがAppleのQuartzからSunのSun2D rendererにスイッチしたとのこと。
Sunのレンダリングエンジンを使うことで、他の環境との整合性は保たれやすいかわりに、まだ用途によってはQuartzを使っていたときよりも遅くなることがある… らしい。その点はAppleのエンジニアも認めている。
Generally speaking, sometimes the performance of the Sun2D renderer can be worse, depending on your application – however it should have similar performance compared to Windows and Linux. (Java-dev MLより)
これらをふまえて、開発者向けのオプションを指定することで、Quartzを使うように強制することもできるようになっている。Sun2Dを使うのは、あくまでも「デフォルトでは」という話のようだ。
オプションは、/Applications/Utilities/Java/Java Preferences.appで指定する。
-Dapple.awt.graphics.UseQuartz=true
Tigerでは、デフォルトでこれがtrueに、Leopardからはfalseに指定されていると考えてもらっていい。
実際に、このオプションをオン/オフするとどれくらいパフォーマがかわるのかをテストする簡単なP5 Appletを作ってみた。
クリックで描画のタイプ(円, 画像 – スケーリング/アルファの有無)、スペースキーでアンチエイリアスの有無(smooth(), noSmooth())が切り替えられるようになっている。UseQuartzオプションの情報も中央に表示されるようにした。
参考までに手元の環境でのだいたいの描画速度をまとめた。
アンチエイリアスあり
アンチエイリアスなし
明らかなのは、アンチエイリアスをオンにして、画像をスケーリングしたときのパフォーマンスの差。また、Sun2Dではアンチエイリアスをオフにしたときの円(ellipse)の描画が、オンのときよりも遅いという不思議な結果がでている。
なぜこうなるのかはProcessingのコードを読んでみる、またJavaのグラフィックスのPipelineを理解することが必要になるだろう。その辺は時間があればまたやってみたい。コードリーディングは今、日本で流行っているらしいからね :-)
ちなみに、アプリケーション中でUseQuartzオプションをチェックするために、Propertyを使っている。
System.getProperty("apple.awt.graphics.UseQuartz");
Recent Posts
Featured Articles