본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] VSYNC & Choreographer - Butter Project

by 돼지왕 왕돼지 2017. 9. 5.
반응형

[android] VSYNC & Choreographer - Butter Project


http://developer.android.com/reference/android/view/Choreographer.html

', animation, animation framework, api16, bitmap, choreographer, Choreographer - 발레 안무가, Coordinate, display frame, doFrame, drawing timing, FrameCallback, gl thread, input, invalidate, JB, jelly bean, looper thread, ondraw, postFrameCallback, postInvalidateOnAnimation, postonanimation, postonanimationdelayed, pulse, REDRAW, render, rendering, setlayertype, texture, thread local singleton, valueanimator, View, view hierarchy, view.layer_type_hardware, vsync, vsync pulse, [android] VSYNC & Choreographer - Butter Project, 발레안무가, 변형, 젤리빈, 효과적인 drawing

Choreographer - 발레 안무가


-

API 16 ( Jelly Bean ) 부터 사용 가능하다.



-

animation, input 그리고 drawing timing 을 coordinate 한다.



-

choreographer 는 VSYNC pulse 타이밍에 event 를 받는다.

그리고 이 시간에 다음 display frame 에 대한 작업을 하면 된다.



-

앱은 일반적으로 choreographer 와 간접적으로 작용한다.

animation framework 나 view hierarchy 를 통해서 접근한다.


이 접근하는 것들은 다음과 같은 API 를 통해 한다.


ValueAnimator.start

View.postOnAnimation / View.postOnAnimationDelayed

postInvalidateOnAnimation

onDraw // 이 녀석은 자연스럽게 VSYNC 타이밍에 불리게 된다.



-

GL thread 에서 rendering 한다던지, animation framework 나 view hierarchy 를 사용하지 않고 animation 을 할 경우에는 


Choreographer.postFrameCallback(Choreographer.FrameCallback) 을 사용하면 된다.



-

각각의 Looper thread 는 각각의 choreographer 를 가지고 있다.



-

Choreographer 는 thread local 한 singleton 이다.



-

Choreographer.FrameCallback callback = new Choreographer.FrameCallback(){

     public void doFrame(long frameTime){

          render( frameTime );

     }

};


Choreographer c = Choreographer.getInstance();

c.postFrameCallback(callback);



-

효과적인 drawing 을 위해 invalidate() 대신 invalidate( l, t, r, b ) 을 통해 범위를 지정해주는 것이 좋다.




-

View 의 animation 시 view 자체의 redraw 가 불필요한 경우에는  아래와 같이 해주는 것이 좋다.


View.setLayerType(View.LAYER_TYPE_HARDWARE, null);


위와 같이 하면 GPU 쪽에서 이 녀석의 bitmap ( 혹은 texture ) 를 떠서 이 녀석을 가지고 animation 을 한다.


반대로 animation 을 하면서 view 자체가 변형되는 경우에는 이 녀석을 꺼주는 것이 더 좋다.

매번 다시 bitmap 을 뜨기 때문이다.




반응형

댓글