[SWT] 그래픽스

Posted by 구루고양이 Dev고양이
2012.12.07 21:59 Software Dev Note/자바

1. GC(Graphical Context) 클래스는 SWT의 그래픽엔진의 코어를 형성한다.

2. GC는 도형, 텍스트, 이미지를 그리는데 필요한 모든 메소드를 제공한다.

3. 컨트롤, 디바이스 또한 다른 이미지 위에 그릴수 있다.


일반적으로 그리기 라이프사이클은 다음과 같이 구성된다.

1. 그리려고 하는 대상의 GC를 생성하거나 얻음.

2. 그린다.

3. GC를 생성했다면, 소멸시킨다.


코드로 보면 다음과 같다.

GC gc = new GC(display);

gc.drawRectangle(...);

gc.drawText(...);

gc.drawImage(...);

gc.dispose();


일반적으로 paint handler에 그리기 코드를 넣는다.


final Canvas canvas = new Canvas(shell, SWT.NONE);

canvas.addPaintListener(new PaintListener() {

public void paintControl(PaintEvent e) {

GC gc = new GC(canvas);

gc.drawFocus(...);

gc.drawText(...);

gc.dispose();

}

});



GC 생성 피하기

GC를 생성하면 dispose() 를 해야한다.

이를 회피할 수 있는 방법은 다음과 같다.



final Canvas canvas = new Canvas(shell, SWT.NONE);

canvas.addPaintListener(new PaintListener() {

public void paintControl(PaintEvent e) {

e.gc.drawFocus(...);

e.gc.drawText(...);

}

});





저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로

[SWT] 이벤트

Posted by 구루고양이 Dev고양이
2012.12.07 21:39 Software Dev Note/자바

이벤트

1. SWT는 2가지 유형의 리스너를 제공한다. : untyped / typed

2. untyped 리스너는 보다 간단한 코드를 작성할 수 있게 한다.

3. typed 리스너는 보다 더 모듈화 된 디자인을 할 수 있게 한다.


이벤트모델

1. SWT는 옵저버 패턴에 기반한 이벤트모델을 사용한다.

2. 다수의 리스너를 등록하여 알림메세지를 보낼 수 있다.

3. SWT에서는, 위젯과 Display만 이벤트 리스너를 가질 수 있다.



Typed 이벤트 리스너

타입이 정해진 이벤트 리스너(typed listner)는 단지 한종류의 특정한 이벤트 타입에 대해서만 listen 할 수 있다. 예를 들면, SelectionListener 는 SelectionEvent 라는 이벤트타입에 대한 리스너 이다.

untyped 이벤트 리스너는 이벤트를 듣기위한, 보다 generic 하며, low-level의 메카니즘을 제공한다.



Untyped Events와 Untyped 이벤트 리스너

타입이 정해지지 않은 이벤트 리스너(untyped event listener)는 아무런 타입의 이벤트를 듣도록 등록할 수 있다. SWT는 untyped 이벤트를 위해서 두가지 종류의 클래스를 가지고 있다.


1. Listener 라는 이름의 인터페이스

2. Event 라는 이름의 이벤트 클래스




저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로

[삼성소프트웨어멤버십] 수료식

Posted by 구루고양이 Dev고양이
2012.12.04 23:35 잡학다식



12월 4일, 수료식과 함께 2년간의 소프트웨어 멤버십 생활이 끝났음을 알리는, 수료증서를 받았다.

2011년 2월부터 시작된 멤버십 생활.


학교에서의 수업과 과제, 졸업작품. 

멤버십에서의 창의과제와 삼성과제들, 수많은 세미나들과 교육들. 기술전과 같은 행사들까지.

정말 시간이 어떻게 가는지 모르게 바쁘게 지낸 것 같다.

이제는 수료를 하였고, 이것은 대학생 생활이 곧 끝난다는 것을 의미한다.

2개월 뒤면 졸업 후 삼성전자 신입사원으로써 새로운 출발을 할 것이다.

설렌다.

저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로

커널에서 자주 사용되는 매크로 : likely( ) / unlikely( )

