android display pipeline
https://lwn.net/Articles/809545/
- software and hardware cooperating
 - in the advancement of the application’s execution — 推进
 
question
skia vs opengl?
graphic overview
https://source.android.com/devices/graphics
draw images to the screen in three ways:
- canvas
- Canvas APIs provide a software implementation for drawing directly on a surface
- with hardware-acceleration support
 
 
 - Canvas APIs provide a software implementation for drawing directly on a surface
 - opengl es
 - vulkan — like opengl es
- reductions in CPU onverhead
 - support for the SPIR-V Binary Intermediate language
 
 
surface
- everything is rendered onto a surface
 - every window backed by a surface
 - producer:surface
- surface produce a buffer queue
consumer:surfaceflinger 
 - surface produce a buffer queue
 
bufferqueue in three mode:
- synchronous-like mode
- no buffer is discarded
 - if producer is too fast, block and wait free buffers
 
 - non-blocking mode
- generates an error rather than waiting
 
 - discard mode
- discard old buffers rather than generate errors
 
 
high-level component
- SurfaceView and GLSurfaceView
- surface combine a surface and a view
 - composited by SurfaceFlinger not the app
- enabling rendering from a separate thread/process
 
 - GLSurfaceView provides helper classes to manage EGL contexts
 
 - SurfaceTexture
- combines a surface and GLES texture to create a BufferQueue
- app is the consumer
 
 
 - combines a surface and GLES texture to create a BufferQueue
 - TextureView
- combines a view with a surfacetexture
 
 
