| 718 |
|
|
[Development]
야밤을 틈타 옛 생각에 물들어.. 한창 애플릿 클라이언트 만들던 2000-2001년 시절 백업해둔 시디를 뒤져보다가, 겨니와 열심히 만들던 가빠채팅 을 찾게 되었다.
암튼
java.awt.Canvas 클래스 내 EventDispatchThread (EDT) 안에서 getGraphics로 graphics context 를 가져온 뒤 여기다 setXORMode 를 입히고 fillRect 를 하면 엄청난 성능저하를 볼 수 있다. (setXORMode를 빼보니 빠르게 동작한다. 다른 부분은 아직 테스트해보지 않았음)
700x24 짜리 fillRect 하는데 2,000 ms 이상 걸린다고 하면 믿을 수 있겠는가  offscreen buffer 에도 똑같이 setXORMode로 그려본 결과 이 부분에서는 전혀 성능 저하가 없다. 그나저나 2000년에 만든 코드여서 그런지 createGraphics 로 offscreen buffer를 만드는 등의 코드들이 여기저기 널려있는데, JDK 1.4부터 추가된 Canvas.createBufferStrategy 덕분에 createGraphics 는 더이상 쓸모가 없어보인다 -.-;
아무튼 미치고 팔짝 뛰겠다.
내 JRE 버전은 1.6.0_10 b14 위 코드가 멀쩡히 돌아가던 시절의 JRE는 MS JVM 1.1  참고로 옆 pc 에 깔려있던 jre 1.5 에서는 아무런 문제없이 작동한다.
테스트 코드
import java.awt.*; public class test extends Canvas { public void paint( Graphics g ) { g.setColor( Color.black ); g.fillRect( 0, 0, 400, 20 ); g.setXORMode( Color.red ); g.setColor( Color.yellow ); g.fillRect( 0, 0, 400, 20 ); g.setPaintMode(); }
public static void main( String[] args ) throws Exception { Frame f = new Frame(" "); f.setSize( 400, 400 ); f.setLayout(new BorderLayout()); f.add( new test() ); f.setVisible(true); } }
테스트 결과 jdk 1.6.0_10 계열에서만 생기는 문제인 듯 하다. 1.6.0_07 이하 버전에는 XORMode 가 정상적으로 동작한다.
GWT 1.5 RC1 도 그렇고.. 버전 올라가면서 느려지는 게 왜케 많아;;
|
2008/07/15 07:19:06
|
|
|
이 글의 트랙백 주소 http://xrath.com/blog/trackback/718
|
| 0 trackbacks were registered. |
|
|
|