图片和图形之减少透支(17)

原文

概要


一个应用程序可以在一个框架内多次绘制相同的像素,这是一个称为透支的事件。透支通常是不必要的,并且最好被消除。它通过浪费GPU时间来渲染不影响用户在屏幕上看到的像素,从而表现为性能问题。

本文档解释了透支:它是什么,如何诊断以及您可以采取哪些措施来消除或减轻它

关于透支


透支是指系统在一帧渲染中多次在屏幕上绘制一个像素。例如,如果我们有一堆堆叠的UI卡,则每张卡都会隐藏下面的一部分。

但是,系统仍然需要抽取堆栈中的卡片的隐藏部分。这是因为堆叠的卡片是根据画家的算法渲染的:即按照前后顺序渲染 。这种渲染顺序允许系统对半透明物体(如阴影)应用正确的阿尔法混合。

发现透支问题


该平台提供以下工具来帮助您确定透支是否影响您的应用的性能。

调试GPU透支工具

调试GPU透视工具使用颜色编码来显示您的应用在屏幕上绘制每个像素的次数。计数越高,透支越有可能影响您的应用的性能。

有关更多信息,请参阅 如何可视化GPU透支

配置文件GPU渲染工具

配置文件GPU渲染工具显示渲染管道的每个阶段用于显示单个帧的时间,作为滚动直方图。每个条的 进程部分用橙色表示,显示系统何时交换缓冲区; 这个指标提供了透支的重要线索。

在性能较低的GPU上,可用的填充率(GPU可以填充帧缓冲区的速度)可能非常低。随着绘制帧所需的像素数量的增加,GPU可能需要更长的时间来处理新的命令,并要求系统的其他部分等待,直到可以赶上为止。该进程栏显示该尖峰发生,因为该GPU被此番试图尽可能快地绘制像素。原始像素数量以外的问题也可能导致此度量标准高峰。例如,如果调试GPU透支工具显示沉重的透支和过程尖峰,则可能有透支问题。

有关更多信息,请参阅如何配置GPU渲染速度

注意:配置文件GPU渲染工具不适用于使用NDK的应用程序。这是因为只要OpenGL获取全屏上下文,系统就会将框架消息推送到后台。在这种情况下,您可能会发现GPU制造商提供的分析工具很有帮助。

修正透支


您可以采取几种策略来减少或消除透支:

  • 在布局中删除不需要的背景。
  • 展平视图层次结构。
  • 降低透明度。
    本节提供有关这些方法中的每一种的信息。

删除布局中不需要的背景

默认情况下,布局没有背景,这意味着它不会直接渲染任何东西。但是,布局具有背景时,它们可能会导致透支。

去除不必要的背景是提高渲染性能的快速方法。一个不必要的背景可能永远不可见,因为它被应用程序在该视图之上绘制的所有其他内容所覆盖。例如,当系统在其上绘制子视图时,该系统可能完全掩盖父母的背景。

要找出透支的原因,请在布局检查器工具中浏览层次结构。当您这样做时,请注意可以消除的背景,因为它们对用户不可见。许多容器共享背景颜色的情况为消除不需要的背景提供了另一个机会:您可以将窗口背景设置为应用程序的主背景颜色,并将所有容器保留在其上,而没有定义背景值。

平展视图层次结构

现代布局使堆叠和图层视图变得容易,从而制作出漂亮的设计。但是,这样做可能会导致透支性能下降,特别是在每个堆叠视图对象不透明的情况下,需要将可见和不可见像素都绘制到屏幕上。

如果遇到此类问题,可以通过优化视图层次结构来减少重叠UI对象的数量,从而提高性能。有关如何完成此操作的更多信息,请参阅 优化视图层次结构。

降低透明度

在屏幕上渲染透明像素(称为alpha渲染)是透支的关键因素。与标准透视不同的是,系统通过在其上绘制不透明像素来完全隐藏现有绘制像素,因此透明对象需要先绘制现有像素,以便可以实现正确的混合方程。诸如透明动画,淡出和阴影等视觉效果都涉及某种透明度,因此可以为透支作出重大贡献。您可以通过减少渲染的透明对象的数量来改善这些情况下的透支。例如,您可以通过在TextView其中设置半透明alpha值的情况下绘制黑色文本来获取灰色文本。但通过简单地将文本绘制成灰色,您可以获得相同的效果,而且性能更好。

要了解更多关于透明度在整个绘图管道中强加的性能成本,请观看视频 透明度的隐藏成本

Lastest Update:2018.04.25

联系我

QQ:94297366

微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

图片和图形之减少透支(17)

猜你喜欢

转载自blog.51cto.com/4789781/2120591
今日推荐