Posted by 구루고양이 Dev고양이
2012.11.23 17:04 Software Dev Note/Open Source Project

커널 소스를 보다보면 likely 또는 unlikely 메크로를 자주 사용하는 것을 볼 수 있다.

likely / unlikely macro가 어떤 의미를 알아보았다.


likely / unlikely macro는 커널 소스(소스위치/include/linux/compiler.h ) 에 다음과 같이 정의되어 있다.

(커널 3.2 기준)


109 /*

110  * Using __builtin_constant_p(x) to ignore cases where the return

111  * value is always the same.  This idea is taken from a similar patch

112  * written by Daniel Walker.

113  */

114 # ifndef likely

115 #  define likely(x)     (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))

116 # endif

117 # ifndef unlikely

118 #  define unlikely(x)   (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))

119 # endif


볼드체로 표시된 부분을 주목하라.


likely 매크로 내부의 __builtin_constant_p  메크로는 branch prediction 정보를 컴파일러에게 알려주는 기능을 합니다.


 쉽게 말하면, if문을 작성할 때 프로그래머가 컴파일러에게 '이 코드는 true(or false) 일 것 같다' 라고 말을 해주는 것과 같은 역할을 한다고 볼 수 있다. 컴파일러는 이 정보를 바탕으로 최적화된 branch 코드를 생성해 낸다고 한다.


 조금 전문적으로 말해보자. likely / unlikely 매크로는 수동 분기예측을 하는 것인데, likely일것 같은 코드를 분기문의 바로 다음에 위치하도록 해서 CPU의 파이프라이닝이 계속 유효한 상태가 되도록 만들어주어 성능 향상을 도모한다. (프로세서는 성능을 높이기 위해서 파이프라인으로 동작하게 되는데 코드의 실행 중 브랜치를 만나게 되면 미리 fetch해온 코드를 flush 하기 때문에 파이프라인이 깨져서 성능이 떨어지게 된다.)

 따라서 가능하면 브랜치를 하지 않도록 코드를 작성하는 것이 성능을 높이는데 도움이 된다. 이를 위해서 조건문이 true일 가능성이 높은지 false 일 가능성이 높은지를 컴파일러에게 알려주기 위해서 likely 또는 unlikely 매크로를 사용하는 것이다.

저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로
    • sejun
    • 2013.02.21 04:28 신고
    잘 보고 갑니다.

    그런데 __branch_check_(x, expect) 메크로를 직접 분석하신 건가요;;?

    암호문처럼 써있는데 이런건 어떻게 해야 쉽게 분석이 가능할까요 ..

Concurrency Visualizer

Posted by 구루고양이 Dev고양이
2012.11.18 23:07 Software Dev Note

Concurrency Visualizer View는 컴퓨터에서 멀티스레드 기반 어플리케이션이 자신,하드웨어,OS,다른 프로세스와의 상호작용 하는것을 볼수있게 한다.

이 뷰는 당신의 프로그램안과 시스템전체의 스레드들간의 임시적인 관계를 보여주는 그래픽,표, 텍스트 데이터를 제공한다.

당신은 Concurrency Visualizer를 성능 병목구간, CPU 자원낭비지점, 스레드 경쟁, 다중코어에서의 코어간 스레드 이동, 동기화 지연, overlapped I/O 영역 그리고 다른 정보들 에 위치시켜 사용할수 있다.

뷰는 당신이 그것의 그래픽출력을 콜스택이나 소스코드에 연결하는 등의 행위를 언제나 가능하도록 데이터를 제공한다

이 도구는 효율적인 워크플로우가 가능하도록 Visual Studio 2010 프로파일러에 통합되었다.


출처 : http://msdn.microsoft.com/en-us/library/dd537632(v=vs.100).aspx


참조 : http://blogs.msdn.com/b/visualizeparallel/archive/2010/07/30/diagnosing-lock-contention-with-the-concurrency-visualizer.aspx

저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로
«이전  1 ... 2 3 4 5 6 7 8 9 10 ... 41  다음»