Processing on Leopard – 描画の高速化

2008 BLOG

先日もお伝えしたように、つい先日、新しい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に指定されていると考えてもらっていい。

Picture 3-8

実際に、このオプションをオン/オフするとどれくらいパフォーマがかわるのかをテストする簡単なP5 Appletを作ってみた。

クリックで描画のタイプ(円, 画像 – スケーリング/アルファの有無)、スペースキーでアンチエイリアスの有無(smooth(), noSmooth())が切り替えられるようになっている。UseQuartzオプションの情報も中央に表示されるようにした。

Appletstart-4-1-2

参考までに手元の環境でのだいたいの描画速度をまとめた。

アンチエイリアスあり

アンチエイリアスなし

明らかなのは、アンチエイリアスをオンにして、画像をスケーリングしたときのパフォーマンスの差。また、Sun2Dではアンチエイリアスをオフにしたときの円(ellipse)の描画が、オンのときよりも遅いという不思議な結果がでている。

なぜこうなるのかはProcessingのコードを読んでみる、またJavaのグラフィックスのPipelineを理解することが必要になるだろう。その辺は時間があればまたやってみたい。コードリーディングは今、日本で流行っているらしいからね :-)

ちなみに、アプリケーション中でUseQuartzオプションをチェックするために、Propertyを使っている。

	System.getProperty("apple.awt.graphics.UseQuartz");