Android hw accelerated_2d_rendering

4,367 views
4,268 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,367
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Android hw accelerated_2d_rendering

  1. 1. Android 硬件加速的2D绘图研究 硬件加速的2D 2D绘图研究Android HW Accelerated 2D Rendering Roger yixx@ucweb.com roger2yi@gmail.com www.twitter.com/roger2yi https://plus.google.com/
  2. 2. Introduction2012-5-15 Roger, UC
  3. 3. HW Accelerated 2D Rendering• 硬件加速的2D绘图主要包括两个方面 – 基本图元绘制(Primitive Drawing - Shape, Text,Image) – 图层混合(Layer/Surface/Window Composite)2012-5-15 Roger, UC
  4. 4. Some Android Graphics True Facts...• 从Android 1.0开始,窗口混合就开 始使用硬件加速 – 右图包含了4个窗口,分别是 - 状 态栏,壁纸,lanucher和菜单 – 像通知栏的拖拉,Activities的切换 动画,菜单,对话框的弹出/消失 动画都使用了硬件加速进行窗口混 合• 在Android 3.0之后,窗口内部的内 容绘制(Canvas)才开始支持硬件 加速2012-5-15 4
  5. 5. Controlling Hardware Acceleration• Application• Activity• Window• View2012-5-15 Roger, UC
  6. 6. Application Level• Android 3.x 默认为false• Android 4.x 默认为true(可以通过系统设 置关闭)2012-5-15 Roger, UC
  7. 7. Activity/Window Level• Window Level 只能开不能关• 可以在清单文件中设置Activity关闭,然后根据运 行时Intent传入的参数再打开窗口的硬件加速2012-5-15 Roger, UC
  8. 8. View Level• 将View的Layer Type设置为SW Layer,可以使View创建 一个内部的位图缓存,View的内容先绘制到位图,然后再 把位图拷贝到Window Surface上• 相当于关闭该View的硬件加速绘图2012-5-15 Roger, UC
  9. 9. View Layer Type• 在Android 3.0+后,View一共有3种Layer Type – None,默认类型,View的内容直接绘制到Window Surface上面 – SW Layer,创建一个内部的位图缓存,View的内容先 绘制到位图,然后再把位图拷贝到Window Surface上 – HW Layer,创建一个内部的硬件加速的帧缓存,View 的内容先绘制到帧缓存,然后再拷贝到Window Surface上,只有在Window是硬件加速时才支持,否 则自动变为SW Layer2012-5-15 Roger, UC
  10. 10. 2D Rendering Mode• 在Android 3.0后,一共有5种主要的2D渲 染模式,1主要用于游戏,2,3,4都可以 用于一般的View Hierachy渲染,5主要用 于动画和实时交互场景 1. 通过SurfaceHolder获得Window或者SurfaceView的 Surface Canvas(SurfaceHolder.lockCanvas),在单 独的Render Thread中绘图 2. Window Surface硬件加速,View的Layer Type为 None,在主线程(UI线程)中绘图(View.onDraw)2012-5-15 Roger, UC
  11. 11. Cont. 3. Window Surface非硬件加速,View的Layer Type为 None,在主线程(UI线程)中绘图(View.onDraw) 4. Window Surface硬件加速,View的Layer Type为SW, 在主线程(UI线程)中绘图(View.onDraw) 5. Window Surface硬件加速,View的Layer Type为HW, 在主线程(UI线程)中绘图(View.onDraw)2012-5-15 Roger, UC
  12. 12. Canvas• Android3.0+后有3种不同的Canvas类型: – android.graphics.Canvas • 通过Bitmap生成的Canvas • 当View的设置为SW Layer时,View在onDraw中获得的 Canvas – android.view.Surface$CompatibleCanvas • 通过SurfaceHolder.lockCanvas获得的Canvas • 当Window非硬件加速时,Window中的View在onDraw中获得的 Canvas – android.view.GLES20RecordingCanvas (HW Accelerated!!! HW Accelerated!!!) • 当Window硬件加速时,Window中的View在onDraw中获得的 Canvas(View的 Layer Type为None或者HW) – isHardwareAccelerated用于判断Canvas是否使用硬件加速2012-5-15 Roger, UC
  13. 13. Benchmark2012-5-15 Roger, UC
  14. 14. 0xbench_2d_hwhttps://github.com/rogeryi/0xbench_2d_hw2012-5-15 Roger, UC
  15. 15. Test• 对应渲染模式1~4 • 测试项包括: – 2D (SV) – Draw Canvas 填充整个 Canvas – 2D (HW) – Draw Circle2 圆形填充 – 2D (SW1) – Draw Rect 矩形填充 – 2D (SW2) – Draw Arc 弧形填充 – Draw Image 位图绘制 – Draw Text 文本绘制2012-5-15 Roger, UC
  16. 16. Samsung Draw Canvas Draw Circle2 Draw Rect Draw Arc Draw Image Draw TextGalaxy Tab (texture/gra (texture/gradi (texture/gradi (texture/gradi (w/o filter)10.1 (3.2) dient/color) ent/color) ent/color) ent/color)2D (SV) 59.4/24/60 51.7/38/46.8 19/10.5/13.8 13.4/21/25.8 11/25 13.12D (HW) 43.3/46/56 25/24.6/24.5 27.1/24/28 22.3/24/27 34/34 52D (SW1) 58.5/21/60 52.3/31/38 19.5/7/10.2 15/15.6/18.2 10.6/22 122D (SW2) 27.6/17/28 26.9/21/22 15.1/7/8.5 12/13.6/15.4 9.6/16.6 112012-5-15 Roger, UC
  17. 17. Nexus S Draw Canvas Draw Circle2 Draw Rect Draw Arc Draw Image Draw(4.0.3) (texture/gradient (texture/gradie (texture/gradie (texture/gradi (w/o filter) Text /color) nt/color) nt/color) ent/color)2D (SV) 55.5/55.6/54.5 50.5/51.6/50 33.3/23.4/32 46/35.5/47.8 35.5/55.6 92D (HW) 42/42/53.8 30/30.0/31.2 45/16/45.7 40.5/13/44 28/28 3.22D (SW1) 55.7/55.9/55.4 52.6/49.4/50 37/17.7/28.6 47.5/29.7/43 28.5/49.2 8.52D (SW2) 48.2/42.8/41.4 43.7/36.4/39 27.4/16.6/22 35.6/24/32.4 21.4/32.2 82012-5-15 Roger, UC
  18. 18. Basic Conclutions• 模式1总是比模式3要快,因为没有异步请求(invalidate/onDraw) 的延迟• 模式3总是比模式4要快,模式4多了一次位图拷贝• 模式2(硬件加速)跟模式3(非硬件加速)相比,有些快,有些慢• 在硬件加速时,drawXXX方法实际只是将绘图指令存储到一个内部的 绘图指令序列中(DisplayList),实际的绘制发生在onDraw调用之 后• 硬件加速的位图拉伸/旋转/扭曲绘制更平滑,filter bitmap flag总是打 开的2012-5-15 Roger, UC
  19. 19. Cont.• 硬件加速绘图主要的优势在于 – 位图绘制,特别是带拉伸,旋转,扭曲 – 渐变填充 – 图层混合• 硬件加速绘图主要的劣势在于文本绘制• 充分利用硬件加速的图层混合(开启View的HW Layer)是实现60fps 的实时交互和动画的关键• 对高分辨率和具备更快的GPU的新的旗舰手机和平板,硬件加速的优 势越来越明显,没有支持硬件加速的应用卡顿会十分明显2012-5-15 Roger, UC
  20. 20. Some Tips• 硬件加速绘图不是Silver Bullet,always profile your bottleneck• 避免在UI线程或者渲染线程中进行IO和网络操作(使用 Strict Mode进行检测)• 避免频繁修改位图(Bitmap),图形(Shape),避免在 绘图方法中创建画笔(Paint)和路径(Path),特别是 处于硬件加速时• 对于硬件加速,尽可能batch drawing code,比如调用 drawLines比多次调用drawLine要高效的多2012-5-15 Roger, UC
  21. 21. Renference• Android 3.0 Hardware Acceleration• New Gingerbread API: StrictMode• How about some Android graphics true facts?• How about some Android graphics true facts? [More]• Understanding Hardware Acceleration on Mobile Browsers• Android 圖形系統 -- 設計與實做分析2012-5-15 Roger, UC
  22. 22. The EndThank you for your listening Yours Sincerely, Roger

×