LAYER_TYPE_HARDWARE并绘制到缓存中

时间:2013-01-22 06:40:07

标签: android hardware-acceleration

视图可以具有LAYER_TYPE_HARDWARE(view.setLayerType(LAYER_TYPE_HARDWARE,null))的layerType,告诉它将缓存绘制到GPU中。如何判断缓存的绘制频率?有什么规则吗?我假设每次视图调用invalidate或onDraw时,LAYER_TYPE_HARDWARE都必须创建一个新的缓存。如果这是真的,对于一个调用onDraw的视图来说,没有LAYER_TYPE_HARDWARE似乎更好,因为有两倍的工作(因为绘制到未使用的缓存将是开销)。

无论如何,我看到没有钩子我可以记录并设置开发选项闪存GPU上的屏幕也看不到任何事情。

TL:DR,我怎么知道何时创建了一个新的图层缓存?

1 个答案:

答案 0 :(得分:6)

  

我如何知道何时创建新的图层缓存?

首次调用view.setLayerType(LAYER_TYPE_HARDWARE,null)时会创建它

在幕后,您的视图快照被拍摄并作为纹理上传到GPU。

  

如何判断此缓存的绘制频率?有什么规则   它?

如果要更改某些属性(如alpha,视图坐标,缩放或旋转视图),则不会将新纹理上载到GPU。这就是为什么硬件层对于某些类型的动画是好的,因为不是重绘(因此在层的情况下重新上载纹理),你基本上只需要将转换矩阵发送到GPU。

如果您更改视图的任何其他属性,则会将新纹理上载到GPU,如果您在动画中执行此操作,这可能会非常昂贵。

  

我会假设每次视图调用invalidate或onDraw表示   LAYER_TYPE_HARDWARE必须创建一个新缓存。

取决于。如前一段所述,如果使用alpha,x,y,scale和rotate等图层友好属性,则无效将不会导致重绘。在这种情况下,不会上传新的纹理。

然而,由于对其他属性的更改而导致无效将导致纹理上传,并且比仅绘制没有图层的速度慢。