Slide 1

Slide 1 text

$IPSFPHSBQIFS 8BTBCFFG

Slide 2

Slide 2 text

"CPVU.F @wasabeef_jp CyberAgent, Inc.

Slide 3

Slide 3 text

Choreographer IUUQEBODFXPSLTOFUJOTQJSBUJPODIPSFPHSBQIFST

Slide 4

Slide 4 text

$IPSFPHSBQIFS “The choreographer receives timing pulses (such as vertical synchronization) from the display subsystem then schedules work to occur as part of rendering the next display frame.”

Slide 5

Slide 5 text

'SBNF3BUF

Slide 6

Slide 6 text

'SBNF3BUF “ϑϨʔϜϨʔτ͸ɺಈըʹ͓͍ͯɺ୯Ґ࣌ؒ͋ ͨΓʹॲཧͤ͞ΔϑϨʔϜ਺ʢ੩ࢭը૾਺ɺί Ϛ਺ʣͰ͋Δɻ௨ৗɺ1ඵ͋ͨΓͷ਺஋Ͱද͠ɺ fpsʢӳ: frames per secondʹϑϨʔϜຖ ඵʣͱ͍͏୯ҐͰද͢ɻ”

Slide 7

Slide 7 text

IUUQTUXJUUFSDPN.D'VOLZQBOUTTUBUVT

Slide 8

Slide 8 text

60fps: 16.666666667/ms 40fps: 33.333333333/ms 15fps: 66.666666667/ms

Slide 9

Slide 9 text

74ZOD

Slide 10

Slide 10 text

IUUQCJUMZ&2RKL

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

)PXUPVTF

Slide 13

Slide 13 text

class Metronome implements Choreographer.FrameCallback { private Choreographer choreographer; public Metronome() { choreographer = Choreographer.getInstance(); } public void start() { choreographer.postFrameCallback(this); } public void stop() { choreographer.removeFrameCallback(this); } @Override public void doFrame(long frameTimeNanos) { Timber.i(“Callback frameTimeNanos” + frameTimeNanos); choreographer.postFrameCallback(this); } }

Slide 14

Slide 14 text

$IPSFPHSBQIFS$PNQBU JOGBDFCPPLSFCPVOE

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

IUUQTXXXqJDLSDPNQIPUPTUFUTVL

Slide 17

Slide 17 text

IUUQTHJUIVCDPNXBTBCFFG5BLU

Slide 18

Slide 18 text

EFQFOEFODJFT\ DPNQJMFKQXBTBCFFGUBLU ^  5BLUTUPDL UIJT QMBZ

Slide 19

Slide 19 text

5IBOLT