UI绘制优化

性能优化的目的不是优化项目,而是优化编码习惯。--jett

CPU 与GPU工作流程

image.png

image1.png

image2.png

image3.png

image4.png

VSYNC(vertical synchorinzed) 垂直同步信号
VR 视频看上去头晕是因为帧数不够

image5.png

CPU处理信息--->GPU绘制信息,这两个过程在周期中无论那个过程未完成,都会丢帧 如image5 中的“绿色方块儿2、3、4”

image.png

image6.png

image7.png
查看方法

开发者选项->Profile GPU rendering/调试GPU过度绘制

image8.png

配置文件 GPU 渲染速度

配置文件 GPU 渲染工具作为滚动直方图显示渲染 UI 窗口的帧相对于每帧 16 毫秒的基准需要多少时间的可视化表示。

在功能较低的 GPU 上,可用填充速率(GPU 填充帧缓冲区的速度)可能相当低。随着绘制帧所需的像素数增加,GPU 可能需要更长时间来处理新命令,并要求系统的其余部分等待,直到它能够赶上。分析工具可帮助您识别 GPU 何时在绘制像素时不堪重负或因大量透支而不堪重负。

注意:此分析工具不能与使用 NDK 的应用使用。这是因为每当 OpenGL 采用全屏上下文时,系统都会将框架消息推送到后台。在这种情况下,您可能会发现 GPU 制造商提供的分析工具很有帮助。

启用探查器

开始之前,请确保使用运行 Android 4.1 (API 16) 或更高版本的设备,并启用开发人员选项。若要在使用应用时开始分析设备 GPU 渲染,请按照以下步骤操作:

  1. 在设备上,转到"设置"并点按"开发人员选项"。
  2. 在"监视"部分中,选择"配置文件 GPU 渲染"。
  3. 在"配置文件 GPU 渲染"对话框中,选择"在屏幕上"作为条形图,以覆盖设备屏幕上的图形。
  4. 打开要分析的应用。

检查输出

在图 1 所示的配置文件 GPU 渲染图的放大图像中,您可以看到在 Android 6.0(API 级别 23)上显示的彩色部分。

image

图1。放大的配置文件 GPU 渲染图。

以下是有关输出的一些需要注意的事项:

  • 对于每个可见的应用程序,该工具将显示一个图形。
  • 沿水平轴的每个垂直条表示一个帧,每个垂直条的高度表示帧渲染所需的时间(以毫秒为单位)。
  • 水平绿线表示 16 毫秒。要达到每秒 60 帧,每个帧的垂直条需要保持在这条线以下。当条形超出此行时,动画中可能会暂停。
  • 该工具通过使相应的条形更宽且透明度更低来突出显示超过 16 毫秒阈值的帧。
  • 每个条形都有映射到渲染管道中阶段的颜色组件。组件的数量因设备的 API 级别而异。

下表提供了使用运行 Android 6.0 及更高版本的设备时探查器输出中垂直条的每个段的说明。


表1.Android 6.0 及更高版本的组件条

4.0(API 级别 14)和 5.0(API 级别 21)之间的 Android 版本具有蓝色、紫色、红色和橙色段。4.0 以下的 Android 版本只有蓝色、红色和橙色组件。下表显示了 Android 4.0 和 5.0 中的组件栏。


表2.**Android 4.0 和 5.0 中的组件条

有关如何解释分析工具提供的信息的信息,请阅读使用配置文件GPU 渲染进行分析

注:虽然此工具名为配置文件 GPU 渲染,但所有受监视的进程实际上都发生在 CPU 中。渲染通过向 GPU 提交命令而发生,GPU 以异步方式呈现屏幕。在某些情况下,GPU 可能有太多的工作要做,并且 CPU 必须等待才能提交新命令。发生这种情况时,您将在橙色和红色条形中看到峰值,并且命令提交将阻止,直到在 GPU 命令队列上创建更多空间。

image9.png

过度绘制优化(主要是减少GPU工作量)

1.减少背景重复

注意主题中的设置

去掉单个Activity主题设置属性,可以在*setContentView*之前
 getWindows().setBackgroundDrawable(null) 

去掉所有activity中主题设置中的属性 直接在 styles.xml中设置
<item name="ansroid:windowBackground">@null<item>

非业务需求,不要设置背景

*透明颜色CPU会进行计算,但GPU不会绘制

2.使用裁剪减少控件之间的重复部分
        canvas.clipRect((float)c.x,0f,(float)(mDroidCards.get(i+1).x),(float)c.height);

Android 7.0之后系统做出的优化--invalidate()不再执行测量和布局工作

布局的优化 (主要减少CPU工作量)

常用工具

Android/sdk/tools/bin/ui automator viewer.bat
Android\sdk\tools\monitor.bat
Device Monitor窗口中Hierarchy view

三个点也是代表着View的Measure, Layout和Draw。

  • 绿: 表示该View的此项性能比该View Tree中超过50%的View都要快;例如,代表Measure的是绿点,意味着这个视图的测量时间快于树中的视图对象的50%。
  • 黄: 表示该View的此项性能比该View Tree中超过50%的View都要慢;
  • 红: 表示该View的此项性能是View Tree中最慢的;。

注意点:
1.能在一个平面显示的内容,尽量只用一个容器
2.尽可能把相同的容器合并merge
3.能复用的代码,用include处理,可以减少GPU重复工作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • UI绘制优化 一.CPU与GPU工作流程 cpu:中央处理器(用于计算) gpu:图形处理器(用于显示) C...
    cat_code阅读 467评论 0 1
  • UI绘制优化好处,不仅可以减少卡顿,也可以加快启动速度,减少不必要的内存和cpu资源消耗。 UI绘制主要工作就是减...
    ArcherZang阅读 381评论 0 0
  • 一、CPU与GPU的工作流程 二、卡顿原因分析 三、实战解决过度优化 四、过度绘制优化(主要减少GPU工作量) 1...
    世锋日上阅读 371评论 0 1
  • 引言 1. Android性能优化篇之内存优化--内存泄漏 2.Android性能优化篇之内存优化--内存优化分析...
    爱听音乐的小石头阅读 5,210评论 0 11
  • 60Hz 刷新频率由来 12 fps :由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约 10-12 帧的...
    Coder_Sven阅读 127评论 0 0