美文网首页
UI绘制优化

UI绘制优化

作者: Dear月 | 来源:发表于2021-01-21 00:53 被阅读0次

性能优化的目的不是优化项目,而是优化编码习惯。--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重复工作

相关文章

  • 性能优化

    Android UI性能优化实战 识别绘制中的性能问题性能优化(二) UI 绘制优化 通过Hierarchy Vi...

  • Android UI性能优化

    Ui性能优化 参考博客:Android UI性能优化实战 识别绘制中的性能问题Android UI性能优化详解 1...

  • UI优化

    UI优化,也就是体验优化 常见优化场景 1) 过渡绘制 2) 布局复杂度 3) 逻辑优化 4) 内存使用优化 UI...

  • Android UI渲染优化

    Android UI渲染优化 1. 过度绘制优化 什么是过度绘制? Overdraw(过度绘制)描述的是屏幕上的某...

  • android性能优化全方面解析(二)

    补昨天UI优化后半段,前半段点开主页就有啦 一 绘制优化 那么什么是绘制优化?绘制优化主要是指View的Ondra...

  • Android App优化

    本篇文章来简单介绍一下App优化的方式。 1、UI优化 UI优化主要是提高UI的绘制效率,包括减少UI层次,提高初...

  • IOS - UIView绘制流程 (displayLayer)(

    性能优化之 UI渲染优化 - 异步渲染 使用displayLayer进行异步绘制

  • 无标题文章

    APP性能优化 UI卡顿优化 View的绘制原理 UI卡顿原理分析 UI卡顿检测分析 BlockCanary原理分...

  • UI绘制优化

    60Hz 刷新频率由来 12 fps :由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约 10-12 帧的...

  • UI绘制优化

    CPU和GPU 名称介绍作用CPU处理器将 UI 对象转换为一系列多边形和纹理(计算画图的方法,可以理解为通过公式...

网友评论

      本文标题:UI绘制优化

      本文链接:https://www.haomeiwen.com/subject/vfylzktx.html